Sorry again. My test had transient failures, as the durable
subscription was not always created before the message was actually
sent, so it was sometimes failing. So I can confirm it works for
cacheLevels of 1, 2 or 3 ...

On Fri, Jul 11, 2008 at 10:13 AM, Guillaume Nodet <[EMAIL PROTECTED]> wrote:
> Well, actually, it only works with CACHE_CONSUMER (cacheLevel="3").
>
> On Fri, Jul 11, 2008 at 10:09 AM, Guillaume Nodet <[EMAIL PROTECTED]> wrote:
>> 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/
>>
>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/

Reply via email to