[
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