If you add cacheLevel="x", where x = 1, 2 or 3 (CACHE_CONNECTION,
CACHE_SESSION or CACHE_CONSUMER) it should work fine.
The reason is that the default cache value if CACHE_NONE, which leads
to not using a shared connection, and it seems that in such case, the
clientId is not set by the spring jms listener for some reason.
On Fri, Jul 11, 2008 at 7:27 AM, sandeep reddy <[EMAIL PROTECTED]> wrote:
>
> Hi Servicemix-guys,
>
> This seems to be probable bug for new jms:consumer endpoint (for
> durable subscription):
>
> We are using new jms:consumer endpoints in our application for
> publish-subscribe using topic. As we are having multiple subscribers we are
> specifying unique clientID as part of endpoint configuration. We did some
> troubleshooting on our end to identify where could be the actual problem.
> Following are the steps we did:
> 1) Modified the source code for ActiveMQ to have debug statements in the
> setClientID(newClientID) method and updated the jar file in ServiceMix with
> custom built version.
> 2) On ServiceMix start we see the logs being printed by JMSFlow class
> which directly talks to ActiveMQ.
> 3) The same logs are not printed during initialization of our
> jms-consumer SU. This means that the setClientID() method is never invoked
> for ActiveMQ connection. Difference between jms-consumer endpoint
> (JmsConsumerEndpoint) implementation and JMSFlow is that the
> JmsConsumerEndpoint class is using Spring to interact with ActiveMQ.
> 4) We have also browsed through the Spring code and everything seems to
> be fine. There is method prepareSharedConnection(Connection connection) in
> AbstractJmsListeningContainer class. This method actually sets the clientID
> to ActiveMQ connection object.
>
> code: protected void prepareSharedConnection(Connection connection)
> throws JMSException {
>
> String clientId = getClientId();
> if (clientId != null) {
> connection.setClientID(clientId);
> }
> }
>
>
> jms:consumer configuration:
>
> jms:consumer service="up:DirectorConsumerService"
> endpoint="directorConsumerEndpoint"
> targetService="up:DirectorConsumerService"
> pubSubDomain="true"
> clientId="Director"
> subscriptionDurable="true"
> destinationName="updateUserProfileTopic"
> connectionFactory="#connectionFactory"
> messageSelector="userPrincipals LIKE
> '%sandeep2%'"/>
>
> 5) So, this method should execute before executing
> org.apache.activemq.ActiveMQConnection.checkClientIDWasManuallySpecified().
> And we noticed that preparedSharedConnection is not invoked.
>
> 6) And that leads to throwing JMSException:
>
> javax.jms.JMSException: You cannot create a durable subscriber without
> specifying a unique clientID on a Connection
> at
> org.apache.activemq.ActiveMQConnection.checkClientIDWasManuallySpecified(ActiveMQConnection.java:1142)
> at
> org.apache.activemq.ActiveMQSession.createDurableSubscriber(ActiveMQSession.java:1066)
> at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.createConsumer(AbstractPollingMessageListenerContainer.java:429)
> at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.createListenerConsumer(AbstractPollingMessageListenerContainer.java:216)
> at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:297)
> at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:254)
> at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:871)
> at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:811)
> at java.lang.Thread.run(Thread.java:595)
>
> Above findings seem to point to bug in JmsConsumerEndpoint. Please review
> it.
> We need to use new jms-endpoint as we require "messageSelector" which is not
> possible with jms:endpoint (old).
>
> Please help.
>
> Sandeep
>
> --
> View this message in context:
> http://www.nabble.com/Probable-BUG-for-new-jms-endpoints-tp18396993p18396993.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>
--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/