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----tp18833113p18846446.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.