【问题标题】:How to catch error when message have been sent from JMS从 JMS 发送消息时如何捕获错误
【发布时间】:2018-05-07 09:24:41
【问题描述】:

我正在通过我的独立应用程序发送一条消息,该应用程序使用 EJB MDB 与我在 JBOSS 服务器上运行的其他应用程序服务器进行通信。我的应用程序服务器连接到一个 MSSQL 服务器。在某些情况下,应用服务器端与数据库的连接丢失,我们收到以下错误 -

Connection is reset.

稍后,当我尝试发送消息时,我的独立 EJB MDB 日志中没有任何错误,并且进程停止执行。我在应用程序服务器端日志中收到错误日志,但相同的日志不会传播到我的EJB MDB 错误日志。

据我了解,当 db 连接丢失时,jboss 容器中的所有 ejb bean 也会失效。(我可能是错的,我是 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 对象将被取消,当我们的数据库连接丢失时(因为我们正在创建 bean 并为消息建立连接)。但这似乎不起作用。

【问题讨论】:

  • 上面的代码似乎不起作用,所以我目前正在尝试了解如何实现从一个应用程序到另一个应用程序的错误传播,这涉及 EJB MDB。如果消息已从一个应用程序发送,并且在接收到消息后发生错误,我们如何向后传播该错误。

标签: error-handling jms ejb jms-topic edb


【解决方案1】:

我确实找到了一种在发送消息后回调我的应用程序的方法。我使用了一个单独的临时队列并使用 setJMSReplyTo 方法来设置回复目的地。可以从这里获得更多信息 link。希望这对其他人有帮助。

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 2018-07-30
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多