2016-03-17 2 views
1

У меня есть стандартный Spring JMS конфигурацииНевозможно преобразовать значение типа [com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle] для требуемого типа [javax.jms.ConnectionFactory]

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
     <property name="connectionFactory" ref="connectionFactory" /> 
     <property name="defaultDestination" ref="jmsdestination" /> 
    </bean> 
    <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="jms/MQAuditQueueConnectionFactory" /> 
    </bean> 
    <bean id="jmsDestinationResolver" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="jms/MQAuditQueue" /> 
    </bean> 

И я думаю, что стандартный MQ на WAS 8.5.5.2, когда я начинаю свой веб-приложение, я получаю:

Cannot convert value of type [com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle] to required type [javax.jms.ConnectionFactory] for property 'connectionFactory' 

Я отмечаю с моего сервера у меня есть следующие классы в следующих банках

class com/ibm/ejs/jms/JMSQueueConnectionFactoryHandle.class found in /opt/websphere/was8//plugins/com.ibm.ws.runtime.jar 

и

com/ibm/mq/jms/MQQueueConnectionFactory.class found in /opt/websphere/was8//installedConnectors/wmq.jmsra.rar/com.ibm.mqjms.jar 

Как получить WAS MQ использовать 2-ю банку?

ответ

0

После многих проб и ошибок я нашел ответ, чтобы исключить jms-api, который поставляется с spring-jms, в вашем pom.xml.

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-jms</artifactId> 
    <version>${spring.version}</version> 
    <exclusions> 
     <exclusion> 
     <groupId>javax.jms</groupId> 
     <artifactId>javax.jms-api</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
+0

Мои все весенние банки объединены в одну банку, как исключить банку jms. -runtime_spring.jar -spring_jms.jar (внутри рабочей среды весны) – Chinmoy

+0

вам нужно изменить pom.xml, который используется для создания runtime_spring.jar –

1

Я также прошел через множество проб и ошибок, чтобы найти ответ. Как упоминалось выше, исключая работу библиотеки jms. Но как вы исключаете библиотеку jms и все еще сможете скомпилировать код? Этого никто, кажется, не упомянул. Решением этого является предоставление возможности для библиотеки jms «предоставляться» (если вы используете Maven или Gradle).

Как уже упоминалось где-то:

«При условии, означает, что Вам необходим JAR для компиляции, но во время выполнения уже есть JAR обеспечивается средой, поэтому вам не нужно оно упаковано с приложением Для. веб-приложение, это означает, что JAR-файл не будет помещен в каталог WEB-INF/lib. "

Так что в вашем pom.xml добавить/обновить эти:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-jms</artifactId> 
    <version>4.3.4.RELEASE</version> 
    <exclusions> 
     <exclusion> 
      <groupId>javax.jms</groupId> 
      <artifactId>javax.jms-api</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

<dependency> 
    <groupId>javax.jms</groupId> 
    <artifactId>jms</artifactId> 
    <version>1.1</version> 
    <scope>provided</scope> 
</dependency> 

Надеемся, что это может быть полезным для тех, кто был разочарован отсутствием ответов из Интернета.