无法将org.apache.qpid.jms.provider.amqp.AmqpProviderFactory强制转换为org.apache.qpid.jms.provider.ProviderFactory

时间:2018-02-06 06:04:17

标签: java spring jboss jboss-eap-7 activemq-artemis

我一直在试图解决这个问题,我需要一个不同的视角。我正在使用spring并且已经合并了这个spring boot starter pack,以便我可以利用AMQP协议: amqp-10-jms-spring-boot-starter 我已成功配置并且目前有工作。当我将其部署到Jboss eap7 Container" 这是一个需求"时,问题就出现了。所以当我第一次部署这个应用程序时,一切都很好。当我在没有先取下容器的情况下重新部署相同的应用程序时,问题就出现了(我不应该这样做)。以下是我迄今为止所考虑和尝试的内容:

  1. 春天的东西是不是正确清理了?    查看一些JMC飞行计划员统计数据并且看不到任何内容    那个跳出来对我说。没有Springframework或JMSConnectionFactory实例遗留下来。
  2. Wildlfy Classpath问题?我在jboss-deployment中忽略了artemis libs和artemis模块
  3. 好朋友谷歌 99%的本垒打时间。这次虽然方向不多。
  4. JBoss的部署结构

    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
        <deployment>
            <exclude-subsystems>
                <subsystem name="jaxrs" />
                <subsystem name="messaging-activemq" />
            </exclude-subsystems>
            <exclusions>
                <module name="org.hibernate" slot="main" />
                <module name="org.apache.activemq.artemis" slot="main" />
                <module name="org.apache.activemq.artemis.ra" slot="main" />
            </exclusions>
        </deployment>
    </jboss-deployment-structure>
    

    请记住,我在这里有其他代码,包括JSR包,Hibernate,spring-web等依赖项。为了完整,我留下了那些。

    的pom.xml

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-api</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jsr310</artifactId>
                <scope>runtime</scope>
            </dependency>
    
    
            <!-- Spring Data/DB -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>4.3.10.RELEASE</version>
            </dependency>
            <dependency> <!-- works with spring 4.3.10-->
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-jpa</artifactId>
                <version>1.11.6.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-java8</artifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>hibernate-core</artifactId>
                        <groupId>org.hibernate</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>hibernate-core</artifactId>
                        <groupId>org.hibernate</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
    
            <!-- Spring JMS-->
            <dependency>
                <groupId>org.amqphub.spring</groupId>
                <artifactId>amqp-10-jms-spring-boot-starter</artifactId>
                <version>0.4.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
            </dependency>
    

    最后我的堆栈跟踪

    22:44:08,293 ERROR [org.apache.qpid.jms.provider.ProviderFactory] (ServiceEvent-144) Failed to create Provider instance for amqp, due to: java.io.IOException: Provider scheme NOT recognized: [amqp]
    22:44:08,293 ERROR [org.apache.qpid.jms.JmsConnectionFactory] (ServiceEvent-144) Failed to create JMS Provider instance for: amqp
    22:44:08,293 ERROR [stderr] (ServiceEvent-144) Exception in thread "ServiceEvent-144" org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Provider scheme NOT recognized: [amqp]
    22:44:08,293 ERROR [stderr] (ServiceEvent-144)  at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
    22:44:08,293 ERROR [stderr] (ServiceEvent-144)  at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:169)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:487)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:570)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:658)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at my.test.Producertest.send(Producertest:62)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at sun.reflect.GeneratedMethodAccessor92.invoke(Unknown Source)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at java.lang.reflect.Method.invoke(Method.java:498)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:256)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:177)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:140)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:134)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at java.lang.Thread.run(Thread.java:745)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144) Caused by: javax.jms.JMSException: Provider scheme NOT recognized: [amqp]
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:86)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:108)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.JmsConnectionFactory.createConnection(JmsConnectionFactory.java:211)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.JmsConnectionFactory.createConnection(JmsConnectionFactory.java:191)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:180)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:474)
    22:44:08,294 ERROR [stderr] (ServiceEvent-144)  ... 21 more
    22:44:08,294 ERROR [stderr] (ServiceEvent-144) Caused by: java.io.IOException: Provider scheme NOT recognized: [amqp]
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.provider.ProviderFactory.findProviderFactory(ProviderFactory.java:124)
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.provider.ProviderFactory.findProviderFactory(ProviderFactory.java:99)
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.provider.ProviderFactory.create(ProviderFactory.java:70)
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.JmsConnectionFactory.createProvider(JmsConnectionFactory.java:329)
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.JmsConnectionFactory.createConnection(JmsConnectionFactory.java:200)
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  ... 24 more
    22:44:08,295 ERROR [stderr] (ServiceEvent-144) Caused by: java.lang.ClassCastException: Cannot cast org.apache.qpid.jms.provider.amqp.AmqpProviderFactory to org.apache.qpid.jms.provider.ProviderFactory
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.util.FactoryFinder.newInstance(FactoryFinder.java:129)
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  at org.apache.qpid.jms.provider.ProviderFactory.findProviderFactory(ProviderFactory.java:122)
    22:44:08,295 ERROR [stderr] (ServiceEvent-144)  ... 28 more
    

    没有什么能让我抓住这里的稻草。所以任何方向都有帮助。我可以使用JMS API,我稍后会尝试。但我希望能把这一点弄清楚。提前谢谢。

    更新

    我把所有代码都排除在外,并创建了一个简单的服务。 amqp-10-jms-spring-boot-starter不是罪魁祸首。我怀疑我的Spring事件监听器或我的AsynchronousSocketChannel以某种方式以某种方式干扰(无论是使用Jboss还是直接干扰)并保持差事连接。

2 个答案:

答案 0 :(得分:0)

我认为这与JBOSS类加载机制有关。 当我们从WLS迁移到JBOSS时,我们经历了几个奇怪的问题。建议您在应用程序启动时使用Class.forName实例化所需的驱动程序类/库。您可以尝试的另一个方法是删除standalone.xml / domain.xml中的子系统包含(子系统xmlns =“urn:jboss:domain:messaging-activemq:1.0”)并检查。希望这会有所帮助。

答案 1 :(得分:0)

好吧我发现了这个问题。记下我将此应用程序移动到Tomcat后才发现核心问题。其中说“你创建了一个没有被删除的线程”。我的代码使用AsynchronousSocketChannel类,我用它来监听我关心的端口。默认实现使用类AnsychronousChannelGroup,在这种情况下不会被清理,一旦将通道组分配给套接字通道,就可以通过这种方式清理线程。我将在今天晚些时候将我的代码上传到github帐户,以便可以使用它。 Java 8 Bug?