2015-08-27 2 views
0

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

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

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

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

Maven Dependencies

Spring Config XML

<?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 

Updated- Решение: Требуемые зависимости IBM Jar. enter image description here

ответ

0

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

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> <!-- or take version 7.0 if needed --> 
</dependency> 
+0

Благодарим за внимание. Я попробовал это и получил другую ошибку, но ошибка, которую я получил, требует, чтобы вы загрузили полную javaee банку. Я собираюсь попробовать один упакованный в websphere. Ошибка создания bean-компонента с именем 'org.springframework.jms.listener.endpoint.JmsMessageEndpointManager # 0', определенным в ресурсе пути к курсу [context.xml]: Ошибка создания бина; inested exception is java.lang.ClassFormatError: Отсутствует атрибут кода в методе, который не является родным или абстрактным в файле класса javax/resource/ResourceException. – haju

+0

Я также просто попытался использовать JAVA EE7 SDK javaee jar из glashfish. Все еще получение исключения ресурса. – haju

+0

Ключевой банкой, отсутствовавшей в библиотеке IBM WebSphere, является j2ee.jar. Мне не хватало пару других ibm для mq, но как только у меня был этот j2ee.jar, я мог проследить других. Попытка найти альтернативу j2ee.jar, которая будет работать с STS. – haju

0

Вообще самый простой способ, чтобы получить право на пути к классам РАУ или других инструментов IBM для приложений, которые в конечном счете, будет развернут на WAS, это загрузить библиотеку сервера времени выполнения WAS версии в приложение.

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

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

This is the server runtime screen you will need to choose.

Если добавить библиотеку сервера во время выполнения, то это то, что ваше приложение будет выглядеть в РАУ. This is the result of adding a server runtime to your app.

Смежные вопросы