Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MDB新线程正在调用onMessage,而上一个线程尚未完成_Java_Jboss_Jms - Fatal编程技术网

Java MDB新线程正在调用onMessage,而上一个线程尚未完成

Java MDB新线程正在调用onMessage,而上一个线程尚未完成,java,jboss,jms,Java,Jboss,Jms,在JBOSS EAP6中,我有一个长时间运行的MDB线程正在侦听JMS队列。它收到一条文本消息,其中包含一个它应该处理的工作DB键(循环) 在执行过程中,我注意到新线程会产生新的MDB实例,从而导致不一致。我确实希望以编程方式或配置方式防止这种情况,而不改变性能。例如,在onMessage中检查工作正在进行。我无法更改数据库模型 因为我在一个VM中运行,所以我即将使用一个存储DB密钥的静态集。(我有点迫于时间的压力来解决这个问题)。问题是因为我忘记了指定事务超时。因此,默认超时似乎开始生效 通过

在JBOSS EAP6中,我有一个长时间运行的MDB线程正在侦听JMS队列。它收到一条文本消息,其中包含一个它应该处理的工作DB键(循环)

在执行过程中,我注意到新线程会产生新的MDB实例,从而导致不一致。我确实希望以编程方式或配置方式防止这种情况,而不改变性能。例如,在onMessage中检查工作正在进行。我无法更改数据库模型


因为我在一个VM中运行,所以我即将使用一个存储DB密钥的静态集。(我有点迫于时间的压力来解决这个问题)。

问题是因为我忘记了指定事务超时。因此,默认超时似乎开始生效

通过添加事务超时解决了此问题:

 @ActivationConfigProperty( propertyName = "transactionTimeout", propertyValue = "10800" )

一个想法可能是使用单例bean,在这里我可以为消息中的DB密钥获取锁。。