1

プラグインをインストールして activemq ブローカーを構成しようとしていますが、ブローカー構成ファイルでプラグイン クラスの修飾名を正しく取得できないようです。以下に、エラー メッセージに続いてブローカーの設定を貼り付けました。基本的に、XmlValidationPlugin.class ファイルへの絶対パスである class="file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin" を指定している要素で上記のパスに .class を追加しようとしましたが、同じエラーが発生します)。最初は、class 属性が .class ファイルを指す必要があると想定していましたが、.java を指すように試みましたが、まだ機能しません。プラグイン、FAQ、Spring ドキュメントなどの開発に関するアクティブな MQ FAQ を読みました。

私のクラスパスは .;JAVA_HOME\lib;C:\Marcus\JavaProjects\Project;C:\Marcus\JavaProjects\Project\build\prod\classes で、JAVA_HOME は C:\Program Files\Java\jdk1.7.0_03 です。

すべての Java ソースは C:\Marcus\JavaProjects\Project\src にあり、.class ファイルは C:\Marcus\JavaProjects\Project\build\prod\classes にあります (クラスのファイル構造は src のファイル構造を反映しているため、たとえばcom.foo.jms.amqplugin.XmlValidationPlugin の .class ファイルは classes/com/foo/jms/amqplugin にあります)

問題のプラグインは XmlValidationPlugin.java で、パッケージ内のフォルダー src にあります: com.foo.jms.amqplugin

XmlValidationPlugin.class を JAR に入れ、JAR を activemqinstalldir/lib に入れようとしましたが (同様の問題を抱えた他の人に推奨されていました)、これは役に立ちませんでした。

私はすでにこれに1日半を費やしています.プラグインクラス属性の値がどうあるべきか、誰かが知っていれば本当に感謝しています.私はすべてを試しました...事前に感謝します!

エラー出力の上部:

C:\Program Files\apache-activemq-5.5.1>bin\activemq xbean:file:C:/Marcus/JavaProjects/Project/config/custom-broker.xml
Java Runtime: Oracle Corporation 1.7.0_03 C:\Program Files\Java\jdk1.7.0_03\jre
  Heap sizes: current=15872k  free=14246k  max=506816k
    JVM args: -Dcom.sun.management.jmxremote -Xmx512M -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Dactivemq.classpath=C:\Program Files\apache-
activemq-5.5.1\bin\../conf;C:\Program Files\apache-activemq-5.5.1\bin\../conf; -Dactivemq.home=C:\Program Files\apache-activemq-5.5.1\bin\.. -Dactivemq.base=C:\Program Files\apache-activemq-5.5.1\bin\
..
ACTIVEMQ_HOME: C:\Program Files\apache-activemq-5.5.1\bin\..
ACTIVEMQ_BASE: C:\Program Files\apache-activemq-5.5.1\bin\..
Loading message broker from: xbean:file:C:/Marcus/JavaProjects/Project/config/custom-broker.xml
 INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@7a8ba4: startup date [Thu Apr 12 10:38:26 CEST 2012]; root of context hierarchy
ERROR: java.lang.RuntimeException: Failed to execute start task. Reason: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to load type: file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin. Reason: java.lang.ClassNotFoundException: file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin; nested exception is java.lang.ClassNotFoundException: file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin
java.lang.RuntimeException: Failed to execute start task. Reason: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to load type: file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin. 
Reason: java.lang.ClassNotFoundException: file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin; nested exception is java.lang.ClassNotFoundException: file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin
        at org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:98)
        at org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
        at org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:143)
        at org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
        at org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:85)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    ...

ブローカー構成ファイル:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:amq="http://activemq.apache.org/schema/core"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

    <!-- Allows us to use system properties as variables in this configuration file -->
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <value>file:${activemq.base}/conf/credentials.properties</value>
    </property>
  </bean>

  <!--The <broker> element is used to configure the ActiveMQ broker. -->
  <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost"
    dataDirectory="${activemq.base}/data">

        ...


    <!--plugin-->
    <plugins>
      <bean xmlns="http://www.springframework.org/schema/beans" 
            id="xmlValidationPlugin"  
            class="com.foo.jms.amqplugin.XmlValidationPlugin"/>
    </plugins>


  </broker>


</beans>
4

1 に答える 1

1

基本的に、XmlValidationPlugin.class ファイルへの絶対パスである class="file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin" を指定している要素で上記のパスに .class を追加しようとしましたが、同じエラーが発生します)。最初は、class 属性が .class ファイルを指す必要があると想定していましたが、.java を指すように試みましたが、まだ機能しません。

発生しているエラーはクラスローダーからのもののようです。

Reason: java.lang.ClassNotFoundException: file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin; nested exception is java.lang.ClassNotFoundException: file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin

Classloader は、クラス ファイルへのパスではなく、完全修飾クラス名を想定しています。クラス ファイルへのパスではなく、完全修飾クラス名を指定してみてください。

それ以外の:

file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/XmlValidationPlugin

使用する:

com.foo.jms.amqplugin.XmlValidationPlugin

CLASSPATH 環境変数に C:/Marcus/JavaProjects/Project/build/prod/classes が含まれていることを確認してください。

ActiveMQ がプラグインの読み込みにカスタム クラスローダーを使用している場合 (詳細はわかりません)、ActivemMQ 固有の方法でクラスパスを指定する必要があるかもしれません。

于 2012-04-12T10:10:07.843 に答える