Plugins 尝试使用Java插件配置活动MQ代理,其中应<;bean类=“…”&引用&燃气轮机;你指的是什么?

Plugins 尝试使用Java插件配置活动MQ代理,其中应<;bean类=“…”&引用&燃气轮机;你指的是什么?,plugins,jms,activemq,Plugins,Jms,Activemq,我正在尝试配置一个安装了插件的activemq代理,但似乎无法在代理配置文件中正确获取插件类的限定名称。 我已经粘贴了错误消息,后面是下面的代理配置。基本上在我指定的元素中 class=“文件:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/xmlvalizationplugin” 这是XmlValidationPlugin.class文件的绝对路径(我尝试将.class附加到上面的路径,但我得到了相

我正在尝试配置一个安装了插件的activemq代理,但似乎无法在代理配置文件中正确获取插件类的限定名称。 我已经粘贴了错误消息,后面是下面的代理配置。基本上在我指定的元素中 class=“文件:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/xmlvalizationplugin” 这是XmlValidationPlugin.class文件的绝对路径(我尝试将.class附加到上面的路径,但我得到了相同的错误)。 起初,我假设class属性应该指向.class文件,但尝试将其指向.java,但仍然不起作用。 我已经阅读了有关开发插件、常见问题解答、spring文档等的活动MQ常见问题解答

我的班级路径是 .;JAVA_HOME\lib;C:\Marcus\JavaProjects\Project;C:\Marcus\JavaProjects\Project\build\prod\classes JAVA_HOME是: C:\ProgramFiles\Java\jdk1.7.0\U 03

所有java源代码都驻留在 C:\Marcus\JavaProjects\Project\src 并且.class文件位于 C:\Marcus\JavaProjects\Project\build\prod\classes (类中的文件结构镜像了src中的文件结构,例如 com.foo.jms.amqplugin.xmlvalizationplugin 将其.class文件保存在 class/com/foo/jms/amqplugin)

所讨论的插件是XmlValidationPlugin.java,位于包中的src文件夹中: com.foo.jms.amqplugin

我曾尝试将XmlValidationPlugin.class放在JAR中,并将JAR放在activemqinstalldir/lib中(这是向其他有类似问题的人推荐的),但这没有帮助

我已经花了一天半的时间在这上面了,如果有人知道plugins类属性的价值应该是什么,我会非常感激,因为我已经尝试了一切。。。提前谢谢

错误输出的顶部:

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>

文件:${activemq.base}/conf/credentials.properties
...
基本上,我在元素中指定class=“file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/xmlvalizationplugin”,这是xmlvalizationplugin.class文件的绝对路径(已经尝试将.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
使用:

并确保CLASSPATH环境变量将包含:C:/Marcus/JavaProjects/Project/build/prod/classes

如果ActiveMQ使用一些自定义类加载器来加载插件(我不知道详细信息),则可能需要以某种特定于ActivemMQ的方式指定类路径

基本上,我在元素中指定class=“file:C:/Marcus/JavaProjects/Project/build/prod/classes/com/foo/jms/amqplugin/xmlvalizationplugin”,这是xmlvalizationplugin.class文件的绝对路径(已经尝试将.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
使用:

并确保CLASSPATH环境变量将包含:C:/Marcus/JavaProjects/Project/build/prod/classes


如果ActiveMQ使用一些自定义类加载器来加载插件(我不知道详细信息),则可能需要以某种特定于ActivemMQ的方式指定类路径

Matej非常感谢,你是对的,事实证明我必须使用完全限定的名称,并将整个源代码放在一个JAR中,然后将其粘贴到activemqinstalldir/lib中。问题是,当我之前尝试给它限定的路径名时,lib文件夹中的jar缺少一些类文件,这就是为什么尽管类文件位于类路径上,我还是得到一个ClassNotFound异常。谢谢你的帮助!Matej非常感谢,你是对的,事实证明我必须使用完全限定的名称,并将整个源代码放在一个JAR中,然后将其粘贴到activemqinstalldir/lib中。问题是,当我之前尝试给它限定的路径名时,lib文件夹中的jar缺少一些类文件,这就是为什么尽管类文件位于类路径上,我还是得到一个ClassNotFound异常。谢谢你的帮助!