1

我有一个 MDB,为了响应传入的消息,它需要以原子方式执行一系列操作,为此我们使用 CMT。处理完消息并提交事务后,我需要执行最后一个操作 - 创建任务并将其排队以在线程池中执行,我在此 MDB 中创建和更新的实体将被引用。

我试图弄清楚是否有办法让 JMS 在从 onMessage() 成功(提交后)返回时调用方法(如回调)。此回调必须在与 onMessage() 相同的位置执行。

附加信息是我们正在使用 Glassfish 3.1 和包含的 JMS 提供程序。有任何想法吗?谢谢。

这是一些希望澄清的伪代码:

public void onMessage(final Message inMessage) {
    addDatabaseRecord();
    addOtherDatabaseRecord();
    updateDatabaseRecord();
}

@RunAfterOnMessageCommits  // Hypothetical annotation
public void postCommit()
    // Must not happen until transaction commits.
    addToThreadPoolWorkQueue();
}
4

3 回答 3

0

您的问题很难理解,因为它没有详细说明您希望在哪里调用回调方法:在服务器上还是在客户端上。onMessage() 显然在收到消息后由客户端处理。

于 2012-05-29T20:56:08.877 回答
0

似乎您在普通的 java ee 上运行。您可以使用面向方面的框架(例如 spring-aop)做一些技巧,以在方法之前或之后执行特定代码。这将是一个 xml 配置——虽然它可能对您的应用程序架构造成太大的干扰。然而,Spring AOP 不会干扰实际代码。

于 2012-05-30T17:06:21.147 回答
0

如果你是。在事务中运行,您可以在onMessage块中发送辅助消息。如果该事务回滚,它将不会被发送(或者从技术上讲,它不会被接收)。

于 2012-05-29T21:45:53.463 回答