[ https://issues.apache.org/jira/browse/CXF-2002?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12701443#action_12701443 ]
Freeman Fang edited comment on CXF-2002 at 4/22/09 2:37 AM: ------------------------------------------------------------ Hi Christian and Sergey, I'm trying to verify this fix works in Servicemix now. And I just found that JMSDestination.activate() method will hang(actually hang when AbstractJmsListeningContainer.initialize), the stacktrace is "Timer-4" daemon prio=1 tid=0x81a96d10 nid=0x1d6c in Object.wait() [0x7f7be000..0x7f7beeb0] at java.lang.Object.wait(Native Method) - waiting on <0xafb871a0> (a java.lang.Object) at java.lang.Object.wait(Object.java:474) at org.springframework.util.ConcurrencyThrottleSupport.beforeAccess(ConcurrencyThrottleSupport.java:118) - locked <0xafb871a0> (a java.lang.Object) at org.springframework.core.task.SimpleAsyncTaskExecutor$ConcurrencyThrottleAdapter.beforeAccess(SimpleAsyncTaskExecutor.java:169) at org.springframework.core.task.SimpleAsyncTaskExecutor.execute(SimpleAsyncTaskExecutor.java:141) at org.springframework.core.task.SimpleAsyncTaskExecutor.execute(SimpleAsyncTaskExecutor.java:126) at org.springframework.jms.listener.DefaultMessageListenerContainer.doRescheduleTask(DefaultMessageListenerContainer.java:495) at org.springframework.jms.listener.AbstractJmsListeningContainer.rescheduleTaskIfNecessary(AbstractJmsListeningContainer.java:474) - locked <0xafb52a88> (a java.lang.Object) at org.springframework.jms.listener.DefaultMessageListenerContainer.scheduleNewInvoker(DefaultMessageListenerContainer.java:532) at org.springframework.jms.listener.DefaultMessageListenerContainer.doInitialize(DefaultMessageListenerContainer.java:485) - locked <0xafb67c08> (a java.lang.Object) at org.springframework.jms.listener.AbstractJmsListeningContainer.initialize(AbstractJmsListeningContainer.java:160) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.initialize(AbstractPollingMessageListenerContainer.java:199) at org.springframework.jms.listener.DefaultMessageListenerContainer.initialize(DefaultMessageListenerContainer.java:451) at org.apache.cxf.transport.jms.JMSFactory.createJmsListener(JMSFactory.java:171) at org.apache.cxf.transport.jms.JMSDestination.activate(JMSDestination.java:105) at org.apache.cxf.transport.AbstractObservable.setMessageObserver(AbstractObservable.java:48) - locked <0xb0e3f2d8> (a org.apache.cxf.transport.jms.JMSDestination) at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:120) at org.apache.servicemix.cxfbc.CxfBcConsumer.start(CxfBcConsumer.java:325) at org.apache.servicemix.common.endpoints.SimpleEndpoint.activate(SimpleEndpoint.java:58) - locked <0xb0e52018> (a org.apache.servicemix.cxfbc.CxfBcConsumer) at org.apache.servicemix.common.ServiceUnit.start(ServiceUnit.java:53) at org.apache.servicemix.common.BaseServiceUnitManager.start(BaseServiceUnitManager.java:151) - locked <0x92087f10> (a org.apache.servicemix.common.BaseServiceUnitManager) at org.apache.servicemix.jbi.framework.ServiceUnitLifeCycle.start(ServiceUnitLifeCycle.java:103) at org.apache.servicemix.jbi.framework.ServiceAssemblyLifeCycle.start(ServiceAssemblyLifeCycle.java:132) - locked <0xb0e88458> (a org.apache.servicemix.jbi.framework.ServiceAssemblyLifeCycle) at org.apache.servicemix.jbi.framework.DeploymentService.start(DeploymentService.java:378) After digging the code, I found that this error might be introduced by the commit http://svn.apache.org/viewvc?rev=737356&view=rev If I remove the changes in this commit for JMSFactory.java + } else { + SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor(); + taskExecutor.setConcurrencyLimit(jmsConfig.getMaxConcurrentTasks()); + jmsListener.setTaskExecutor(taskExecutor); } then the hang disapper. I'm not sure if this piece of code is really necessary here for addressing CXF-2002, Could you please shed me some light? My configuration for JMSFeature looks like <bean class="org.apache.cxf.transport.jms.JMSConfigFeature"> <property name="jmsConfig"> <bean class="org.apache.cxf.transport.jms.JMSConfiguration"> <property name="connectionFactory"> <ref bean="myConnectionFactory" /> </property> <property name="targetDestination"> <value>dynamicQueues/person.queue</value> </property> <property name="useJms11"> <value>true</value> </property> <property name="timeToLive"> <value>500000</value> </property> <property name="concurrentConsumers"> <value>1</value> </property> <property name="maxConcurrentConsumers"> <value>1</value> </property> <property name="maxSuspendedContinuations"> <value>1</value> </property> <property name="cacheLevel"> <value>2</value> </property> </bean> </property> </bean> <bean id="myConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> </property> </bean> Do I miss something? Thanks Freeman was (Author: ffang): Hi Christian and Sergey, I'm trying to verify this fix works in Servicemix now. And I just found that JMSDestination.activate() method will hang(actually hang when AbstractJmsListeningContainer.initialize), the stacktrace is "Timer-4" daemon prio=1 tid=0x81a96d10 nid=0x1d6c in Object.wait() [0x7f7be000..0x7f7beeb0] at java.lang.Object.wait(Native Method) - waiting on <0xafb871a0> (a java.lang.Object) at java.lang.Object.wait(Object.java:474) at org.springframework.util.ConcurrencyThrottleSupport.beforeAccess(ConcurrencyThrottleSupport.java:118) - locked <0xafb871a0> (a java.lang.Object) at org.springframework.core.task.SimpleAsyncTaskExecutor$ConcurrencyThrottleAdapter.beforeAccess(SimpleAsyncTaskExecutor.java:169) at org.springframework.core.task.SimpleAsyncTaskExecutor.execute(SimpleAsyncTaskExecutor.java:141) at org.springframework.core.task.SimpleAsyncTaskExecutor.execute(SimpleAsyncTaskExecutor.java:126) at org.springframework.jms.listener.DefaultMessageListenerContainer.doRescheduleTask(DefaultMessageListenerContainer.java:495) at org.springframework.jms.listener.AbstractJmsListeningContainer.rescheduleTaskIfNecessary(AbstractJmsListeningContainer.java:474) - locked <0xafb52a88> (a java.lang.Object) at org.springframework.jms.listener.DefaultMessageListenerContainer.scheduleNewInvoker(DefaultMessageListenerContainer.java:532) at org.springframework.jms.listener.DefaultMessageListenerContainer.doInitialize(DefaultMessageListenerContainer.java:485) - locked <0xafb67c08> (a java.lang.Object) at org.springframework.jms.listener.AbstractJmsListeningContainer.initialize(AbstractJmsListeningContainer.java:160) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.initialize(AbstractPollingMessageListenerContainer.java:199) at org.springframework.jms.listener.DefaultMessageListenerContainer.initialize(DefaultMessageListenerContainer.java:451) at org.apache.cxf.transport.jms.JMSFactory.createJmsListener(JMSFactory.java:171) at org.apache.cxf.transport.jms.JMSDestination.activate(JMSDestination.java:105) at org.apache.cxf.transport.AbstractObservable.setMessageObserver(AbstractObservable.java:48) - locked <0xb0e3f2d8> (a org.apache.cxf.transport.jms.JMSDestination) at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:120) at org.apache.servicemix.cxfbc.CxfBcConsumer.start(CxfBcConsumer.java:325) at org.apache.servicemix.common.endpoints.SimpleEndpoint.activate(SimpleEndpoint.java:58) - locked <0xb0e52018> (a org.apache.servicemix.cxfbc.CxfBcConsumer) at org.apache.servicemix.common.ServiceUnit.start(ServiceUnit.java:53) at org.apache.servicemix.common.BaseServiceUnitManager.start(BaseServiceUnitManager.java:151) - locked <0x92087f10> (a org.apache.servicemix.common.BaseServiceUnitManager) at org.apache.servicemix.jbi.framework.ServiceUnitLifeCycle.start(ServiceUnitLifeCycle.java:103) at org.apache.servicemix.jbi.framework.ServiceAssemblyLifeCycle.start(ServiceAssemblyLifeCycle.java:132) - locked <0xb0e88458> (a org.apache.servicemix.jbi.framework.ServiceAssemblyLifeCycle) at org.apache.servicemix.jbi.framework.DeploymentService.start(DeploymentService.java:378) After digging the code, I found that this error might be introduced by the commit http://svn.apache.org/viewvc?rev=737356&view=rev If I remove the changes in this commit for JMSFactory.java + } else { + SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor(); + taskExecutor.setConcurrencyLimit(jmsConfig.getMaxConcurrentTasks()); + jmsListener.setTaskExecutor(taskExecutor); } then the hang disapper. I'm not sure if this piece of code is really necessary here for addressing CXF-2002, Could you please shed me some light? My configuration for JMSFeature looks like <bean class="org.apache.cxf.transport.jms.JMSConfigFeature"> <property name="jmsConfig"> <bean class="org.apache.cxf.transport.jms.JMSConfiguration"> <property name="concurrentConsumers"> <value>25</value> </property> <property name="connectionFactory"> <ref bean="myConnectionFactory" /> </property> <property name="targetDestination"> <value>dynamicQueues/person.queue</value> </property> <property name="useJms11"> <value>true</value> </property> </bean> </property> </bean> <bean id="myConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> </property> </bean> Do I miss something? Thanks Freeman > Server async jms transport needs dynamic mechanism to throttle message > consumption > ---------------------------------------------------------------------------------- > > Key: CXF-2002 > URL: https://issues.apache.org/jira/browse/CXF-2002 > Project: CXF > Issue Type: Improvement > Components: Transports > Affects Versions: 2.0.9, 2.1.3, 2.0.10 > Reporter: Ron Gavlin > Assignee: Sergey Beryozkin > > Currently, the server-side async jms transport has no mechanism to throttle > consumption of incoming messages. This becomes problematic in scenarios where > a large backlog of messages exists on the input queue. In this case, it is > likely that the cxf server will overload its internal work item queues > resulting in problems. A dynamic throttling mechanism on the async jms server > is required to avoid this problem. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.