Spring jms не удается подключиться к Websphere MQ — исключение ресурса

Проблема: получение исключения ресурса во время выполнения при попытке подключения к веб-сфере mq для получения сообщения jms с помощью spring. Я просто не могу определить, что мне не хватает?

Описание: Попытка настроить пример здесь. Spring Спецификация активации MDP для Websphere MQ.

http://stackoverflow.com/questions/14523572/spring-jms-and-websphere-mq< /а>

Зависимости Maven Примечание. Номера версий для ibm jar выглядят странно, потому что я создал локальный репозиторий в своем проекте для добавления сторонних библиотек. Я беру банки ibm из моей локальной версии Websphere SDP для Websphere 7.5. Я также попытался напрямую добавить зависимости jar в пакет Spring STS и получил ту же ошибку.

Зависимости Maven

XML конфигурации Spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:int="http://www.springframework.org/schema/integration"
    xmlns:int-jms="http://www.springframework.org/schema/integration/jms"
    xmlns:jms="http://www.springframework.org/schema/jms"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-4.1.xsd
        http://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms-4.1.xsd
        http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.1.xsd">


     <bean id="messageListener" class="myproject.spring.integration.mq.SpringMdp" />  

     <bean id="messageListener" class="com.rohid.samples.SpringMdp" />  

     <bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
         <property name="activationSpec">
           <bean class="com.ibm.mq.connector.inbound.ActivationSpecImpl">
               <property name="destinationType" value="javax.jms.Queue"/>
               <property name="destination" value="QUEUE1"/>
               <property name="hostName" value="A.B.C"/>
                   <property name="queueManager" value="QM_"/>
               <property name="port" value="1414"/>
               <property name="channel" value="SYSTEM.ADMIN.SVNNN"/>
               <property name="transportType" value="CLIENT"/>
               <property name="userName" value="abc"/>
               <property name="password" value="jabc"/>
            </bean>
          </property>
          <property name="messageListener" ref="messageListener"/>
          <property name="resourceAdapter" ref="myResourceAdapterBean"/>
    </bean>

    <bean id="myResourceAdapterBean" org.springframework.jca.support.ResourceAdapterFactoryBean">
      <property name="resourceAdapter">
        <bean class="com.ibm.mq.connector.ResourceAdapterImpl">
          <property name="maxConnections" value="50"/>
        </bean>
      </property>
      <property name="workManager">
         <bean class="org.springframework.jca.work.SimpleTaskWorkManager"/>
      </property>
     </bean>
</beans>

Трассировка стека:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.jms.listener.endpoint.JmsMessageEndpointManager#0' defined in class path resource [context.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/resource/ResourceException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1101)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at myproject.spring.integration.mq.Main.main(Main.java:9)
Caused by: java.lang.NoClassDefFoundError: javax/resource/ResourceException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getDeclaredConstructor(Unknown Source)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1094)
    ... 13 more
Caused by: java.lang.ClassNotFoundException: javax.resource.ResourceException
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 19 more

Обновлено. Решение: требуются необходимые зависимости IBM Jar. введите здесь описание изображения


person haju    schedule 27.08.2015    source источник


Ответы (2)


Как правило, самый простой способ получить правильный путь к классам в RAD или других инструментах IBM для приложений, которые в конечном итоге будут развернуты в WAS, — это загрузить библиотеку времени выполнения сервера версии WAS в ваше приложение.

Это очень просто. Перейдите на страницу свойств приложения, перейдите к пути сборки, вкладке «Библиотеки» и нажмите «Добавить библиотеку». Вы увидите снимок экрана ниже. Выберите среды выполнения сервера, и если вы установили правильные версии WAS как часть RAD, вы увидите их среды выполнения.

Как правило, это лучший способ, поскольку он позволяет хранить библиотеки WAS отдельно от вашего приложения, но по-прежнему делает их доступными для компиляции. Худшее, что вы можете сделать, — это встроить библиотеки WAS как часть своего приложения. Если вы сделаете это и развернете свое приложение в разных версиях WAS, вы получите странный путь к классам или странные ошибки времени выполнения. Кроме того, вещи, которые работали, могут перестать работать после применения пакетов исправлений или других настроек программного обеспечения.

Это экран времени выполнения сервера, который вам нужно будет выбрать.

Если вы добавите библиотеку времени выполнения сервера, ваше приложение будет выглядеть в RAD именно так. Это результат добавления среды выполнения сервера в ваше приложение.

person Garet Jax    schedule 30.10.2015

Похоже, вам не хватает некоторых зависимостей. Можете ли вы попробовать добавить javaee-api в свой файл pom?

<dependency>
   <groupId>javax</groupId>
   <artifactId>javaee-api</artifactId>
   <version>6.0</version> <!-- or take version 7.0 if needed -->
</dependency>
person daniel.eichten    schedule 28.08.2015
comment
Спасибо за замечание. Я попробовал это и получил другую ошибку, но в ошибке, которую я получил, упоминается, что вам нужно загрузить полную банку javaee. Я собираюсь попробовать тот, который упакован в websphere. Ошибка создания bean-компонента с именем «org.springframework.jms.listener.endpoint.JmsMessageEndpointManager#0», определенным в ресурсе пути к классу [context.xml]: создание экземпляра bean-компонента не удалось; вложенным исключением является java.lang.ClassFormatError: атрибут Absent Code в методе, который не является родным или абстрактным в файле класса javax/resource/ResourceException - person haju; 28.08.2015
comment
Я также только что попытался использовать JAVA EE7 SDK javaee jar от glashfish. Все еще получаю исключение ресурса. - person haju; 28.08.2015
comment
Отсутствующая ключевая банка, которую я взял из библиотеки IBM WebSphere, — это j2ee.jar. Мне не хватало пары других файлов IBM для mq, но как только у меня появился этот j2ee.jar, я смог отследить остальные. Пытаюсь найти альтернативу j2ee.jar, которая бы работала с STS. - person haju; 28.08.2015