I am trying to setup a basic DMLC and can't seem to instantiate the listener without a fatal error.
Here's my configuration:
Here is my ever-so-basic listener:Code:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:jms="http://www.springframework.org/schema/jms" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.1.xsd"> <!-- enables annotation based configuration --> <context:annotation-config /> <!-- scans for annotated classes in the com.company package --> <context:component-scan base-package="com.wfb.bulk"/> <!-- creates an mq connection factory --> <bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> <property name="transportType"><value>1</value></property> <property name="hostName"><value>${input.mq.hostname}</value></property> <property name="port"><value>${input.mq.port}</value></property> <property name="queueManager"><value>${input.mq.queuemanager}</value></property> <property name="channel"><value>${input.mq.channel}</value></property> </bean> <!-- CachingConnectionFactory Definition, sessionCacheSize property is the number of sessions to cache --> <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> <constructor-arg ref="mqConnectionFactory" /> <property name="exceptionListener" ref="indexExceptionListener" /> <property name="sessionCacheSize" value="100" /> </bean> <!-- this is the Message Driven POJO (MDP) --> <bean id="indexControlListener" class="com.wfb.bulk.utils.IndexListener"/> <bean id="controlQueue" class="com.ibm.mq.jms.MQQueue" depends-on="connectionFactory"> <property name="baseQueueManagerName" value="${input.mq.queuemanager}"/> <property name="baseQueueName" value="${input.mq.controlq}"/> <property name="targetClient" value="1"/> <property name="persistence" value="-1"/> </bean> <!-- and this is the message listener container --> <bean id="indexListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer102"> <property name="connectionFactory" ref="connectionFactory"/> <property name="destination" ref="controlQueue"/> <property name="messageListener" ref="indexControlListener" /> <property name="concurrentConsumers" value="5"/> <property name="cacheLevelName" value="CACHE_CONNECTION"/> <property name="autoStartup" value="true"/> <property name="recoveryInterval" value="2000"/> </bean> </beans>
Despite analyzing this and looking for gaps, this is what I see when I attempt to run the code:Code:package com.basic.listener; import javax.jms.BytesMessage; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import org.springframework.stereotype.Component; @Component public class IndexListener implements MessageListener { public void onMessage( final Message message ) { Debug.log("onMessage triggered"); if ( message instanceof TextMessage ) { final TextMessage textMessage = (TextMessage) message; try { System.out.println( textMessage.getText() ); } catch (final JMSException e) { e.printStackTrace(); } } else { System.out.println("Raw message: " + message.toString()); BytesMessage msg = (BytesMessage) message; System.out.println ("Raw message: " + msg.toString()); } } }
I've tried some obvious changes such as using DefaultMessageListenerContainer without the 1.02 JMS interface but that gives me a different error.Code:13139 [indexListenerContainer-3] WARN org.springframework.jms.listener.DefaultMessageListenerContainer102 - Setup of JMS message listener invoker failed for destination 'queue://QM/MY.CONTROL.QUEUE?persistence=-1&targetClient=1' - trying to recover. Cause: com.ibm.mq.jms.MQQueueSession.createConsumer(Ljavax/jms/Destination;Ljava/lang/String;)Ljavax/jms/MessageConsumer; java.lang.AbstractMethodError: com.ibm.mq.jms.MQQueueSession.createConsumer(Ljavax/jms/Destination;Ljava/lang/String;)Ljavax/jms/MessageConsumer; at org.springframework.jms.connection.CachingConnectionFactory$CachedSessionInvocationHandler.getCachedConsumer(CachingConnectionFactory.java:390) at org.springframework.jms.connection.CachingConnectionFactory$CachedSessionInvocationHandler.invoke(CachingConnectionFactory.java:330) at $Proxy5.createReceiver(Unknown Source) at org.springframework.jms.listener.DefaultMessageListenerContainer102.createConsumer(DefaultMessageListenerContainer102.java:104) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.createListenerConsumer(AbstractPollingMessageListenerContainer.java:224) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:308) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:264) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1071) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1063) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:960) at java.lang.Thread.run(Thread.java:662) 13139 [indexListenerContainer-3] INFO org.springframework.jms.listener.DefaultMessageListenerContainer102 - Successfully refreshed JMS Connection 13139 [indexListenerContainer-4] DEBUG org.springframework.jms.connection.CachingConnectionFactory - Found cached JMS Session for mode 1: com.ibm.mq.jms.MQQueueSession@114a306 13139 [indexListenerContainer-4] DEBUG org.springframework.jms.connection.CachingConnectionFactory - Returned cached Session: com.ibm.mq.jms.MQQueueSession@114a306
I've tried looking though this example for anything obvious but I always come up empty. Do you see anything wrong?
Thanks,
AD


Reply With Quote
