2012-02-06 155 views
5

我正在尝试使用JMS和ActiveMQ的学校项目。JMS和ActiveMQ异常

我复制了O'Reilly书籍“Java Message Service 2nd Edition 2009年6月”中的代码块。它使用发布和订阅方法,实际上是一个小聊天,每个与该主题相关的人都可以将消息发送给每个人,每个人都可以看到其他人的消息。我编译程序,一切都很好,我尝试运行它,它给了我以下异常:

Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.activemq.jndi.ActiveMQInitialContextFactory [Root exception is java.lang.ClassNotFoundException: org.apache.activemq.jndi.ActiveMQInitialContextFactory] 

我发现,这个问题可能是因为两个原因:

  1. ActiveMQ的,所有-5.2.0.jar不会添加到类路径中。
    但它添加了类路径(EnvironmentVariables->选择ClassPath->编辑并添加以下内容:“D:\ Programming \ JMS \ ActiveMQ \ apache-activemq-5.2.0”(这是如何添加它没有?!? !)
  2. jndi.properties文件没有正确定义或尚未添加到classpath
    但我创造了它,并增加它的文件夹添加到类路径下面是它包含:。

    java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory 
    java.naming.provider.url = tcp://localhost:61616 
    java.naming.security.principal=system 
    java.naming.security.credentials=manager 
    connectionFactoryNames = TopicCF 
    topic.topic1 = jms.topic1 
    

什么问题?我已经尝试了很长时间,使其工作。我做错了什么?(

jndi.properties文件路径是否重要?或者它只需放在classpath中,从这里就可以找到它?

我也跑bin文件夹d的activemq.bat:\程序\ JMS \ ActiveMQ的\ Apache的ActiveMQ的-5.2.0 \ BIN \

[编辑] --------- ------------ 所以它在Eclipse中工作,但是 现在我已经在环境变量中正确添加了.jar文件,并且我已经从Windows的cmd中运行客户端。它不给任何错误,当我在Eclipse的控制台写,它出现在CMD控制台,一切就OK了,但是当我尝试在cmd中把它写在该行给出了一个错误:

publisher.publish(message); 

,它说

java.lang.NoSuchMethodError: org.apache.activemq.ActiveMQMessageProducerSupport.getDestination()Ljavax/jms/Destination; 

任何想法?我真的很想能够在CMD中运行它。 :(

--------------------- [/编辑]

回答

2

嗯,我在Linux上的权利,但我敢打赌,它有是:

d:\程序\ JMS \ ActiveMQ的\ Apache的ActiveMQ的-5.2.0 罐子

另外,如果你使用Eclipse运行它,并转到项目 - >构建路径,这罐子呢。不应该有任何问题,总之你可以发布CLASSPATH变量吗?

E DIT

如果你不能帮助我,我帮不了你。这与任何其他未来的问题或一般工作有关,提供详细信息 - 这总是有帮助的。如果你要提供CMD中运行的EXACT命令以及发生这种情况的类的代码,将会非常有用。

java.lang.NoSuchMethodError

通常这意味着该罐子是到位,类也,但该方法是没有的。它发生在使用一个版本的jar进行编译时,并且在运行时提供了一个删除此方法的jar,因此JRE无法找到它抛出错误。

我只是测试我的电脑上

我不明白为什么它不为你工作,但它确实对我来说。这里是我的课:

​​

一切都很好,如果我在Maven的一个单独的依赖运行它从月食:

<groupId>org.apache.activemq</groupId> 
<artifactId>activemq-core</artifactId> 
<version>5.2.0</version> 

然后,我的Java的javac做

javac -classpath /home/eugen/.m2/repository/org/apache/activemq/activemq-core/5.2.0/activemq-core-5.2.0.jar:/home/eugen/.m2/repository/javax/jms/jms/1.1/jms-1.1.jar Publisher.java 

请注意,我唯一添加的是两个罐子。

那么Java:

java -classpath /home/eugen/.m2/repository/org/apache/activemq/activemq-core/5.2.0/activemq-core-5.2.0.jar:/home/eugen/.m2/repository/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar:/home/eugen/.m2/repository/org/apache/camel/camel-core/1.5.0/camel-core-1.5.0.jar:/home/eugen/workspace/t/src/main/java/:/home/eugen/.m2/repository/javax/jms/jms/1.1/jms-1.1.jar:/home/eugen/.m2/repository/org/apache/geronimo/specs/geronimo-j2ee-management_1.0_spec/1.0/geronimo-j2ee-management_1.0_spec-1.0.jar com.test.Publisher 

我增加了一些需要的jar文件到类路径中并运行它 - 它完美的作品。

干杯,尤金。

+1

Hoooooly废话。它在Eclipse中工作。最后:((这让我想哭,你不知道我浪费了多少时间,非常感谢。) – AndreiBogdan 2012-02-06 19:31:43

+1

你可以看看Edit吗?如果你能再帮助我一次优秀:) :) – AndreiBogdan 2012-02-06 19:49:07

+1

@AndreiBogdan看到我的更新,并提供更多的细节,如果你仍然有错误。 – Eugene 2012-02-07 08:46:46

0

我遇到了同样的问题,它是我的财产配置结束时的空间(或似乎是一个空间)。

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory 

另请注意,您不必将jar文件嵌入到客户端代码中。简单地将activemq-all作为maven依赖包也可以。