Oh, thanks, I've checked
http://cwiki.apache.org/CXF20DOC/jms-transport.html
but missed this one which is actually linked to from the above page :-)
Cheers, Sergey
----- Original Message -----
From: "Daniel Kulp" <[EMAIL PROTECTED]>
To: <[email protected]>
Cc: "Sergey Beryozkin" <[EMAIL PROTECTED]>
Sent: Monday, November 17, 2008 3:39 PM
Subject: Re: JMS queues and multiple consumer threads
Sergey,
See:
http://cwiki.apache.org/CXF20DOC/using-the-jmsconfigfeature.html
There is a setting for concurrentConsumers and maxConcurrentConsumers.
Dan
On Monday 17 November 2008 9:35:44 am Sergey Beryozkin wrote:
Now that I believe I understand the reason for these transient failuires,
it was very easy to update the test to have the control threads spawned by
the actual server endpoint code.
In other words, my JMS continuations test has been originally written the
same way the HTTP one has been done. Control threads invoke on a service
endpoint and wait till they're told that the main user threads have invoked
on say helloService.sayHi() and have called cont.suspend(), so what they do
next is call helloService.resume() which results in a given suspended
continuation be resumed.
For JMS this model simply does not walk for me at the moment due to the
fact that multiple consumer threads sharing the same client proxy end up
sharinh the same JMS connection too with the connection factory transiently
allocating a number of threads capable of utilizing that connection, as per
the traces I posted earlier. I'm sure this can be solved somehow and I'd
love to know how, but in meantime I've updated the server endpoint code to
do 'local' control threads, which works quite well...
Cheers, Sergey
----- Original Message -----
From: "Sergey Beryozkin" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Monday, November 17, 2008 12:30 PM
Subject: Re: JMS queues and multiple consumer threads
> Looking at the traces again, I think the problem might be to do with the
> spring connection factory
>
> For ex, this a trace for a failing test with 2 threads involved
>
>>> 14000 [pool-1-thread-1] INFO
>>> org.springframework.jms.connection.SingleConnectionFactory -
>>> Established shared JMS Connection:
>
> and here's the trace for a green test :
>> 14594 [pool-1-thread-2] INFO
>> org.springframework.jms.connection.SingleConnectionFactory - Established
>> shared JMS Connection:
>
> So I guess what happens is that if in my test the thread which expects
> the notification from the other thread squeezes in first, then it
> actually is never awaken (it does hit the application code though), while
> the other one is waiting on the client side.
>
> So I guess the question is how to configure a client side connection
> factory's thread pool ?
>
> Thanks, Sergey
>
>> Hi
>>
>> I have a system JMS test which involves multiple consumer threads
>> hitting a single provider endpoint which is a JMS queue and expecting
>> some response.
>>
>> If more than 1 consumer thread is involved than I can often see a server
>> side being unable even to get a given invocation to the endpoint
>> application code.
>>
>> For ex, with 2 threads involved, here's a failed test :
>>
>> // S.B - this is happening on the consumer side I believe :
>>
>> 14000 [pool-1-thread-1] INFO
>> org.springframework.jms.connection.SingleConnectionFactory - Established
>> shared JMS Connection: ActiveMQConnection
>> {id=ID:sberyoz-4729-1226923006536-1:1,clientId=null,started=false}
>>
>> // S.B : I added these printlns :
>> Receieve timeout******** : 500000
>> Receieve timeout******** : 500000
>> //S.B This is a server side now
>> 17-Nov-2008 11:56:48 org.apache.cxf.transport.jms.JMSDestination
>> onMessage FINE: server received request:
>> 17-Nov-2008 11:56:48 org.apache.cxf.transport.jms.JMSDestination
>> onMessage FINE: The Request Message is [ [EMAIL PROTECTED]
>>
>> and this is basically, the println in an application code is not even
>> hit.
>>
>> Now, same test with 2 threads succeeding :
>>
>> // S.B. : client side
>>
>> 14594 [pool-1-thread-2] INFO
>> org.springframework.jms.connection.SingleConnectionFactory - Established
>> shared JMS Connection: ActiveMQConnection
>> {id=ID:sberyoz-4775-1226923455594-1:1,clientId=null,started=false}
>> Receieve timeout******** : 500000
>> Receieve timeout******** : 500000
>> // S.B. The first thread has managed to get through
>> 7-Nov-2008 12:04:17 org.apache.cxf.transport.jms.JMSDestination
>> onMessage INFO: The Request Message is [ [EMAIL PROTECTED]
>> Getting continuation for Fred
>> Suspending invocation for Fred
>> Request message has been suspended
>> ....
>>
>> // S.B the second one is lucky too
>> 17-Nov-2008 12:04:17 org.apache.cxf.transport.jms.JMSDestination
>> onMessage INFO: The Request Message is [ [EMAIL PROTECTED]
>> Invocation for Fred has been suspended
>>
>> Can someone help me to figure why I'm seeing this transient behaviour ?
>>
>> here's a wsdl configuration (which I copied from the other test's wsdl)
>> shared by all the consumer threads and by the provider endpoint :
>>
>> <service name="HelloContinuationService">
>> <port binding="tns:HelloContinuationServiceSoapBinding"
>> name="HelloContinuationPort"> <jms:clientConfig
>> clientReceiveTimeout="500000" messageTimeToLive="500000"/>
>> <jms:serverConfig messageTimeToLive="500000"/>
>> <jms:address
>> jndiConnectionFactoryName="ConnectionFactory"
>> jndiDestinationName="dynamicQueues/test.jmstransport.text">
>> <jms:JMSNamingProperty name="java.naming.factory.initial"
>> value="org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>> <jms:JMSNamingProperty name="java.naming.provider.url"
>> value="tcp://localhost:61500"/> </jms:address>
>> <jms:server durableSubscriberName="CXF_subscriber"/>
>> </port>
>> </service>
>>
>> Thanks, Sergey
--
Daniel Kulp
[EMAIL PROTECTED]
http://dankulp.com/blog