Невозможно привести org.apache.qpid.jms.provider.amqp.AmqpProviderFactory в org.apache.qpid.jms.provider.ProviderFactory

Я пытался разобраться в этом вопросе сейчас и мне нужна другая точка зрения. Я использую spring и включил этот стартовый пакет весенней загрузки, чтобы я мог воспользоваться протоколом AMQP: amqp-10-jms-spring-boot-starter, который я успешно настроил и в настоящее время работаю. Проблема возникает, когда я внедряю ее в контейнер Jboss eap7 "ЭТО РЕКОМ". Поэтому, когда я впервые внедряю это приложение, все отлично работает. Проблема возникает, когда я выполняю повторное развертывание одного и того же приложения без предварительного удаления контейнера (как мне и не нужно было). Вот что я подумал и попробовал до сих пор:

  1. Что-то весной не убирается правильно? Посмотрите некоторые статистические данные планировщика полетов JMC и не увидите ничего, что бросалось бы в меня. Не осталось экземпляров Springframework или JMSConnectionFactory.
  2. Wildlfy Classpath проблема? Я игнорирую artemis libs и модули artemis в моем jboss-развертывании
  3. Хороший друг гугл 99% времени бегаю домой. На этот раз, хотя и не так много направления.

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 ответа

Хорошо, я обнаружил проблему. Обратите внимание, что я обнаружил основную проблему только после того, как переместил это приложение в Tomcat. Который заявил, что "вы создали тему, которая не была удалена". Мой код использует класс AsynchronousSocketChannel, который я использую для прослушивания портов, которые мне нужны. Реализация по умолчанию использует класс AnsychronousChannelGroup, который в этом случае не очищается. После того, как вы назначите группу каналов для вашего канала сокетов, вы можете очистить потоки таким образом. Я собираюсь загрузить свой код на учетную запись github позже сегодня, чтобы можно было поиграть с ним. Java 8 ошибка?

Я думаю, что это связано с механизмом загрузки классов JBOSS. Когда мы перешли с WLS на JBOSS, у нас возникло несколько странных проблем, подобных этой. Одно из предложений: использовать Class.forName для создания экземпляра необходимого класса / библиотеки драйвера при запуске приложения. Еще одно, что вы можете попробовать, это удалить включение подсистемы в standalone.xml/domain.xml (subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0") и проверить. Надеюсь это поможет.

Другие вопросы по тегам