Hello all.

I found exactly the same problem.
But I have a little bit different flow of messages.

Since drools send sync messages (and it is correct) the caller thread starts
to wait. And if to use drools as message router(as I do) all messages are
routed using drools, and since messages are routed sync- the calling threads
are blocked until they get answer and it causes to use a lot of threads,
which end up very fast.

I don't know what to do, because I want to route a lot of messages (up to
several millions per 24 hours)

Also, I found if I have a small a mount of messages (i.e 1 message per
minute, then all works perfect and messages are processed) If I increase
amount of messages, then, after some value drools blocks (because of sync)

I looked in the drools component source, but it looks correct for me.

Best regards,
    Oleg Atamanenko.

2008/8/5 gigeril <[EMAIL PROTECTED]>

>
> 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<http://knapp.com/tcphttp%7DmyRouter>
>  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----tp18833113p18833113.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>

Reply via email to