2017-04-05 40 views
0

我正在尝试建立JMS连接。在connectionFactory.createContext,我得到了ActiveMQ的版本装载机报道,属性文件丢失的错误:了java.lang.RuntimeException:JMS:activemq-version.properties不可用

所致activemq-version.properties不可 在org.apache .activemq.artemis.utils.VersionLoader.getVersion(VersionLoader.java:87)

我运行Eclipse中的项目 - 所以它是最有可能的一个Eclipse的classpath的问题,但是我无法找到缺少的库。

完整堆栈跟踪:

javax.jms.JMSRuntimeException: Failed to create session factory 
    at org.apache.activemq.artemis.jms.client.JmsExceptionUtils.convertToRuntimeException(JmsExceptionUtils.java:88) 
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createContext(ActiveMQConnectionFactory.java:262) 
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createContex t(ActiveMQConnectionFactory.java:248) 
    at at.cone.health.dispo.online.DispoServerFacadeImpl$JMSReceiverThread.run(DispoServerFacadeImpl.java:109) 
Caused by: javax.jms.JMSException: Failed to create session factory 
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:727) 
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createContext(ActiveMQConnectionFactory.java:255) 
    ... 2 more 
Caused by: java.lang.RuntimeException: activemq-version.properties is not available 
    at org.apache.activemq.artemis.utils.VersionLoader.getVersion(VersionLoader.java:87) 
    at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQClientProtocolManager.<init>(ActiveMQClientProtocolManager.java:81) 
    at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQClientProtocolManagerFactory.newProtocolManager(ActiveMQClientProtocolManagerFactory.java:49) 
    at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.newProtocolManager(ServerLocatorImpl.java:575) 
    at org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl.<init>(ClientSessionFactoryImpl.java:173) 
    at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:757) 
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:724) 
... 3 more 

其中我尝试建立连接的代码: 的InitialContext的NamingContext =新的InitialContext(ENV);

   ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup(CONNECTION_FACTORY); 
       System.out.println("Got ConnectionFactory " + CONNECTION_FACTORY); 

       destination = (Destination) namingContext.lookup(DESTINATION); 

       System.out.println("Got JMS Endpoint " + DESTINATION); 

       final JMSContext context = connectionFactory.createContext("internal", "internal"); 

       this.context = context; 

       JMSConsumer consumer = context.createConsumer(destination, "client='" + clientUID + "'", true); 

       // Then receive the same number of messages that were sent 

该项目是基于ANT的,所以我不能使用maven依赖管理。尽管如此,服务器部分使用maven构建,所以我有一个本地maven存储库和一个指向.m2目录的eclipse构建路径变量M2_REPO。我试图在我的eclipse项目中设置一个库依赖项。我从eclipse运行项目,所以我们可以 - 首先忽略ANT相关的依赖关系,并只关注eclipse(但不包括maven)。

我从我的maven回购(使用我的M2_REPO变量,由路径扩展)向wildfly-client-all-10.0.0.Final.jar添加了一个库依赖项。该库在eclipse项目中正确显示为引用库。

我在eclipse maven项目中用相同的代码行实现了一个演示。在这里,我没有得到一个例外,在演示中我能够接收消息。所以我认为这是一个类路径问题。

我还在google和stackoverflow上搜索了缺少的activemq-version.properties,但没有找到任何相关的内容。我也没有找到一个名为activemq-version.properties的资源,即使它没有在演示项目(及其依赖项)中成功执行。

回答

0

经过一番调查后,我现在确定了原因。

在运行配置中,我有一个不同的类路径。这个类路径仍然来自一个更老的配置。在这里,我没有使用与maven版本相同的jar。运行配置包含jboss-client.jar和wildfly/bin/client目录下的jboss-cli-client.jar。

这个配置是错误的,并造成我没有在我的日志认识到额外的警告,但是这也是一个暗示,该解决方案:

警告:EJB客户端集成将无法使用,由于一个问题建立EJB客户端处理

我改成了wildfly客户端,全10.0.0.Final.jar这也包含在Maven项目的运行时间,但它再次没有解决问题。

然后我发现这篇文章:https://developer.jboss.org/thread/267824

解决方案:重新就业,为运行时配置的第一配置方法,利用wildfly \ BIN \客户端目录的JAR,但只有在JBoss-CLI-client.jar中和不是jboss-client-jar。