JMSとActiveMQの例外

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

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

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-all-5.2.0.jar is not added to classpath.
    BUT added it the classpath (EnvironmentVariables->select ClassPath->Edit and add the following: "D:\Programming\JMS\ActiveMQ\apache-activemq-5.2.0" (THIS IS HOW YOU ADD IT NO?!?!)
  2. jndi.properties file is not defined properly or has not been added to the classpath.
    BUT i CREATED IT and added it's folder to the classpath. Here is what it contains:

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

私はまたbinフォルダからactivemq.batを実行した。D:\ Programming \ 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でそれを実行できるようにしたいと思います。 :(

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

5

2 答え

まあ、私は今Linuxにいるんだけど、

D:\Programming\JMS\ActiveMQ\apache-activemq-5.2.0.jar

Also, if you run it with Eclipse and go to Project -> Build Path and this jar then there shouldn't be any problems. Anyhow can you post the CLASSPATH variable?

編集

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

java.lang.NoSuchMethodError

一般的には、瓶が所定の場所にあることを意味しますが、クラスもそうですが、方法はそうではありません。あるバージョンのjarでコンパイルし、実行時にこのメソッドが削除されたjarを提供すると、JREはエラーをスローすることができません。

私は自分のコンピュータでテストしました

なぜそれがあなたのために働かないのか分かりませんが、それは私のためです。ここに私のクラスです:

 package com.test;
 public class Publisher {
 public static void main(String[] args) {
try{

        ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = factory.createConnection();
        ActiveMQSession session = (ActiveMQSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        Topic destination = session.createTopic("FOO.TEST");    
        TextMessage textMessage = session.createTextMessage("Sample Payload");

        TopicPublisher publisher = session.createPublisher(destination);

        publisher.publish(textMessage);

        session.close();
        connection.close();

        } catch(Exception e){
            e.printStackTrace();
        }
    }
}

私がMavenで1つの依存関係を持つeclipseから実行すると、すべてがうまくいきます。

org.apache.activemq
activemq-core
5.2.0

Then I do it with java and 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

クラスパスに必要ないくつかの瓶を追加して実行しました。これは完全に動作します。

乾杯、ユージン。

2
追加された
Hooooolyくそー。これはEclipseで動作します。ついに、((それは私が泣きたいと思って、これで無駄にしていた時間は分かりませんでした。
追加された 著者 AndreiBogdan,
あなたは編集で見ることができますか?もう一度私を助けてくれればそれは素晴らしいだろう。 :)
追加された 著者 AndreiBogdan,
@AndreiBogdanは私のアップデートを見て、まだエラーが出たらもっと詳しい情報を提供します。
追加された 著者 Eugene,

私は同じ問題に遭遇し、それは私のプロパティの設定の最後にスペース(またはスペースと思われたもの)でした。

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

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

0
追加された