2012-02-06 6 views
5

私はJMSとActiveMQを使って学校のプロジェクトをしようとしています。JMSとActiveMQの例外

O'Reillyの書籍「Java Message Service 2nd Edition June 2009」のコードブロックをコピーしました。パブリッシュとサブスクライブの方法を使用しています。実際には、話題に接続しているすべての人が誰にでもメッセージを送信でき、誰もが他の人のメッセージを見ることができる小さなチャットです。私はそれを実行しようと、それは私に次の例外を与え、私はプログラムをコンパイルし、すべてがOKです:

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] 

私はこの問題は、2つの理由があるかもしれないことが判明:

  1. ActiveMQに、すべての-5.2.0.jarはクラスパスに追加されません。
    しかし、クラスパス(EnvironmentVariables-> ClassPath-> Editを選択し、 "D:\ Programming \ JMS \ ActiveMQ \ apache-activemq-5.2.0"を追加してください。 !)
  2. jndi.propertiesファイルが正しく定義されていないか、クラスパスに追加されていない
    が、私はそれを作成し、クラスパスには、フォルダの追加ここではそれが含まれているものです:。。

    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ファイルのパスは重要ですか?それともクラスパスに置かれていて、そこから見つかるだけですか? --------- \ JMS \ ActiveMQの\のapache-ActiveMQの-5.2.0 \ binに

[編集] \ \プログラミング:

は、私はまた、binフォルダのDからactivemq.batを走りました------------ Eclipseでは動作しますが、 環境変数に.jarファイルを正しく追加しました.Windowsのcmdからクライアントを実行しました。

publisher.publish(message); 

とは、それは言う:それは私がEclipseのコンソールに書くとき、それはCMDコンソール、[OK]すべてのものに表示されますが、私は、CMDに書き込みしようとすると、それは、この行でエラーを与え、すべてのエラーを与えるものではありません

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

私は本当にCMDでそれを実行できるようにしたいと思います。 :(

--------------------- [/編集]

答えて

2

さて、私は今、Linux上だけど、私はそれが持っている賭けます:

D:\プログラミング\ JMS \ ActiveMQのapacheの-ActiveMQの-5.2.0また

、\あなたは、Eclipseでそれを実行し、プロジェクトに行けば - >パスと、このjarファイルを、次にビルドします。 CLASSPATH変数を投稿することはできますか?

E DIT

私を助けないと助けにならない。これは他の将来の質問や一般的な仕事に関連しており、詳細を提供しています。いつでも役立ちます。あなたがCMDで実行しているEXACTコマンドと、これが起こるクラスのコードを提供する場合は、非常に役に立ちます。

java.lang.NoSuchMethodErrorのは、一般的にはjarファイルも場所、クラスであることを意味するが、この方法ではありません。あるバージョンのjarでコンパイルし、実行時にこのメソッドが削除されたjarを提供すると、JREはエラーをスローすることができません。私はちょうど私のコンピュータ

上でテスト

それはあなたのために動作しない理由を私は理解していないが、それは私のために行います。ここに私のクラスがある:私はMavenの内の1つの依存関係を持つ日食からそれを実行した場合

​​

すべてが正常である:

<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 

私が追加したのは、2つのジャーだけです。

その後の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

+1

編集で見ることができますか?優れています。:) – AndreiBogdan

+1

@AndreiBogdanは私の更新を見て、まだエラーが発生した場合はさらに詳細を提供します。 – Eugene

0

私は同じ問題に遭遇しました。私はプロパティ設定の最後にスペース(またはスペースに見えたもの)がありました。

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

はまた、あなたは、必ずしもあなたのクライアントコードにjarファイルを埋め込む必要がないことに注意してください。 activemq-allをmaven依存関係として含めるだけでも動作します。

関連する問題