Hi Andrea,

Let's say I have 5 different smx-saxon endpoints which take an in-out mep and I 
would like to use smx-drools as a simple xpath router to determine which of my 
5 smx-saxon endpoints is used for the transformation. This seems like a valid 
use case.



----- Original Message ----
From: Andrea Zoppello <[EMAIL PROTECTED]>
To: [email protected]
Sent: Wednesday, August 6, 2008 5:18:43 AM
Subject: Re: Drools BindingComponent get Stuck after sending 23 Messages???

Hi Gert,

Waht about to make a route implementation so when an InOut Exchange 
arrives it will automatically call the answer method.

BTW i cannot figure a usecase where you need to send an InOut exchange 
to a drools component and then rerouting this InOut exchange to another 
endpoint.

As i said to Lars if you need this capabilities you could use other 
components, not drools.

Andrea

Andrea
Gert Vanthienen ha scritto:
> Andrea,
>
> Yeah, we should definitely get asynchronous support for Drools so we 
> need to get this done.  If the route() method before was able to 
> handle InOut exchanges, we should make sure it still does to avoid 
> breaking people's existing code though -- how about replacing the 
> Exception being thrown at the end by a WARN log statement saying the 
> same thing but still handling the Exchange in a synchronous way as 
> before?  This way, we still encourage people to start using answer().
>
> Gert
>
> Andrea Zoppello wrote:
>> Ok Gert,
>>
>> Probably i miss to handle the error case, but except for this, i 
>> ensure i've stressed with load test the components and it works 
>> correcly, under heavvy load.
>>
>> My suggestion is to start from my code to handle error case, and to 
>> commit this.
>>
>> Do you agree is better to use helper.route for (InOnly / Robust 
>> InOnly ) and helper.answer for InOut??
>>
>> Andrea
>> Gert Vanthienen ha scritto:
>>> Andrea,
>>>
>>> And what if the InOnly MessageExchange you forwarded ends in ERROR?  
>>> The solution you proposed already answered the incoming exchange 
>>> with DONE by the time you figure that out.  And I think the same 
>>> goes for RobustInOnly's fault message.
>>>
>>> Regards,
>>>
>>> Gert
>>>
>>> Andrea Zoppello wrote:
>>>> Hi Gert,
>>>>
>>>> The route method in my opinion is to handle inonly or robust inonly 
>>>> exchange, if you want to answer you could use the answer method.
>>>>
>>>> In my opinion you must choose what you want to do when you write 
>>>> drools file.
>>>>
>>>> If you need to forward ( creating another exhange ) an InOnly 
>>>> exchange use helper.route instead you need to use helper.answer.
>>>>
>>>> This should cover all the case.
>>>>
>>>> Andrea
>>>> Gert Vanthienen ha scritto:
>>>>> 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>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>

Reply via email to