2016-11-17 110 views
0

我的项目在ActiveMQ中使用JMS,它在生产和运行我的测试本地计算机时都可以正常工作。我的问题发生在Jenkins运行我的测试(与我的计算机上的成功相同)时,我在控制台输出中获得以下条目:Jenkins的JMS ActiveMQ锁

2016-11-17 12:17:19,277 INFO oaactivemq。 store.SharedFileLocker 数据库activemq-data/localhost/KahaDB /锁定被锁定...正在等待10秒数据库被解锁。原因:java.io.IOException: 文件'activemq-data/localhost/KahaDB/lock'无法锁定。

有没有人有过相同的经历并遇到了解决方案?将非常感谢您的帮助!

控制台输出的更多细节:

2016年11月17日12:17:09193 WARN oaabroker.jmx.ManagementContext 无法启动JMX连接:不能结合到URL [RMI://localhost:1099/jmxrmi]:javax.naming.NameAlreadyBoundException: jmxrmi [根异常是java.rmi.AlreadyBoundException:jmxrmi]。 将重新启动管理重新创建jmx连接器,试图修复 此问题。

2016年11月17日12:17:09257 INFO oaastore.kahadb.plist.PListStore PListStore:[在/ var/lib中/詹金斯/作业/ MYDIR /工作区/ myproject的/ ActiveMQ的数据/本地主机/ tmp_storage] 开始

2016年11月17日12:17:09271 INFO oaactivemq.broker.BrokerService使用 持久性适配器: KahaDBPersistenceAdapter [在/ var/lib中/詹金斯/作业/ MYDIR /工作区/ myproject的/ ActiveMQ的数据/ localhost/KahaDB]

2016-11-17 12:17:09,277信息oaactivemq.store.SharedFileLocker 数据库activemq-data/localhost/KahaDB/lock被锁定...正在等待10秒 秒的数据库被解锁。原因:java.io.IOException: 文件'activemq-data/localhost/KahaDB/lock'无法锁定。

回答

0

以前的ActiveMQ进程仍在运行,它已经锁定了数据存储。您看到的这个新实例正在作为“奴隶”运行并轮询获取该锁。

+0

不幸的是,它并不是那么简单: –

+0

可能不是一个单独的进程.. JMX无法初始化的消息“javax.naming.NameAlreadyBoundException”表示您的测试可能试图在同一个JVM中重新注册代理。锁定消息指示某个线程(当前进程或其他)已经锁定了数据存储。 –

0

我能弄清楚这个问题。 Jenkins中的构建过程在测试阶段暂停,我被迫中止它,在目录中留下锁:dir-tests \ activemq-data \ localhost \ KahaDB。有两种方法可以解决这个问题:

1)最直接和最正确的解决方案是删除dir-tests \ activemq-data \ localhost \ KahaDB \ lock,但是我没有访问权限和远程Jenkins机。

2)我们可以使用不同的名称轻松创建Jms代理,例如,

brokerService.setBrokerName("MyDummyBrokerName"); 

这引起主动 - MQ使用的目录DIR-测试\ ActiveMQ的数据\ MyDummyBrokerName \ KahaDB,这意味着它将使用不同的锁。 但是,这是一种解决方法,而不是最终的解决方案,因为旧的锁和相应的目录将保留在Jenkins中。不过,它暂时解决了这个问题,之后可以删除旧的锁。

+0

João:很高兴听到您的问题已解决!请您接受+投票我的答案,因为它是正确的? –