[ 
https://issues.apache.org/activemq/browse/SM-719?page=comments#action_37300 ] 
            
Alper Sogukpinar commented on SM-719:
-------------------------------------

using org.springframework.jms.listener.DefaultMessageListenerContainer and 
service-mix together may be an option....


<sm:activationSpec componentName="MyLogListener" service="foo:MyLogListener">
        <sm:component>                          
                <ref bean="myMessageListener" />                                
        </sm:component>
</sm:activationSpec>

                
        <bean id="myMessageListener" 
class="com.test.utils.jms.MyMessageListener ">
                <property name="marshaler">
                        <bean class="com.test.utils.jms.MyJmsMarshaller" />
                </property>                                             
        </bean>
        
        <!-- Container definirion must be later than component definition -->
        <bean id="MonitoringLogListenerContainer" 
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
                <property name="concurrentConsumers" value="5"/>
                <property name="connectionFactory" ref="jmsConnectionFactory" />
                <property name="destinationName" value="${Payment.Queue.Log}" />
                <property name="messageListener" ref="myMessageListener" />
        </bean>



public class MyMessageListener extends ComponentSupport implements 
MessageExchangeListener, MessageListener {

        protected final transient Log log = LogFactory.getLog(getClass());
        
        private JmsMarshaler marshaler = new JmsMarshaler();

        public JmsMarshaler getMarshaler() {
                return marshaler;
        }

        public void setMarshaler(JmsMarshaler marshaler) {
                this.marshaler = marshaler;
        }
        
        
        public void onMessage(Message jmsMessage) {
        if (log.isTraceEnabled()) {
            log.trace("Received: " + jmsMessage);
        }

        try {
            InOnly messageExchange = 
getDeliveryChannel().createExchangeFactory().createInOnlyExchange();
            NormalizedMessage inMessage = messageExchange.createMessage();

            try {
                marshaler.toNMS(inMessage, jmsMessage);

                messageExchange.setInMessage(inMessage);
                getDeliveryChannel().send(messageExchange);
            }
            catch (JMSException e) {
                messageExchange.setError(e);
                messageExchange.setStatus(ExchangeStatus.ERROR);
            }
        }
        catch (JBIException e) {
            throw new RuntimeJBIException(e);
        }
    }

        
        
        public void onMessageExchange(MessageExchange exchange) throws 
MessagingException {
                // Do nothing as we only send in-only
                // but this ensure that messages are not queued in the 
DeliveryChannel
        }
}


> Lightweight JmsReceiverComponent and servicemix-jms components gets 
> "javax.jms.IllegalStateException: Method setMessageListener not permitted 
> error" in WAS 6.1
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SM-719
>                 URL: https://issues.apache.org/activemq/browse/SM-719
>             Project: ServiceMix
>          Issue Type: Bug
>          Components: servicemix-components, servicemix-jms
>    Affects Versions: 3.0
>         Environment: AIX,
> WAS 6.1
> Websphere MQ 6.0.1.0
>            Reporter: Alper Sogukpinar
>            Priority: Critical
>
> Lightweight JmsReceiverComponent and other servicemix-jms components gets 
> "javax.jms.IllegalStateException: Method setMessageListener not permitted 
> error" in WAS 6.1
> When I searched the error and I found that 
> "javax.jms.MessageConsumer method setMessageListener()" (which is used in 
> JmsReceiverComponent) and some other methods may only be used by an 
> application running in a client container -- in other words, they may never 
> be called in the Web or EJB container:
> As far as I know 
> DefaultMessageListenerContainer of Spring  performs the MessageListener 
> invocation itself so I guess it may work on web container and also at ejb 
> container, similar servicemix component may be an option.
> Related links:
> http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf (J2EE.6.6 Java™ Message Service 
> (JMS) 1.1 Requirements)
> http://www-128.ibm.com/developerworks/java/library/j-getmess/
> http://www-304.ibm.com/jct09002c/isv/tech/faq/individual.jsp?oid=1:80481

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to