У меня странное поведение, когда мое приложение пытается отправить электронное письмо.java.net.SocketException: Broken pipe with SMTP
20:59:08,926 ERROR [release.com.mycompany.mail.GenericMail] (EJB default - 5) [MY_EJB INBOUND] Sending message failed!: javax.mail.MessagingException: Can't send command to SMTP host;
nested exception is:
java.net.SocketException: Broken pipe
at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2106) [mail-1.4.4-redhat-2.jar:1.4.4-redhat-2]
at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2093) [mail-1.4.4-redhat-2.jar:1.4.4-redhat-2]
at com.sun.mail.smtp.SMTPTransport.close(SMTPTransport.java:1184) [mail-1.4.4-redhat-2.jar:1.4.4-redhat-2]
at javax.mail.Transport.send0(Transport.java:197) [mail-1.4.4-redhat-2.jar:1.4.4-redhat-2]
at javax.mail.Transport.send(Transport.java:124) [mail-1.4.4-redhat-2.jar:1.4.4-redhat-2]
at com.mycompany.MailUtils.sendMail(MailUtils.java:258) [classes:]
До этого исключения было выброшено некоторое исключение тайм-аут:
20:57:50,291 ERROR [org.jboss.as.ejb3] (EJB default - 9) [ ] JBAS014122: Error during
retrying timeout for timer: [id=6be904b5-c1ef-4f0e-a277-d4c9f93e21b3 timedObjectId=SOME_EJB
auto-timer?:false persistent?:false [email protected]dab1 initialExpiration=/* date */ 00:00:00 UTC 2015 intervalDuration(in milli sec)=0 nextExpiration=/* other date */ 21:00:00 UTC 2015
timerState=RETRY_TIMEOUT: javax.ejb.EJBTransactionRolledbackException: JBAS014373:
EJB 3.1 PFD2 4.8.5.5.1 concurrent access timeout on [email protected] - could not obtain lock within 5000MILLISECONDS
Честно говоря, я не знаю, Что случилось. Я получил такое исключение в течение 5 часов. Я хочу знать, что произошло, и уметь избежать исключений в будущем.
UPDATE 1
SOME_EJB
является EJB с работами с timerService. Работает каждые 3 минуты, когда условия выполняются, отправляет электронное письмо.
Моя единственная идея заключается в том, что была проблема с сетью/базой данных, и это вызвало то, что одно выполнение задачи заняло более 3 минут.
MailUtils
является @Stateless
EJB
Mail не отправлен. К сожалению, включение debug не является решением для меня, потому что я не знаю, как воспроизвести это поведение. Также см. Обновление моего сообщения. –
Вы можете использовать Session.setDebugOut для перенаправления вывода отладки в файл, затем отбросить файл на успех и сохранить его для последующей отладки при сбое. Без дополнительной информации все, что вы можете предположить, это то, что сервер или сеть потерпели неудачу, и вам нужно повторить операцию. –