Как отловить ошибку при отправке сообщения из JMS
Я отправляю сообщение через мое автономное приложение, которое использует EJB MDB для связи с другим моим сервером приложений, работающим на сервере JBOSS. Мой сервер приложений подключен к серверу MSSQL. В определенном сценарии соединение с базой данных теряется на стороне сервера приложений, и мы получаем следующую ошибку:
Connection is reset.
Позже, когда я пытаюсь отправить сообщение, я не получаю никакой ошибки в моих автономных журналах EJB MDB, и процесс просто прекращает выполнение. Я получаю журнал ошибок в журналах на стороне сервера приложений, но те же журналы не распространяются на мою ошибку EJB MDB журналы.
Насколько я понимаю, когда соединение с db потеряно, все компоненты ejb, присутствующие в контейнере jboss, тоже обнуляются (я могу ошибаться, я новичок в EJB).
Я попытался реализовать приведенный ниже код в моем коде, который используется для отправки сообщения -
QueueConnection qcon = null;
@PostConstruct
public void initialize() {
System.out.println("In PostConstruct");
try {
qcon = qconFactory.createQueueConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
@PreDestroy
public void releaseResources() {
System.out.println("In PreDestroy");
try {
if(qcon != null)
{
qcon.close();
}
if(qcon== null){
throw new Exception(" new exception occured.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
У меня сложилось впечатление, что объект Queueconnection будет аннулирован, когда наше соединение с БД потеряно (так как мы создаем компонент и устанавливаем соединение для сообщения). Но это не похоже на работу.
1 ответ
Я нашел способ перезвонить моему заявлению после отправки сообщения. Я использовал отдельную временную очередь и использовал метод setJMSReplyTo для установки пункта назначения ответа. Больше информации можно получить по этой ссылке. Надеюсь, что это помогает другим.