In my opinion it is not important if using drools as router is a good or a bad solution. Fact is if drools offers routing functionality, then it will be used. Maybe not by Andrea, but for sure by enough other people.
Lars Am Mittwoch 06 August 2008 11:40:52 schrieb Oleg Atamanenko: > Hi, guys. > > I agree. > > As for my use case - I have several custom components which should be used > in the one flow. The set of components is different between different > customers and each customer have a little different flow between > components. Drools looks very good for routing in this situation. > > Best regards, > Oleg Atamanenko. > > > 2008/8/6 Andrea Zoppello <[EMAIL PROTECTED]> > > > Hi Lars, > > > > I've doubt that a customer that don't want to code java will manually > > coding drools file :-) > > > > BTW i've this type of problems every day so i say how i've solved. > > > > I give customer i high level process designer, and let him to generate > > service assembly. > > If he wants to chnage rules, he can simply change visually the process > > and regenerate code. > > > > In our platform we've code generators where the user design routing rules > > visually and we get the drools file automatically generated, the only > > thing you need to provide are xpath rule. > > > > Have you take a look at the spagic platform??? > > > > > > Andrea > > > > Lars Heinemann ha scritto: > >> Andrea, > >> > >> look at following situation: > >> You got a installation of your smx stuff at customers site. The customer > >> wants to influence the routing mechanism. He is not aware of Java and > >> also has no time and manpower to code a bean SU nor to code anything > >> with smx. So how can this customer now solve this? Everytime calling a > >> consulting company doing coding etc? > >> The drools file is in the data folder of smx. He can easily go there and > >> adapt the rules and targets without the need of recompiling/redeployment > >> etc. > >> > >> And btw. if a customer wants the router to be done with drools, you > >> can't tell him to use servicemix-bean instead ;) > >> > >> Regards > >> Lars > >> > >> Am Mittwoch 06 August 2008 11:09:26 schrieb Andrea Zoppello: > >>> Hi Lars, > >>> > >>> What you're saing it's right nothing prevent to route an InOut > >>> Exchange, but in my opinion in that case you have other better choices > >>> than drools component. > >>> > >>> I'm doing something similar processing, as you described and i've done > >>> better for example with servicemix-bean than that drools. > >>> > >>> In my opininion the original idea of the JbiHelper was to provide an > >>> helper class, that could help user to route messages not to write > >>> complex MEP exchange inside the route method, for this reason for me > >>> make sense to have a class with two methods where: > >>> > >>> 1) route is used to route InOnly or RobustInOnly exchange > >>> > >>> 2) answer instead if you want to answer on the out message when an > >>> InOut Exchage. > >>> > >>> > >>> Andrea > >>> > >>> Lars Heinemann ha scritto: > >>>> Andrea, > >>>> > >>>> just some thoughts.... > >>>> > >>>> Am Mittwoch 06 August 2008 10:48:02 schrieb Andrea Zoppello: > >>>>> 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. > >>>> > >>>> --> what prevents a user to not route InOut exchanges and why doesn't > >>>> it makes sense? If you use the drools as a simple router this makes > >>>> imho sense. You are right if all your processing logic is done in your > >>>> drools script, then you can just process it and send the answer. > >>>> > >>>> Regards > >>>> Lars > >>>> > >>>>> 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<http://knapp.com/tcphttp%7DmyRo > >>>>>>>>uter> 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 > >>>>>>>>(De fa ultConsequenceExceptionHandler.java:13 > >>>>>>>> > >>>>>>>> ) > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java: > >>>>>>>>558 ) at > >>>>>>>> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:51 > >>>>>>>>8) at > >>>>>>>> > >>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorki > >>>>>>>>ngM em ory.java:475) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorki > >>>>>>>>ngM em ory.java:439) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint. > >>>>>>>>jav a: 183) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint > >>>>>>>>.ja va > >>>>>>>> > >>>>>>>> :177) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBas > >>>>>>>>eLi fe Cycle.java:597) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(As > >>>>>>>>ync Ba seLifeCycle.java:548) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange( > >>>>>>>>Asy nc BaseLifeCycle.java:502) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchang > >>>>>>>>e(S yn cLifeCycleWrapper.java:60) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInB > >>>>>>>>oun d( DeliveryChannelImpl.java:610) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(Abstract > >>>>>>>>Flo w. java:172) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlo > >>>>>>>>w.j av a:168) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue. > >>>>>>>>jav a: 134) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolE > >>>>>>>>xec ut or.java:885) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecu > >>>>>>>>tor .j ava: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(D > >>>>>>>>eli ve ryChannelImpl.java:498) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(D > >>>>>>>>eli ve ryChannelImpl.java:442) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(Endp > >>>>>>>>oin tD eliveryChannel.java:102) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.model.JbiHelper.routeTo(JbiHelper.jav > >>>>>>>>a:1 51 ) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java: > >>>>>>>>109 ) at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.Rule_tcphttp_http_0.consequence(Rule_ > >>>>>>>>tcp ht tp_http_0.java:14) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.Rule_tcphttp_http_0ConsequenceInvoker > >>>>>>>>.ev al uate(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.waitForExc > >>>>>>>>han ge (DeliveryChannelImpl.java:699) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(D > >>>>>>>>eli ve ryChannelImpl.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(M > >>>>>>>>ess ag eExchangeImpl.java:264) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange( > >>>>>>>>Asy nc BaseLifeCycle.java:516) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchang > >>>>>>>>e(S yn cLifeCycleWrapper.java:60) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInB > >>>>>>>>oun d( DeliveryChannelImpl.java:610) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(Abstract > >>>>>>>>Flo w. java:172) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlo > >>>>>>>>w.j av a:168) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue. > >>>>>>>>jav a: 134) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolE > >>>>>>>>xec ut or.java:885) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecu > >>>>>>>>tor .j ava: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 > >>>>>>>>(De fa ultConsequenceExceptionHandler.java:13 > >>>>>>>> > >>>>>>>> ) > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java: > >>>>>>>>558 ) at > >>>>>>>> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:51 > >>>>>>>>8) at > >>>>>>>> > >>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorki > >>>>>>>>ngM em ory.java:475) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorki > >>>>>>>>ngM em ory.java:439) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint. > >>>>>>>>jav a: 183) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint > >>>>>>>>.ja va > >>>>>>>> > >>>>>>>> :177) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBas > >>>>>>>>eLi fe Cycle.java:597) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(As > >>>>>>>>ync Ba seLifeCycle.java:548) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange( > >>>>>>>>Asy nc BaseLifeCycle.java:502) > >>>>>>>> > >>>>>>>> ... 8 more > >>>>>>>> Caused by: javax.jbi.messaging.MessagingException: > >>>>>>>> java.lang.InterruptedException > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(D > >>>>>>>>eli ve ryChannelImpl.java:498) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(D > >>>>>>>>eli ve ryChannelImpl.java:442) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(Endp > >>>>>>>>oin tD eliveryChannel.java:102) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.model.JbiHelper.routeTo(JbiHelper.jav > >>>>>>>>a:1 51 ) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java: > >>>>>>>>109 ) at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.Rule_tcphttp_http_0.consequence(Rule_ > >>>>>>>>tcp ht tp_http_0.java:14) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.drools.Rule_tcphttp_http_0ConsequenceInvoker > >>>>>>>>.ev al uate(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.waitForExc > >>>>>>>>han ge (DeliveryChannelImpl.java:699) > >>>>>>>> > >>>>>>>> at > >>>>>>>> > >>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(D > >>>>>>>>eli ve ryChannelImpl.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>
