In this case, the smx-saxon xquery endpoint currently only supports an in-out mep.
Andrea Zoppello-2 wrote: > > Why not use a process where you use the Synchronizer Spagic component or > the smx AsyncBridge, in that case the drools the process could be ( i > supposed here you have an HTTP InOut BC. > > HTTP BC (InOut) ---> AsyncBrigdge --> Drools > > and from here SAXON1, SAXON2 > > Andrea > Ron Gavlin ha scritto: >> 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> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >> > > > -- View this message in context: http://www.nabble.com/Drools-BindingComponent-get-Stuck-after-sending-23-Messages----tp18833113p18848360.html Sent from the ServiceMix - User mailing list archive at Nabble.com.
