If I send my 23 Message and then look into servicemix with jconsole I see 16
drools Threads are waiting for exchange:

Name: pool-flow.seda.servicemix-drools-thread-1
State: WAITING on [EMAIL PROTECTED]
Total blocked: 0  Total waited: 2

Stack trace: 
java.lang.Object.wait(Native Method)
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.waitForExchange(DeliveryChannelImpl.java:699)
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:472)
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:102)
org.apache.servicemix.drools.model.JbiHelper.routeTo(JbiHelper.java:151)
org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
org.apache.servicemix.drools.Rule_tcphttp_http_0.consequence(Rule_tcphttp_http_0.java:14)
org.apache.servicemix.drools.Rule_tcphttp_http_0ConsequenceInvoker.evaluate(Rule_tcphttp_http_0ConsequenceInvoker.java:20)
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:554)
   - locked [EMAIL PROTECTED]
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:518)
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:475)
   - locked [EMAIL PROTECTED]
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:439)
   - locked [EMAIL PROTECTED]
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:183)
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:177)
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:597)
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:548)
org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:502)
org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
java.lang.Thread.run(Thread.java:619)








gigeril wrote:
> 
> But if it is going back trough the drools endpoint why is the sendsync
> thread in the drools endpoint still opened ? 
> 
> 
> 
> 
> 
> Gert Vanthienen wrote:
>> 
>> L.S.,
>> 
>> It is going back through the Drools component.  If you look at the 
>> JBIHelper, you'll find code like this:
>>         getChannel().sendSync(newMe);
>>         if (newMe.getStatus() == ExchangeStatus.DONE) {
>>             me.setStatus(ExchangeStatus.DONE);
>>             getChannel().send(me);
>>       ...
>> 
>> In the snippet above, the newMe is the Exchange being sent from the the 
>> Drools helper.  After it returns (using sendSync), the exchange that 
>> came into the drools endpoint is being answered (just with DONE here, 
>> but there are other paths the code that return message content and 
>> faults). 
>> 
>> Regards,
>> 
>> Gert
>> 
>> gigeril wrote:
>>> I don't unterstand the message flow trough servicemix when using drools
>>> component. If I am sending a request (INOUT Pattern), and this request
>>> passes the drools endpoint and get forwarded to the TCP or HTTP Endpoint
>>> how
>>> does the response get back to my client? Over the drools endpoint or
>>> does
>>> the http/tcp endpoint send it to the tcp consumer directly??
>>>
>>> I think that it sends it directly but the drools endpoint also waits for
>>> the
>>> response and so it is waiting and waiting and no sendSync answer is send
>>> to
>>> it because it was already send to the consumer Endpoint.
>>>
>>> I ask this, because I always get the right response to my client.
>>>
>>> What can I do avoid this issue?
>>>
>>> btw.: I am using apache-servicemix-3.3-20080721.213539-7. 
>>>
>>>
>>>
>>>
>>>
>>> Gert Vanthienen wrote:
>>>   
>>>> Andrea,
>>>>
>>>> Actually, I was just looking at applying that.  If the code in your
>>>> last 
>>>> comment goes into the routeTo method, isn't this a step back from where 
>>>> we were?  It uses send() instead of sendSync(), but I no longer see any 
>>>> possibility of handling an InOut or RobustInOnly with a Fault message, 
>>>> or am I missing something there?
>>>>
>>>> Regards,
>>>>
>>>> Gert
>>>>
>>>> Andrea Zoppello wrote:
>>>>     
>>>>> Hi,
>>>>>
>>>>> I had the same problem, take a look to mine last comment on
>>>>> https://issues.apache.org/activemq/browse/SM-1248
>>>>>
>>>>> Andrea
>>>>> gigeril ha scritto:
>>>>>       
>>>>>> Hi @ all.
>>>>>> I've following following setup of Servicemix:
>>>>>>                                                          
>>>>>>                                                                    
>>>>>> TCP Client -----> TCP BC-->drools BC ------> TCP BC ---> TCP Server
>>>>>>                                                           |____>HTTP 
>>>>>> BC -->
>>>>>> HTTP Server
>>>>>>
>>>>>> If I connect (target Service) my own written TCP BC to the HTTP BC or 
>>>>>> the
>>>>>> TCP BC it works fine (sync, async, Pattern: Inout, InOnly).
>>>>>> I get a problem if the drools engine get into the message chain. Then 
>>>>>> I only
>>>>>> can send 23 Messages (always 23!!) until my tcp client reports me a
>>>>>> connection timeout and the connectors get stuck. I can only press 
>>>>>> STRG+C in
>>>>>> the Servicemix Console Window to restart Servicemix and send 23 
>>>>>> Messages.
>>>>>> This sending of this 23 Messages work fine. They take the way I 
>>>>>> defined in
>>>>>> my .drl where it depends on the message content if it is send to the 
>>>>>> tcp or
>>>>>> the http server. I also get the response back to the client.
>>>>>>
>>>>>> This is the output when I press STRG+C. This whole stacktrace is 
>>>>>> printed out
>>>>>> 23 times.
>>>>>>
>>>>>> INFO  - ServiceAssemblyLifeCycle       - Shutting down service
>>>>>> assembly:
>>>>>> droolsrouter-sa
>>>>>> INFO  - ServiceUnitLifeCycle           - Shutting down service unit:
>>>>>> droolsrouter-su
>>>>>> INFO  - ServiceUnitLifeCycle           - Shutting down service unit:
>>>>>> httpprovider-su
>>>>>> INFO  - ServiceUnitLifeCycle           - Shutting down service unit:
>>>>>> tcpconsumer-su
>>>>>> INFO  - ServiceUnitLifeCycle           - Shutting down service unit:
>>>>>> tcpprovider-su
>>>>>> INFO  - JBIContainer                   - ServiceMix JBI Container
>>>>>> (ServiceMix) stopped
>>>>>> [Fatal Error] :1:89: Content is not allowed in trailing section.
>>>>>> ERROR - DroolsComponent                - Error processing exchange 
>>>>>> InOut[
>>>>>>   id: ID:10.22.20.113-11b93600c6f-4:0
>>>>>>   status: Active
>>>>>>   role: provider
>>>>>>   service: {http://knapp.com/tcphttp}myRouter
>>>>>>   endpoint: myRouter
>>>>>>   in: <?xml version="1.0" encoding="UTF-8"?><message
>>>>>> type="http"><text>hallo</text></message>
>>>>>>   out: Unable to display: org.xml.sax.SAXParseException: Content is
>>>>>> not
>>>>>> allowed in trailing section.
>>>>>> ]
>>>>>> org.drools.spi.ConsequenceException: 
>>>>>> javax.jbi.messaging.MessagingException:
>>>>>> java.lang.InterruptedException
>>>>>>         at
>>>>>> org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:13
>>>>>>  
>>>>>>
>>>>>> )
>>>>>>         at
>>>>>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:558)
>>>>>>         at
>>>>>> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:518)
>>>>>>         at
>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:475)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:439)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:183)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:177)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:597)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:548)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:502)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>>>>>>  
>>>>>>
>>>>>>         at java.lang.Thread.run(Thread.java:619)
>>>>>> Caused by: javax.jbi.messaging.MessagingException:
>>>>>> java.lang.InterruptedException
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:498)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:102)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.drools.model.JbiHelper.routeTo(JbiHelper.java:151)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.Rule_tcphttp_http_0.consequence(Rule_tcphttp_http_0.java:14)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.drools.Rule_tcphttp_http_0ConsequenceInvoker.evaluate(Rule_tcphttp_http_0ConsequenceInv
>>>>>>  
>>>>>>
>>>>>> oker.java:20)
>>>>>>         at
>>>>>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:554)
>>>>>>         ... 16 more
>>>>>> Caused by: java.lang.InterruptedException
>>>>>>         at java.lang.Object.wait(Native Method)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.waitForExchange(DeliveryChannelImpl.java:699)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:472)
>>>>>>  
>>>>>>
>>>>>>         ... 23 more
>>>>>> ERROR - DroolsComponent                - Error setting exchange 
>>>>>> status to
>>>>>> ERROR
>>>>>> java.lang.IllegalStateException: component is not owner when trying 
>>>>>> to set
>>>>>> error: org.drools.spi.ConsequenceException: j
>>>>>> avax.jbi.messaging.MessagingException: java.lang.InterruptedException
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setError(MessageExchangeImpl.java:264)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:516)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>>>>>>  
>>>>>>
>>>>>>         at java.lang.Thread.run(Thread.java:619)
>>>>>> Caused by: org.drools.spi.ConsequenceException:
>>>>>> javax.jbi.messaging.MessagingException:
>>>>>> java.lang.InterruptedException
>>>>>>         at
>>>>>> org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:13
>>>>>>  
>>>>>>
>>>>>> )
>>>>>>         at
>>>>>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:558)
>>>>>>         at
>>>>>> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:518)
>>>>>>         at
>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:475)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:439)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:183)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:177)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:597)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:548)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:502)
>>>>>>  
>>>>>>
>>>>>>         ... 8 more
>>>>>> Caused by: javax.jbi.messaging.MessagingException:
>>>>>> java.lang.InterruptedException
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:498)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:102)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.drools.model.JbiHelper.routeTo(JbiHelper.java:151)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.Rule_tcphttp_http_0.consequence(Rule_tcphttp_http_0.java:14)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.drools.Rule_tcphttp_http_0ConsequenceInvoker.evaluate(Rule_tcphttp_http_0ConsequenceInv
>>>>>>  
>>>>>>
>>>>>> oker.java:20)
>>>>>>         at
>>>>>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:554)
>>>>>>         ... 16 more
>>>>>> Caused by: java.lang.InterruptedException
>>>>>>         at java.lang.Object.wait(Native Method)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.waitForExchange(DeliveryChannelImpl.java:699)
>>>>>>  
>>>>>>
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:472)
>>>>>>  
>>>>>>
>>>>>>         ... 23 more
>>>>>>
>>>>>>
>>>>>>
>>>>>> So my rule.drl looks like:
>>>>>>
>>>>>> package org.apache.servicemix.drools
>>>>>>  
>>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>>>
>>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>>  
>>>>>>
>>>>>> rule "tcphttp:http"
>>>>>>     when
>>>>>>         me : Exchange( status == Exchange.ACTIVE, inmsg : in != null
>>>>>> );
>>>>>>         eval( inmsg.xpath("/message/@type = \"http\""))
>>>>>>     then
>>>>>>         
>>>>>> System.out.println("!!!!!!!!!!!!!!!!!!!!!http!!!!!!!!!!!!!!!!!!!!!!!
>>>>>> ");
>>>>>>         jbi.route( "service:http://knapp.com/tcphttp/dhttp_provider";
>>>>>> );
>>>>>> end
>>>>>>
>>>>>> rule "tcphttp:tcp"
>>>>>>     when
>>>>>>         me : Exchange( status == Exchange.ACTIVE, inmsg : in != null
>>>>>> );
>>>>>>         eval( inmsg.xpath("/message/@type = \"tcp\""));
>>>>>>     then
>>>>>>         
>>>>>> System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!tcp!!!!!!!!!!!!!!!!!!
>>>>>> ");
>>>>>>         jbi.route( "service:http://knapp.com/tcphttp/dtcp_provider";
>>>>>> );
>>>>>> end
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> My xbean.xml for the drools su:
>>>>>>
>>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0";
>>>>>>        xmlns:tcphttp="http://knapp.com/tcphttp";
>>>>>>        xmlns="http://www.springframework.org/schema/beans";
>>>>>>        xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance";
>>>>>>        xsi:schemaLocation="http://servicemix.apache.org/drools/1.0
>>>>>> http://servicemix.apache.org/schema/servicemix-drools-3.2.2.xsd
>>>>>>        http://www.springframework.org/schema/beans
>>>>>> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd";>
>>>>>>
>>>>>>   <drools:endpoint service="tcphttp:myRouter"
>>>>>>                    endpoint="myRouter"
>>>>>>                    ruleBaseResource="classpath:rule.drl"
>>>>>>                    namespaceContext="#nsContext" />
>>>>>>
>>>>>>
>>>>>>   <drools:namespace-context id="nsContext">
>>>>>>     <drools:namespaces>
>>>>>>       <drools:namespace
>>>>>> prefix="tcphttp">http://knapp.com/tcphttp</drools:namespace>
>>>>>>     </drools:namespaces>
>>>>>>   </drools:namespace-context>
>>>>>>
>>>>>> </beans>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>   
>>>>>>         
>>>>>       
>>>>
>>>> -----
>>>> ---
>>>> Gert Vanthienen
>>>> http://www.anova.be
>>>>
>>>>     
>>>
>>>   
>> 
>> 
>> 
>> -----
>> ---
>> Gert Vanthienen
>> http://www.anova.be
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Drools-BindingComponent-get-Stuck-after-sending-23-Messages----tp18833113p18846520.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to