我在Weblogic 11g容器上的Java JMS配置中有一个简单的用例(使用Spring 3.x框架进行依赖注入,使用EJB 2.x进行MDB和ejb-jar.xml中的声明式事务管理)。
我的问题在很多情况下,在第5步,我发现对象id还没有存在于数据库中,我抛出异常,消息循环返回并重新尝试,最终是object_id显示在数据库中,步骤5中的消息成功处理。
覆盖步骤1-4的工作流程(在MDB中实施)具有以" REQUIRED"完成的交易分界。在ejb-jar.xml中,连接工厂已启用XA。这意味着工作流(步骤1-4)必须在最后在步骤4中将消息发送到队列2时提交的事务中运行。
那么为什么step-5在很多情况下都没有在数据库中找到object-id。 有什么方法可以强制这样做以避免或减少在第5步中出现此错误。
答案 0 :(得分:1)
如果你说在很多情况下,在第5步,对象不在db中,很可能在你到达第5步时没有提交事务。
如果在从队列2中读取消息之前等待事务的结果,如果这些是2个不同的进程,则可以通知另一台计算机队列1中的所有消息都已交付并且已准备好继续阅读队列2中的消息。
答案 1 :(得分:-1)
我正在寻找使用weblogic容器的解决方案。我在weblogic控制台中找到了名为“交付时间覆盖”的设置 - 定义为 生成消息与在目标目标上生成消息之间的默认延迟,无论生产者和/或连接工厂指定的交付时间如何
time-to-deliver-override-link 我把这个值设置为3-4秒,这个问题减少了90%。
这里只是粘贴这些信息,以便其他寻找此问题的人可以从中受益。