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
> 

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

Reply via email to