You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by Arif Mohd <ar...@wipro.com> on 2007/06/20 15:55:20 UTC

Problem while invoking rule by using drools component

Hi,
  
   Iam having the following setup

JMS queue(Consumer)-->eip:Content Based
Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule base)

part of xbean.xml for "eip:Content Based Router" is

      <eip:routing-rule>
        <eip:predicate>
          <eip:xpath-predicate xpath="/Record/eid = 100"
namespaceContext="#nsContext" />
        </eip:predicate>
        <eip:target>
          <eip:exchange-target service="bescocr:myDroolsService" />
        </eip:target>
      </eip:routing-rule>

xbean.xml for DroolsComponent(SU) is

<beans xmlns:drools="http://servicemix.apache.org/drools/1.0" 
       xmlns:bescocr="http://xxx.com/bescocr_031807">
<drools:endpoint 
     service="bescocr:myDroolsService" 
     endpoint="endpoint" 
     ruleBaseResource="classpath:routing.drl"/> 
</beans>


routing.drl is

package org.apache.servicemix.drools
import org.apache.servicemix.drools.model.Exchange;
global org.apache.servicemix.drools.model.JbiHelper jbi;

rule "Route to tap1"
	when
		me : Exchange( status == Exchange.ACTIVE, in : in != null )
		eval( in.xpath("/Record/eid = 100") )
	then
		jbi.route( "bescocr::tap1" );
end

rule "Route to tap2"
	when
		me : Exchange( status == Exchange.ACTIVE, in : in != null )
		eval( in.xpath("/Record/eid = 101") )
	then
		jbi.route( "bescocr::tap2" );
end


with the above setup iam getting the following exception "for service: null
and interface: null" the exception is as follows, do i need to set something
else in xbean.xml?

javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-7:0
  status: Active
  role: provider
  in: <My Message>
] for service: null and interface: null
        at
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
        at
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
        at
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
        at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
        at
org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
va:19)
        at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
        at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
        at
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
        at
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)
ERROR - DroolsComponent                - Error processing exchange InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-3:2
  status: Active
  role: provider
  service: {http://xxx.com/bescocr_031807}myDroolsService
  endpoint: endpoint
  in: <My Message>
]
org.drools.spi.ConsequenceException: javax.jbi.messaging.MessagingException:
Could not find route for exchange: InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-7:0
  status: Active
  role: provider
  in: <My Message>
] for service: null and interface: null
        at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
        at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
        at
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
        at
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)
Caused by: javax.jbi.messaging.MessagingException: Could not find route for
exchange: InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-7:0
  status: Active
  role: provider
  in: <My Message>
] for service: null and interface: null
        at
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
        at
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
        at
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
        at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
        at
org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
va:19)
        ... 16 more
ERROR - JmsComponent                   - Error processing exchange InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-4:0
  status: Error
  role: consumer
  service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
  endpoint: tap
  in: <My Message>
  error: org.drools.spi.ConsequenceException:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-7:0
  status: Active
  role: provider
  in: <My Message>
] for service: null and interface: null
]
java.lang.UnsupportedOperationException: A destination must be specified.
        at
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
        at
org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
        at
org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
        at
org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)
ERROR - JmsComponent                   - Error setting exchange status to
ERROR
javax.jbi.messaging.MessagingException: illegal call to send / sendSync
        at
org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)




-- 
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problem while invoking rule by using drools component

Posted by Arif Mohd <ar...@wipro.com>.
When i tried to give my rule as

rule "Route to tap1"
	when
		me : Exchange( status == Exchange.ACTIVE, in : in != null )
		eval( in.getProperty("org.apache.servicemix.senderEndpoint")=="cbr1"  ) 
	then
jbi.route( "service:http://xxx.com/bescocr_031807/tap1" );
end

I got this exception 

ERROR - JmsComponent                   - Error processing exchange InOnly[
  id: ID:yyyy
  status: Error
  role: consumer
  service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
  endpoint: tap
  in: <My Message>
  error: java.lang.Exception: No rules have handled the exchange. Check your
rule base.
]

I hope the getProperty() function is returning null

My component configuration is as follows

JMS queue(Consumer: service name:JmsToPipeTapSvc)-->eip:Content Based
Router(service name:cbr1)-->SA(DroolsComponent)


Arif Mohd wrote:
> 
> No, still iam getting the same exception
> Now my rule is like this
> rule "Route to tap1"
> 	when
> 		me : Exchange( status == Exchange.ACTIVE, in : in != null )
> 		eval( in.xpath("$org.apache.servicemix.senderEndpoint='cbr1'") ) 
> 	then
> jbi.route( "service:http://intel.com/bescocr_031807/tap1" );
> end
> 
> i tried to give
> in.getProperty("org.apache.servicemix.senderEndpoint")='cbr1'
> 
> but even this doesn't work
> 
> Gert Vanthienen wrote:
>> 
>> Arif,
>> 
>> Sorry about the confusion with the syntax, there was an error in one of 
>> my previous posts. I think $org.apache.servicemix.sendEndpoint (without 
>> the curly braces) should work fine...
>> 
>> Gert
>> 
>> Arif Mohd wrote:
>>> Hi gert,
>>>
>>>  i have given like this
>>>
>>> rule "Route to tap1"
>>> 	when
>>> 		me : Exchange( status == Exchange.ACTIVE, in : in != null )
>>> 		eval( in.xpath("${org.apache.servicemix.senderEndpoint}='cbr1'") )
>>>
>>> 	then
>>>                               jbi.route(
>>> "service:http://xxx.com/bescocr_031807/tap1" );
>>> end
>>>
>>> But iam getting the following exception
>>> As of my understanding this xpath expression will be evaluated over the
>>> message content, but in message content where we will have
>>> "org.apache.servicemix.senderEndpoint" iam bit confused please help me
>>> out
>>> in this regard.
>>>
>>>
>>> ERROR - DroolsComponent                - Error processing exchange
>>> InOnly[
>>>   id: ID:yyyy
>>>   status: Active
>>>   role: provider
>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>   endpoint: endpoint
>>>   in: <My Message>
>>> ]
>>> org.drools.RuntimeDroolsException:
>>> javax.jbi.messaging.MessagingException:
>>> javax.xml.xpath.XPathExpressionException
>>>         at org.drools.rule.EvalCondition.isAllowed(Unknown Source)
>>>         at org.drools.reteoo.EvalConditionNode.assertTuple(Unknown
>>> Source)
>>>         at
>>> org.drools.reteoo.LeftInputAdapterNode.createAndAssertTuple(Unknown
>>> Source)
>>>         at org.drools.reteoo.LeftInputAdapterNode.assertObject(Unknown
>>> Source)
>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>> Source)
>>>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>> Source)
>>>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>> Source)
>>>         at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source)
>>>         at org.drools.reteoo.Rete.assertObject(Unknown Source)
>>>         at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source)
>>>         at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown
>>> Source)
>>>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
>>> Source)
>>>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
>>> Source)
>>>         at
>>> org.apache.servicemix.drools.model.JbiHelper.<init>(JbiHelper.java:57)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.populateWorkingMemory(DroolsEndpoint.java:159)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:149)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>         at
>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>         at java.lang.Thread.run(Thread.java:595)
>>> Caused by: javax.jbi.messaging.MessagingException:
>>> javax.xml.xpath.XPathExpressionException
>>>         at
>>> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:106)
>>>         at
>>> org.apache.servicemix.drools.model.Message.xpath(Message.java:54)
>>>         at
>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.eval0(Rule_Route_to_tap1_0.java:8)
>>>         at
>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0Eval0Invoker.evaluate(Rule_Route_to_tap1_0Eval0Invoker.java:19)
>>>         ... 29 more
>>> Caused by: javax.xml.xpath.XPathExpressionException
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:191)
>>>         at
>>> org.apache.servicemix.expression.JAXPBooleanXPathExpression.evaluateXPath(JAXPBooleanXPathExpression.java:39)
>>>         at
>>> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:99)
>>>         ... 32 more
>>> Caused by: javax.xml.transform.TransformerException: Unknown error in
>>> XPath.
>>>         at
>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:296)
>>>         at
>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:234)
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:123)
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97)
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178)
>>>         ... 34 more
>>> Caused by: java.lang.NullPointerException
>>>         at
>>> org.apache.servicemix.expression.MessageVariableResolver.resolveVariable(MessageVariableResolver.java:63)
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.JAXPVariableStack.getVariableOrParam(JAXPVariableStack.java:60)
>>>         at
>>> com.sun.org.apache.xpath.internal.operations.Variable.execute(Variable.java:213)
>>>         at
>>> com.sun.org.apache.xpath.internal.operations.Operation.execute(Operation.java:106)
>>>         at
>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:268)
>>>         ... 38 more
>>>
>>> Gert Vanthienen wrote:
>>>   
>>>> Arif Mohd,
>>>>
>>>>
>>>> Doesn't the same syntax also works with servicemix-drools?  Something
>>>> like
>>>>     eval( in.xpath("$org.apache.servicemix.senderEndpoint ...") )
>>>>
>>>> The most convenient way to create your own Auditor by extending 
>>>> ServiceMix's AbstractAuditor.  Secondly, you have to register your 
>>>> auditor in the <sm:services/> section in conf/servicemix.xml.  From
>>>> that 
>>>> moment on, every message exchange that flows through the ESB, will 
>>>> trigger your Auditor's exchangeSent() method, so this allows you to do 
>>>> logging, archiving, ...
>>>>
>>>>
>>>> Gert
>>>>
>>>>
>>>> Arif Mohd wrote:
>>>>     
>>>>> Hi Gert,
>>>>>   Firstly i want to know the sender endpoint from drools
>>>>> component(i.e, i
>>>>> want to know how to write a rule for determining sender endpoint)
>>>>>
>>>>> Secondly you are talking about message auditor, could you please
>>>>> elobarate
>>>>> how to do this? if possible with example.
>>>>>
>>>>>
>>>>> Gert Vanthienen wrote:
>>>>>   
>>>>>       
>>>>>> Arif Mohd,
>>>>>>
>>>>>>
>>>>>> I think this is possible if you use the 
>>>>>> ${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
>>>>>> expressions to determine the sender endpoint.  However, if you use
>>>>>> the 
>>>>>> tap's for debugging purposes, I would suggest you build a message 
>>>>>> auditor that logs the messages somehow (whatever is done by your 
>>>>>> wiretaps right now).  This way, if you do not need the logging, you 
>>>>>> simply disable the auditor in your ServiceMix configuration. 
>>>>>>
>>>>>> This would also allow you to remove all debugging configuration from 
>>>>>> your SA, so it only contains real routing/service configuration. 
>>>>>> This 
>>>>>> improves the maintainability/readability of your configuration a lot 
>>>>>> (recently done that for one of my own projects, which also had
>>>>>> wiretaps 
>>>>>> all over...)
>>>>>>
>>>>>>
>>>>>> Gert
>>>>>>
>>>>>> Arif Mohd wrote:
>>>>>>     
>>>>>>         
>>>>>>> Thank you gert,
>>>>>>>    1) Iam able to call my rules now without any error.
>>>>>>>    2) The example i was using is simply routing a message based on
>>>>>>> the
>>>>>>> content of message, which can be easily done with Content Based
>>>>>>> Router
>>>>>>>    Now i want to do routing based on the source component of the
>>>>>>> message
>>>>>>> from where the message is coming i.e, i want to remove the
>>>>>>> tap's(used
>>>>>>> for
>>>>>>> debugging) at runtime using drools.
>>>>>>>
>>>>>>> My component setup is
>>>>>>>
>>>>>>>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
>>>>>>> Router-->eip:Tap2--->eip:Transformer
>>>>>>>
>>>>>>> Now i want to enable/disable Tap1 and Tap2 during runtime by using
>>>>>>> drools,
>>>>>>> for that purpose i planned to have my component setup as follows
>>>>>>>
>>>>>>>    JMS
>>>>>>> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
>>>>>>> Based
>>>>>>> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>>>>>>>
>>>>>>> the logic in rules files should be as follows
>>>>>>>
>>>>>>> if source component is JMS queue, route to Tap1
>>>>>>> if source component is Tap1, route to Content based router
>>>>>>> if source component is ContentBaseRouter, route to Tap2
>>>>>>> if source component is Tap2, route to Transformer
>>>>>>>
>>>>>>>
>>>>>>> How can i write this kind of rules,please help me in this regard.
>>>>>>> Also let me know is it a feasible way of adding/removing components
>>>>>>> logically?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Gert Vanthienen wrote:
>>>>>>>   
>>>>>>>       
>>>>>>>           
>>>>>>>> Arif,
>>>>>>>>
>>>>>>>>
>>>>>>>> You can find a description on how to form this kind of URIs on 
>>>>>>>> http://incubator.apache.org/servicemix/uris.html.
>>>>>>>>
>>>>>>>> If you think the URI is correct but still have these 'Cannot find
>>>>>>>> route 
>>>>>>>> to ...' errors, you can use a JMX console to verify which endpoints
>>>>>>>> are 
>>>>>>>> actually available on the ESB.  I think your service URI contained
>>>>>>>> the 
>>>>>>>> endpoint name, where it should only hold the service name.
>>>>>>>>
>>>>>>>>
>>>>>>>> Gert
>>>>>>>>
>>>>>>>> Arif Mohd wrote:
>>>>>>>>     
>>>>>>>>         
>>>>>>>>             
>>>>>>>>> Hi Rabi,
>>>>>>>>>
>>>>>>>>>     I didn't understand this concept of giving service name as
>>>>>>>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not
>>>>>>>>> working
>>>>>>>>>
>>>>>>>>>    Can you please elobarate what is the meaning of the above
>>>>>>>>> statement,
>>>>>>>>> i
>>>>>>>>> agree that previously i have missed to preceede the service name
>>>>>>>>> with
>>>>>>>>> namespace i.e, i should have given like
>>>>>>>>>
>>>>>>>>> jbi.route( "service:bescocr:tap1" );
>>>>>>>>>
>>>>>>>>> But even the above statement is not working
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> rabi wrote:
>>>>>>>>>       
>>>>>>>>>           
>>>>>>>>>               
>>>>>>>>>> in your routing.drl replace
>>>>>>>>>>  
>>>>>>>>>>  jbi.route( "bescocr::tap1" ); with
>>>>>>>>>>  
>>>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>>>> /tap1");
>>>>>>>>>>  
>>>>>>>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>>>>>>>
>>>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>>>> /tap2");
>>>>>>>>>>  
>>>>>>>>>> Regards, 
>>>>>>>>>> Rabi Mishra 
>>>>>>>>>> http://rabisblog.blogspot.com/
>>>>>>>>>>
>>>>>>>>>> ________________________________
>>>>>>>>>>
>>>>>>>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>>>>>>>> Sent: Wed 6/20/2007 7:25 PM
>>>>>>>>>> To: servicemix-users@geronimo.apache.org
>>>>>>>>>> Subject: Problem while invoking rule by using drools component
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>  
>>>>>>>>>>    Iam having the following setup
>>>>>>>>>>
>>>>>>>>>> JMS queue(Consumer)-->eip:Content Based
>>>>>>>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule
>>>>>>>>>> base)
>>>>>>>>>>
>>>>>>>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>>>>>>>
>>>>>>>>>>       <eip:routing-rule>
>>>>>>>>>>         <eip:predicate>
>>>>>>>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>>>>>>>> namespaceContext="#nsContext" />
>>>>>>>>>>         </eip:predicate>
>>>>>>>>>>         <eip:target>
>>>>>>>>>>           <eip:exchange-target service="bescocr:myDroolsService"
>>>>>>>>>> />
>>>>>>>>>>         </eip:target>
>>>>>>>>>>       </eip:routing-rule>
>>>>>>>>>>
>>>>>>>>>> xbean.xml for DroolsComponent(SU) is
>>>>>>>>>>
>>>>>>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>>>>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>>>>>>>> <drools:endpoint
>>>>>>>>>>      service="bescocr:myDroolsService"
>>>>>>>>>>      endpoint="endpoint"
>>>>>>>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>>>>>>>> </beans>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> routing.drl is
>>>>>>>>>>
>>>>>>>>>> package org.apache.servicemix.drools
>>>>>>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>>>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>>>>>>
>>>>>>>>>> rule "Route to tap1"
>>>>>>>>>>         when
>>>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in
>>>>>>>>>> !=
>>>>>>>>>> null
>>>>>>>>>> )
>>>>>>>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>>>>>>>         then
>>>>>>>>>>                 jbi.route( "bescocr::tap1" );
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>> rule "Route to tap2"
>>>>>>>>>>         when
>>>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in
>>>>>>>>>> !=
>>>>>>>>>> null
>>>>>>>>>> )
>>>>>>>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>>>>>>>         then
>>>>>>>>>>                 jbi.route( "bescocr::tap2" );
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> with the above setup iam getting the following exception "for
>>>>>>>>>> service:
>>>>>>>>>> null
>>>>>>>>>> and interface: null" the exception is as follows, do i need to
>>>>>>>>>> set
>>>>>>>>>> something
>>>>>>>>>> else in xbean.xml?
>>>>>>>>>>
>>>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>>>> exchange:
>>>>>>>>>> InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>>>> va:19)
>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>> ERROR - DroolsComponent                - Error processing
>>>>>>>>>> exchange
>>>>>>>>>> InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>>>>>>>   endpoint: endpoint
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ]
>>>>>>>>>> org.drools.spi.ConsequenceException:
>>>>>>>>>> javax.jbi.messaging.MessagingException:
>>>>>>>>>> Could not find route for exchange: InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>> Caused by: javax.jbi.messaging.MessagingException: Could not find
>>>>>>>>>> route
>>>>>>>>>> for
>>>>>>>>>> exchange: InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>>>> va:19)
>>>>>>>>>>         ... 16 more
>>>>>>>>>> ERROR - JmsComponent                   - Error processing
>>>>>>>>>> exchange
>>>>>>>>>> InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>>>>>>>   status: Error
>>>>>>>>>>   role: consumer
>>>>>>>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>>>>>>>   endpoint: tap
>>>>>>>>>>   in: <My Message>
>>>>>>>>>>   error: org.drools.spi.ConsequenceException:
>>>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>>>> exchange:
>>>>>>>>>> InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>> ]
>>>>>>>>>> java.lang.UnsupportedOperationException: A destination must be
>>>>>>>>>> specified.
>>>>>>>>>>         at
>>>>>>>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>> ERROR - JmsComponent                   - Error setting exchange
>>>>>>>>>> status
>>>>>>>>>> to
>>>>>>>>>> ERROR
>>>>>>>>>> javax.jbi.messaging.MessagingException: illegal call to send /
>>>>>>>>>> sendSync
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> View this message in context:
>>>>>>>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>>>>>>>> Sent from the ServiceMix - User mailing list archive at
>>>>>>>>>> Nabble.com.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> The information contained in this electronic message and any
>>>>>>>>>> attachments
>>>>>>>>>> to this message are intended for the exclusive use of the
>>>>>>>>>> addressee(s)
>>>>>>>>>> and
>>>>>>>>>> may contain proprietary, confidential or privileged information.
>>>>>>>>>> If
>>>>>>>>>> you
>>>>>>>>>> are not the intended recipient, you should not disseminate,
>>>>>>>>>> distribute
>>>>>>>>>> or
>>>>>>>>>> copy this e-mail. Please notify the sender immediately and
>>>>>>>>>> destroy
>>>>>>>>>> all
>>>>>>>>>> copies of this message and any attachments. 
>>>>>>>>>>
>>>>>>>>>> WARNING: Computer viruses can be transmitted via email. The
>>>>>>>>>> recipient
>>>>>>>>>> should check this email and any attachments for the presence of
>>>>>>>>>> viruses.
>>>>>>>>>> The company accepts no liability for any damage caused by any
>>>>>>>>>> virus
>>>>>>>>>> transmitted by this email.
>>>>>>>>>>  
>>>>>>>>>> www.wipro.com
>>>>>>>>>>
>>>>>>>>>>         
>>>>>>>>>>             
>>>>>>>>>>                 
>>>>>>>>     
>>>>>>>>         
>>>>>>>>             
>>>>>>>   
>>>>>>>       
>>>>>>>           
>>>>>>     
>>>>>>         
>>>>>   
>>>>>       
>>>>
>>>>     
>>>
>>>   
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11559956
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problem while invoking rule by using drools component

Posted by Arif Mohd <ar...@wipro.com>.
Hi Gert,

   i have given my condition as follows and working fine

eval(
((String)me.getProperty("org.apache.servicemix.senderEndpoint")).equals("{http://xxx.com/bescocr_031807}cbr1:endpoint")
)


Iam typecasting the Object returned by getProperty method to String, i hope
it will always return String object, can you please confirm that it will not
give class cast exception 


Gert Vanthienen wrote:
> 
> Arif,
> 
> Apparently, if I look at the code,  this is a property of the message 
> exchange itself.  Could you try to do a System.out.println of 
> me.getProperty(...) in your drools file?
> 
> Gert
> 
> Arif Mohd wrote:
>> No, still iam getting the same exception
>> Now my rule is like this
>> rule "Route to tap1"
>> 	when
>> 		me : Exchange( status == Exchange.ACTIVE, in : in != null )
>> 		eval( in.xpath("$org.apache.servicemix.senderEndpoint='cbr1'") ) 
>> 	then
>> jbi.route( "service:http://intel.com/bescocr_031807/tap1" );
>> end
>>
>> i tried to give
>> in.getProperty("org.apache.servicemix.senderEndpoint")='cbr1'
>>
>> but even this doesn't work
>>
>> Gert Vanthienen wrote:
>>   
>>> Arif,
>>>
>>> Sorry about the confusion with the syntax, there was an error in one of 
>>> my previous posts. I think $org.apache.servicemix.sendEndpoint (without 
>>> the curly braces) should work fine...
>>>
>>> Gert
>>>
>>> Arif Mohd wrote:
>>>     
>>>> Hi gert,
>>>>
>>>>  i have given like this
>>>>
>>>> rule "Route to tap1"
>>>> 	when
>>>> 		me : Exchange( status == Exchange.ACTIVE, in : in != null )
>>>> 		eval( in.xpath("${org.apache.servicemix.senderEndpoint}='cbr1'") )
>>>>
>>>> 	then
>>>>                               jbi.route(
>>>> "service:http://xxx.com/bescocr_031807/tap1" );
>>>> end
>>>>
>>>> But iam getting the following exception
>>>> As of my understanding this xpath expression will be evaluated over the
>>>> message content, but in message content where we will have
>>>> "org.apache.servicemix.senderEndpoint" iam bit confused please help me
>>>> out
>>>> in this regard.
>>>>
>>>>
>>>> ERROR - DroolsComponent                - Error processing exchange
>>>> InOnly[
>>>>   id: ID:yyyy
>>>>   status: Active
>>>>   role: provider
>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>   endpoint: endpoint
>>>>   in: <My Message>
>>>> ]
>>>> org.drools.RuntimeDroolsException:
>>>> javax.jbi.messaging.MessagingException:
>>>> javax.xml.xpath.XPathExpressionException
>>>>         at org.drools.rule.EvalCondition.isAllowed(Unknown Source)
>>>>         at org.drools.reteoo.EvalConditionNode.assertTuple(Unknown
>>>> Source)
>>>>         at
>>>> org.drools.reteoo.LeftInputAdapterNode.createAndAssertTuple(Unknown
>>>> Source)
>>>>         at org.drools.reteoo.LeftInputAdapterNode.assertObject(Unknown
>>>> Source)
>>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>>> Source)
>>>>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>>> Source)
>>>>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>>> Source)
>>>>         at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown
>>>> Source)
>>>>         at org.drools.reteoo.Rete.assertObject(Unknown Source)
>>>>         at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown
>>>> Source)
>>>>         at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown
>>>> Source)
>>>>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
>>>> Source)
>>>>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
>>>> Source)
>>>>         at
>>>> org.apache.servicemix.drools.model.JbiHelper.<init>(JbiHelper.java:57)
>>>>         at
>>>> org.apache.servicemix.drools.DroolsEndpoint.populateWorkingMemory(DroolsEndpoint.java:159)
>>>>         at
>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:149)
>>>>         at
>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>         at
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>         at
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>         at
>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>         at java.lang.Thread.run(Thread.java:595)
>>>> Caused by: javax.jbi.messaging.MessagingException:
>>>> javax.xml.xpath.XPathExpressionException
>>>>         at
>>>> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:106)
>>>>         at
>>>> org.apache.servicemix.drools.model.Message.xpath(Message.java:54)
>>>>         at
>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.eval0(Rule_Route_to_tap1_0.java:8)
>>>>         at
>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0Eval0Invoker.evaluate(Rule_Route_to_tap1_0Eval0Invoker.java:19)
>>>>         ... 29 more
>>>> Caused by: javax.xml.xpath.XPathExpressionException
>>>>         at
>>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:191)
>>>>         at
>>>> org.apache.servicemix.expression.JAXPBooleanXPathExpression.evaluateXPath(JAXPBooleanXPathExpression.java:39)
>>>>         at
>>>> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:99)
>>>>         ... 32 more
>>>> Caused by: javax.xml.transform.TransformerException: Unknown error in
>>>> XPath.
>>>>         at
>>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:296)
>>>>         at
>>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:234)
>>>>         at
>>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:123)
>>>>         at
>>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97)
>>>>         at
>>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178)
>>>>         ... 34 more
>>>> Caused by: java.lang.NullPointerException
>>>>         at
>>>> org.apache.servicemix.expression.MessageVariableResolver.resolveVariable(MessageVariableResolver.java:63)
>>>>         at
>>>> com.sun.org.apache.xpath.internal.jaxp.JAXPVariableStack.getVariableOrParam(JAXPVariableStack.java:60)
>>>>         at
>>>> com.sun.org.apache.xpath.internal.operations.Variable.execute(Variable.java:213)
>>>>         at
>>>> com.sun.org.apache.xpath.internal.operations.Operation.execute(Operation.java:106)
>>>>         at
>>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:268)
>>>>         ... 38 more
>>>>
>>>> Gert Vanthienen wrote:
>>>>   
>>>>       
>>>>> Arif Mohd,
>>>>>
>>>>>
>>>>> Doesn't the same syntax also works with servicemix-drools?  Something
>>>>> like
>>>>>     eval( in.xpath("$org.apache.servicemix.senderEndpoint ...") )
>>>>>
>>>>> The most convenient way to create your own Auditor by extending 
>>>>> ServiceMix's AbstractAuditor.  Secondly, you have to register your 
>>>>> auditor in the <sm:services/> section in conf/servicemix.xml.  From
>>>>> that 
>>>>> moment on, every message exchange that flows through the ESB, will 
>>>>> trigger your Auditor's exchangeSent() method, so this allows you to do 
>>>>> logging, archiving, ...
>>>>>
>>>>>
>>>>> Gert
>>>>>
>>>>>
>>>>> Arif Mohd wrote:
>>>>>     
>>>>>         
>>>>>> Hi Gert,
>>>>>>   Firstly i want to know the sender endpoint from drools
>>>>>> component(i.e,
>>>>>> i
>>>>>> want to know how to write a rule for determining sender endpoint)
>>>>>>
>>>>>> Secondly you are talking about message auditor, could you please
>>>>>> elobarate
>>>>>> how to do this? if possible with example.
>>>>>>
>>>>>>
>>>>>> Gert Vanthienen wrote:
>>>>>>   
>>>>>>       
>>>>>>           
>>>>>>> Arif Mohd,
>>>>>>>
>>>>>>>
>>>>>>> I think this is possible if you use the 
>>>>>>> ${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
>>>>>>> expressions to determine the sender endpoint.  However, if you use
>>>>>>> the 
>>>>>>> tap's for debugging purposes, I would suggest you build a message 
>>>>>>> auditor that logs the messages somehow (whatever is done by your 
>>>>>>> wiretaps right now).  This way, if you do not need the logging, you 
>>>>>>> simply disable the auditor in your ServiceMix configuration. 
>>>>>>>
>>>>>>> This would also allow you to remove all debugging configuration from 
>>>>>>> your SA, so it only contains real routing/service configuration. 
>>>>>>> This 
>>>>>>> improves the maintainability/readability of your configuration a lot 
>>>>>>> (recently done that for one of my own projects, which also had
>>>>>>> wiretaps 
>>>>>>> all over...)
>>>>>>>
>>>>>>>
>>>>>>> Gert
>>>>>>>
>>>>>>> Arif Mohd wrote:
>>>>>>>     
>>>>>>>         
>>>>>>>             
>>>>>>>> Thank you gert,
>>>>>>>>    1) Iam able to call my rules now without any error.
>>>>>>>>    2) The example i was using is simply routing a message based on
>>>>>>>> the
>>>>>>>> content of message, which can be easily done with Content Based
>>>>>>>> Router
>>>>>>>>    Now i want to do routing based on the source component of the
>>>>>>>> message
>>>>>>>> from where the message is coming i.e, i want to remove the
>>>>>>>> tap's(used
>>>>>>>> for
>>>>>>>> debugging) at runtime using drools.
>>>>>>>>
>>>>>>>> My component setup is
>>>>>>>>
>>>>>>>>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
>>>>>>>> Router-->eip:Tap2--->eip:Transformer
>>>>>>>>
>>>>>>>> Now i want to enable/disable Tap1 and Tap2 during runtime by using
>>>>>>>> drools,
>>>>>>>> for that purpose i planned to have my component setup as follows
>>>>>>>>
>>>>>>>>    JMS
>>>>>>>> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
>>>>>>>> Based
>>>>>>>> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>>>>>>>>
>>>>>>>> the logic in rules files should be as follows
>>>>>>>>
>>>>>>>> if source component is JMS queue, route to Tap1
>>>>>>>> if source component is Tap1, route to Content based router
>>>>>>>> if source component is ContentBaseRouter, route to Tap2
>>>>>>>> if source component is Tap2, route to Transformer
>>>>>>>>
>>>>>>>>
>>>>>>>> How can i write this kind of rules,please help me in this regard.
>>>>>>>> Also let me know is it a feasible way of adding/removing components
>>>>>>>> logically?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Gert Vanthienen wrote:
>>>>>>>>   
>>>>>>>>       
>>>>>>>>           
>>>>>>>>               
>>>>>>>>> Arif,
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> You can find a description on how to form this kind of URIs on 
>>>>>>>>> http://incubator.apache.org/servicemix/uris.html.
>>>>>>>>>
>>>>>>>>> If you think the URI is correct but still have these 'Cannot find
>>>>>>>>> route 
>>>>>>>>> to ...' errors, you can use a JMX console to verify which
>>>>>>>>> endpoints
>>>>>>>>> are 
>>>>>>>>> actually available on the ESB.  I think your service URI contained
>>>>>>>>> the 
>>>>>>>>> endpoint name, where it should only hold the service name.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Gert
>>>>>>>>>
>>>>>>>>> Arif Mohd wrote:
>>>>>>>>>     
>>>>>>>>>         
>>>>>>>>>             
>>>>>>>>>                 
>>>>>>>>>> Hi Rabi,
>>>>>>>>>>
>>>>>>>>>>     I didn't understand this concept of giving service name as
>>>>>>>>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not
>>>>>>>>>> working
>>>>>>>>>>
>>>>>>>>>>    Can you please elobarate what is the meaning of the above
>>>>>>>>>> statement,
>>>>>>>>>> i
>>>>>>>>>> agree that previously i have missed to preceede the service name
>>>>>>>>>> with
>>>>>>>>>> namespace i.e, i should have given like
>>>>>>>>>>
>>>>>>>>>> jbi.route( "service:bescocr:tap1" );
>>>>>>>>>>
>>>>>>>>>> But even the above statement is not working
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> rabi wrote:
>>>>>>>>>>       
>>>>>>>>>>           
>>>>>>>>>>               
>>>>>>>>>>                   
>>>>>>>>>>> in your routing.drl replace
>>>>>>>>>>>  
>>>>>>>>>>>  jbi.route( "bescocr::tap1" ); with
>>>>>>>>>>>  
>>>>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>>>>> /tap1");
>>>>>>>>>>>  
>>>>>>>>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>>>>>>>>
>>>>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>>>>> /tap2");
>>>>>>>>>>>  
>>>>>>>>>>> Regards, 
>>>>>>>>>>> Rabi Mishra 
>>>>>>>>>>> http://rabisblog.blogspot.com/
>>>>>>>>>>>
>>>>>>>>>>> ________________________________
>>>>>>>>>>>
>>>>>>>>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>>>>>>>>> Sent: Wed 6/20/2007 7:25 PM
>>>>>>>>>>> To: servicemix-users@geronimo.apache.org
>>>>>>>>>>> Subject: Problem while invoking rule by using drools component
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>  
>>>>>>>>>>>    Iam having the following setup
>>>>>>>>>>>
>>>>>>>>>>> JMS queue(Consumer)-->eip:Content Based
>>>>>>>>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on
>>>>>>>>>>> rule
>>>>>>>>>>> base)
>>>>>>>>>>>
>>>>>>>>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>>>>>>>>
>>>>>>>>>>>       <eip:routing-rule>
>>>>>>>>>>>         <eip:predicate>
>>>>>>>>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>>>>>>>>> namespaceContext="#nsContext" />
>>>>>>>>>>>         </eip:predicate>
>>>>>>>>>>>         <eip:target>
>>>>>>>>>>>           <eip:exchange-target service="bescocr:myDroolsService"
>>>>>>>>>>> />
>>>>>>>>>>>         </eip:target>
>>>>>>>>>>>       </eip:routing-rule>
>>>>>>>>>>>
>>>>>>>>>>> xbean.xml for DroolsComponent(SU) is
>>>>>>>>>>>
>>>>>>>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>>>>>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>>>>>>>>> <drools:endpoint
>>>>>>>>>>>      service="bescocr:myDroolsService"
>>>>>>>>>>>      endpoint="endpoint"
>>>>>>>>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>>>>>>>>> </beans>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> routing.drl is
>>>>>>>>>>>
>>>>>>>>>>> package org.apache.servicemix.drools
>>>>>>>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>>>>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>>>>>>>
>>>>>>>>>>> rule "Route to tap1"
>>>>>>>>>>>         when
>>>>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in :
>>>>>>>>>>> in
>>>>>>>>>>> !=
>>>>>>>>>>> null
>>>>>>>>>>> )
>>>>>>>>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>>>>>>>>         then
>>>>>>>>>>>                 jbi.route( "bescocr::tap1" );
>>>>>>>>>>> end
>>>>>>>>>>>
>>>>>>>>>>> rule "Route to tap2"
>>>>>>>>>>>         when
>>>>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in :
>>>>>>>>>>> in
>>>>>>>>>>> !=
>>>>>>>>>>> null
>>>>>>>>>>> )
>>>>>>>>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>>>>>>>>         then
>>>>>>>>>>>                 jbi.route( "bescocr::tap2" );
>>>>>>>>>>> end
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> with the above setup iam getting the following exception "for
>>>>>>>>>>> service:
>>>>>>>>>>> null
>>>>>>>>>>> and interface: null" the exception is as follows, do i need to
>>>>>>>>>>> set
>>>>>>>>>>> something
>>>>>>>>>>> else in xbean.xml?
>>>>>>>>>>>
>>>>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>>>>> exchange:
>>>>>>>>>>> InOnly[
>>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>>   status: Active
>>>>>>>>>>>   role: provider
>>>>>>>>>>>   in: <My Message>
>>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>>>>> va:19)
>>>>>>>>>>>         at
>>>>>>>>>>> org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>>>>> Source)
>>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>>>>> Source)
>>>>>>>>>>>         at
>>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>>> Source)
>>>>>>>>>>>         at
>>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>>> Source)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>>         at
>>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>>         at
>>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>>> ERROR - DroolsComponent                - Error processing
>>>>>>>>>>> exchange
>>>>>>>>>>> InOnly[
>>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>>>>>>>>   status: Active
>>>>>>>>>>>   role: provider
>>>>>>>>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>>>>>>>>   endpoint: endpoint
>>>>>>>>>>>   in: <My Message>
>>>>>>>>>>> ]
>>>>>>>>>>> org.drools.spi.ConsequenceException:
>>>>>>>>>>> javax.jbi.messaging.MessagingException:
>>>>>>>>>>> Could not find route for exchange: InOnly[
>>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>>   status: Active
>>>>>>>>>>>   role: provider
>>>>>>>>>>>   in: <My Message>
>>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>>         at
>>>>>>>>>>> org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>>>>> Source)
>>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>>>>> Source)
>>>>>>>>>>>         at
>>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>>> Source)
>>>>>>>>>>>         at
>>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>>> Source)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>>         at
>>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>>         at
>>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>>> Caused by: javax.jbi.messaging.MessagingException: Could not
>>>>>>>>>>> find
>>>>>>>>>>> route
>>>>>>>>>>> for
>>>>>>>>>>> exchange: InOnly[
>>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>>   status: Active
>>>>>>>>>>>   role: provider
>>>>>>>>>>>   in: <My Message>
>>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>>>>> va:19)
>>>>>>>>>>>         ... 16 more
>>>>>>>>>>> ERROR - JmsComponent                   - Error processing
>>>>>>>>>>> exchange
>>>>>>>>>>> InOnly[
>>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>>>>>>>>   status: Error
>>>>>>>>>>>   role: consumer
>>>>>>>>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>>>>>>>>   endpoint: tap
>>>>>>>>>>>   in: <My Message>
>>>>>>>>>>>   error: org.drools.spi.ConsequenceException:
>>>>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>>>>> exchange:
>>>>>>>>>>> InOnly[
>>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>>   status: Active
>>>>>>>>>>>   role: provider
>>>>>>>>>>>   in: <My Message>
>>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>> ]
>>>>>>>>>>> java.lang.UnsupportedOperationException: A destination must be
>>>>>>>>>>> specified.
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>>         at
>>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>>         at
>>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>>> ERROR - JmsComponent                   - Error setting exchange
>>>>>>>>>>> status
>>>>>>>>>>> to
>>>>>>>>>>> ERROR
>>>>>>>>>>> javax.jbi.messaging.MessagingException: illegal call to send /
>>>>>>>>>>> sendSync
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>>         at
>>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>>         at
>>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>>         at
>>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> View this message in context:
>>>>>>>>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>>>>>>>>> Sent from the ServiceMix - User mailing list archive at
>>>>>>>>>>> Nabble.com.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> The information contained in this electronic message and any
>>>>>>>>>>> attachments
>>>>>>>>>>> to this message are intended for the exclusive use of the
>>>>>>>>>>> addressee(s)
>>>>>>>>>>> and
>>>>>>>>>>> may contain proprietary, confidential or privileged information.
>>>>>>>>>>> If
>>>>>>>>>>> you
>>>>>>>>>>> are not the intended recipient, you should not disseminate,
>>>>>>>>>>> distribute
>>>>>>>>>>> or
>>>>>>>>>>> copy this e-mail. Please notify the sender immediately and
>>>>>>>>>>> destroy
>>>>>>>>>>> all
>>>>>>>>>>> copies of this message and any attachments. 
>>>>>>>>>>>
>>>>>>>>>>> WARNING: Computer viruses can be transmitted via email. The
>>>>>>>>>>> recipient
>>>>>>>>>>> should check this email and any attachments for the presence of
>>>>>>>>>>> viruses.
>>>>>>>>>>> The company accepts no liability for any damage caused by any
>>>>>>>>>>> virus
>>>>>>>>>>> transmitted by this email.
>>>>>>>>>>>  
>>>>>>>>>>> www.wipro.com
>>>>>>>>>>>
>>>>>>>>>>>         
>>>>>>>>>>>             
>>>>>>>>>>>                 
>>>>>>>>>>>                     
>>>>>>>>>     
>>>>>>>>>         
>>>>>>>>>             
>>>>>>>>>                 
>>>>>>>>   
>>>>>>>>       
>>>>>>>>           
>>>>>>>>               
>>>>>>>     
>>>>>>>         
>>>>>>>             
>>>>>>   
>>>>>>       
>>>>>>           
>>>>>     
>>>>>         
>>>>   
>>>>       
>>>     
>>
>>   
> 
> 

-- 
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11573715
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problem while invoking rule by using drools component

Posted by Gert Vanthienen <ge...@skynet.be>.
Arif,

Apparently, if I look at the code,  this is a property of the message 
exchange itself.  Could you try to do a System.out.println of 
me.getProperty(...) in your drools file?

Gert

Arif Mohd wrote:
> No, still iam getting the same exception
> Now my rule is like this
> rule "Route to tap1"
> 	when
> 		me : Exchange( status == Exchange.ACTIVE, in : in != null )
> 		eval( in.xpath("$org.apache.servicemix.senderEndpoint='cbr1'") ) 
> 	then
> jbi.route( "service:http://intel.com/bescocr_031807/tap1" );
> end
>
> i tried to give
> in.getProperty("org.apache.servicemix.senderEndpoint")='cbr1'
>
> but even this doesn't work
>
> Gert Vanthienen wrote:
>   
>> Arif,
>>
>> Sorry about the confusion with the syntax, there was an error in one of 
>> my previous posts. I think $org.apache.servicemix.sendEndpoint (without 
>> the curly braces) should work fine...
>>
>> Gert
>>
>> Arif Mohd wrote:
>>     
>>> Hi gert,
>>>
>>>  i have given like this
>>>
>>> rule "Route to tap1"
>>> 	when
>>> 		me : Exchange( status == Exchange.ACTIVE, in : in != null )
>>> 		eval( in.xpath("${org.apache.servicemix.senderEndpoint}='cbr1'") )
>>>
>>> 	then
>>>                               jbi.route(
>>> "service:http://xxx.com/bescocr_031807/tap1" );
>>> end
>>>
>>> But iam getting the following exception
>>> As of my understanding this xpath expression will be evaluated over the
>>> message content, but in message content where we will have
>>> "org.apache.servicemix.senderEndpoint" iam bit confused please help me
>>> out
>>> in this regard.
>>>
>>>
>>> ERROR - DroolsComponent                - Error processing exchange
>>> InOnly[
>>>   id: ID:yyyy
>>>   status: Active
>>>   role: provider
>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>   endpoint: endpoint
>>>   in: <My Message>
>>> ]
>>> org.drools.RuntimeDroolsException:
>>> javax.jbi.messaging.MessagingException:
>>> javax.xml.xpath.XPathExpressionException
>>>         at org.drools.rule.EvalCondition.isAllowed(Unknown Source)
>>>         at org.drools.reteoo.EvalConditionNode.assertTuple(Unknown
>>> Source)
>>>         at
>>> org.drools.reteoo.LeftInputAdapterNode.createAndAssertTuple(Unknown
>>> Source)
>>>         at org.drools.reteoo.LeftInputAdapterNode.assertObject(Unknown
>>> Source)
>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>> Source)
>>>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>> Source)
>>>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>>> Source)
>>>         at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source)
>>>         at org.drools.reteoo.Rete.assertObject(Unknown Source)
>>>         at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source)
>>>         at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown
>>> Source)
>>>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
>>> Source)
>>>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
>>> Source)
>>>         at
>>> org.apache.servicemix.drools.model.JbiHelper.<init>(JbiHelper.java:57)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.populateWorkingMemory(DroolsEndpoint.java:159)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:149)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>         at
>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>         at java.lang.Thread.run(Thread.java:595)
>>> Caused by: javax.jbi.messaging.MessagingException:
>>> javax.xml.xpath.XPathExpressionException
>>>         at
>>> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:106)
>>>         at
>>> org.apache.servicemix.drools.model.Message.xpath(Message.java:54)
>>>         at
>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.eval0(Rule_Route_to_tap1_0.java:8)
>>>         at
>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0Eval0Invoker.evaluate(Rule_Route_to_tap1_0Eval0Invoker.java:19)
>>>         ... 29 more
>>> Caused by: javax.xml.xpath.XPathExpressionException
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:191)
>>>         at
>>> org.apache.servicemix.expression.JAXPBooleanXPathExpression.evaluateXPath(JAXPBooleanXPathExpression.java:39)
>>>         at
>>> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:99)
>>>         ... 32 more
>>> Caused by: javax.xml.transform.TransformerException: Unknown error in
>>> XPath.
>>>         at
>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:296)
>>>         at
>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:234)
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:123)
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97)
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178)
>>>         ... 34 more
>>> Caused by: java.lang.NullPointerException
>>>         at
>>> org.apache.servicemix.expression.MessageVariableResolver.resolveVariable(MessageVariableResolver.java:63)
>>>         at
>>> com.sun.org.apache.xpath.internal.jaxp.JAXPVariableStack.getVariableOrParam(JAXPVariableStack.java:60)
>>>         at
>>> com.sun.org.apache.xpath.internal.operations.Variable.execute(Variable.java:213)
>>>         at
>>> com.sun.org.apache.xpath.internal.operations.Operation.execute(Operation.java:106)
>>>         at
>>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:268)
>>>         ... 38 more
>>>
>>> Gert Vanthienen wrote:
>>>   
>>>       
>>>> Arif Mohd,
>>>>
>>>>
>>>> Doesn't the same syntax also works with servicemix-drools?  Something
>>>> like
>>>>     eval( in.xpath("$org.apache.servicemix.senderEndpoint ...") )
>>>>
>>>> The most convenient way to create your own Auditor by extending 
>>>> ServiceMix's AbstractAuditor.  Secondly, you have to register your 
>>>> auditor in the <sm:services/> section in conf/servicemix.xml.  From that 
>>>> moment on, every message exchange that flows through the ESB, will 
>>>> trigger your Auditor's exchangeSent() method, so this allows you to do 
>>>> logging, archiving, ...
>>>>
>>>>
>>>> Gert
>>>>
>>>>
>>>> Arif Mohd wrote:
>>>>     
>>>>         
>>>>> Hi Gert,
>>>>>   Firstly i want to know the sender endpoint from drools component(i.e,
>>>>> i
>>>>> want to know how to write a rule for determining sender endpoint)
>>>>>
>>>>> Secondly you are talking about message auditor, could you please
>>>>> elobarate
>>>>> how to do this? if possible with example.
>>>>>
>>>>>
>>>>> Gert Vanthienen wrote:
>>>>>   
>>>>>       
>>>>>           
>>>>>> Arif Mohd,
>>>>>>
>>>>>>
>>>>>> I think this is possible if you use the 
>>>>>> ${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
>>>>>> expressions to determine the sender endpoint.  However, if you use the 
>>>>>> tap's for debugging purposes, I would suggest you build a message 
>>>>>> auditor that logs the messages somehow (whatever is done by your 
>>>>>> wiretaps right now).  This way, if you do not need the logging, you 
>>>>>> simply disable the auditor in your ServiceMix configuration. 
>>>>>>
>>>>>> This would also allow you to remove all debugging configuration from 
>>>>>> your SA, so it only contains real routing/service configuration.  This 
>>>>>> improves the maintainability/readability of your configuration a lot 
>>>>>> (recently done that for one of my own projects, which also had
>>>>>> wiretaps 
>>>>>> all over...)
>>>>>>
>>>>>>
>>>>>> Gert
>>>>>>
>>>>>> Arif Mohd wrote:
>>>>>>     
>>>>>>         
>>>>>>             
>>>>>>> Thank you gert,
>>>>>>>    1) Iam able to call my rules now without any error.
>>>>>>>    2) The example i was using is simply routing a message based on
>>>>>>> the
>>>>>>> content of message, which can be easily done with Content Based
>>>>>>> Router
>>>>>>>    Now i want to do routing based on the source component of the
>>>>>>> message
>>>>>>> from where the message is coming i.e, i want to remove the tap's(used
>>>>>>> for
>>>>>>> debugging) at runtime using drools.
>>>>>>>
>>>>>>> My component setup is
>>>>>>>
>>>>>>>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
>>>>>>> Router-->eip:Tap2--->eip:Transformer
>>>>>>>
>>>>>>> Now i want to enable/disable Tap1 and Tap2 during runtime by using
>>>>>>> drools,
>>>>>>> for that purpose i planned to have my component setup as follows
>>>>>>>
>>>>>>>    JMS
>>>>>>> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
>>>>>>> Based
>>>>>>> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>>>>>>>
>>>>>>> the logic in rules files should be as follows
>>>>>>>
>>>>>>> if source component is JMS queue, route to Tap1
>>>>>>> if source component is Tap1, route to Content based router
>>>>>>> if source component is ContentBaseRouter, route to Tap2
>>>>>>> if source component is Tap2, route to Transformer
>>>>>>>
>>>>>>>
>>>>>>> How can i write this kind of rules,please help me in this regard.
>>>>>>> Also let me know is it a feasible way of adding/removing components
>>>>>>> logically?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Gert Vanthienen wrote:
>>>>>>>   
>>>>>>>       
>>>>>>>           
>>>>>>>               
>>>>>>>> Arif,
>>>>>>>>
>>>>>>>>
>>>>>>>> You can find a description on how to form this kind of URIs on 
>>>>>>>> http://incubator.apache.org/servicemix/uris.html.
>>>>>>>>
>>>>>>>> If you think the URI is correct but still have these 'Cannot find
>>>>>>>> route 
>>>>>>>> to ...' errors, you can use a JMX console to verify which endpoints
>>>>>>>> are 
>>>>>>>> actually available on the ESB.  I think your service URI contained
>>>>>>>> the 
>>>>>>>> endpoint name, where it should only hold the service name.
>>>>>>>>
>>>>>>>>
>>>>>>>> Gert
>>>>>>>>
>>>>>>>> Arif Mohd wrote:
>>>>>>>>     
>>>>>>>>         
>>>>>>>>             
>>>>>>>>                 
>>>>>>>>> Hi Rabi,
>>>>>>>>>
>>>>>>>>>     I didn't understand this concept of giving service name as
>>>>>>>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not
>>>>>>>>> working
>>>>>>>>>
>>>>>>>>>    Can you please elobarate what is the meaning of the above
>>>>>>>>> statement,
>>>>>>>>> i
>>>>>>>>> agree that previously i have missed to preceede the service name
>>>>>>>>> with
>>>>>>>>> namespace i.e, i should have given like
>>>>>>>>>
>>>>>>>>> jbi.route( "service:bescocr:tap1" );
>>>>>>>>>
>>>>>>>>> But even the above statement is not working
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> rabi wrote:
>>>>>>>>>       
>>>>>>>>>           
>>>>>>>>>               
>>>>>>>>>                   
>>>>>>>>>> in your routing.drl replace
>>>>>>>>>>  
>>>>>>>>>>  jbi.route( "bescocr::tap1" ); with
>>>>>>>>>>  
>>>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>>>> /tap1");
>>>>>>>>>>  
>>>>>>>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>>>>>>>
>>>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>>>> /tap2");
>>>>>>>>>>  
>>>>>>>>>> Regards, 
>>>>>>>>>> Rabi Mishra 
>>>>>>>>>> http://rabisblog.blogspot.com/
>>>>>>>>>>
>>>>>>>>>> ________________________________
>>>>>>>>>>
>>>>>>>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>>>>>>>> Sent: Wed 6/20/2007 7:25 PM
>>>>>>>>>> To: servicemix-users@geronimo.apache.org
>>>>>>>>>> Subject: Problem while invoking rule by using drools component
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>  
>>>>>>>>>>    Iam having the following setup
>>>>>>>>>>
>>>>>>>>>> JMS queue(Consumer)-->eip:Content Based
>>>>>>>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule
>>>>>>>>>> base)
>>>>>>>>>>
>>>>>>>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>>>>>>>
>>>>>>>>>>       <eip:routing-rule>
>>>>>>>>>>         <eip:predicate>
>>>>>>>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>>>>>>>> namespaceContext="#nsContext" />
>>>>>>>>>>         </eip:predicate>
>>>>>>>>>>         <eip:target>
>>>>>>>>>>           <eip:exchange-target service="bescocr:myDroolsService"
>>>>>>>>>> />
>>>>>>>>>>         </eip:target>
>>>>>>>>>>       </eip:routing-rule>
>>>>>>>>>>
>>>>>>>>>> xbean.xml for DroolsComponent(SU) is
>>>>>>>>>>
>>>>>>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>>>>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>>>>>>>> <drools:endpoint
>>>>>>>>>>      service="bescocr:myDroolsService"
>>>>>>>>>>      endpoint="endpoint"
>>>>>>>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>>>>>>>> </beans>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> routing.drl is
>>>>>>>>>>
>>>>>>>>>> package org.apache.servicemix.drools
>>>>>>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>>>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>>>>>>
>>>>>>>>>> rule "Route to tap1"
>>>>>>>>>>         when
>>>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in
>>>>>>>>>> !=
>>>>>>>>>> null
>>>>>>>>>> )
>>>>>>>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>>>>>>>         then
>>>>>>>>>>                 jbi.route( "bescocr::tap1" );
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>> rule "Route to tap2"
>>>>>>>>>>         when
>>>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in
>>>>>>>>>> !=
>>>>>>>>>> null
>>>>>>>>>> )
>>>>>>>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>>>>>>>         then
>>>>>>>>>>                 jbi.route( "bescocr::tap2" );
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> with the above setup iam getting the following exception "for
>>>>>>>>>> service:
>>>>>>>>>> null
>>>>>>>>>> and interface: null" the exception is as follows, do i need to set
>>>>>>>>>> something
>>>>>>>>>> else in xbean.xml?
>>>>>>>>>>
>>>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>>>> exchange:
>>>>>>>>>> InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>>>> va:19)
>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>> ERROR - DroolsComponent                - Error processing exchange
>>>>>>>>>> InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>>>>>>>   endpoint: endpoint
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ]
>>>>>>>>>> org.drools.spi.ConsequenceException:
>>>>>>>>>> javax.jbi.messaging.MessagingException:
>>>>>>>>>> Could not find route for exchange: InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>> Caused by: javax.jbi.messaging.MessagingException: Could not find
>>>>>>>>>> route
>>>>>>>>>> for
>>>>>>>>>> exchange: InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>>>> va:19)
>>>>>>>>>>         ... 16 more
>>>>>>>>>> ERROR - JmsComponent                   - Error processing exchange
>>>>>>>>>> InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>>>>>>>   status: Error
>>>>>>>>>>   role: consumer
>>>>>>>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>>>>>>>   endpoint: tap
>>>>>>>>>>   in: <My Message>
>>>>>>>>>>   error: org.drools.spi.ConsequenceException:
>>>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>>>> exchange:
>>>>>>>>>> InOnly[
>>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>>   status: Active
>>>>>>>>>>   role: provider
>>>>>>>>>>   in: <My Message>
>>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>> ]
>>>>>>>>>> java.lang.UnsupportedOperationException: A destination must be
>>>>>>>>>> specified.
>>>>>>>>>>         at
>>>>>>>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>> ERROR - JmsComponent                   - Error setting exchange
>>>>>>>>>> status
>>>>>>>>>> to
>>>>>>>>>> ERROR
>>>>>>>>>> javax.jbi.messaging.MessagingException: illegal call to send /
>>>>>>>>>> sendSync
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>>         at
>>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>>         at
>>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> View this message in context:
>>>>>>>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>>>>>>>> Sent from the ServiceMix - User mailing list archive at
>>>>>>>>>> Nabble.com.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> The information contained in this electronic message and any
>>>>>>>>>> attachments
>>>>>>>>>> to this message are intended for the exclusive use of the
>>>>>>>>>> addressee(s)
>>>>>>>>>> and
>>>>>>>>>> may contain proprietary, confidential or privileged information.
>>>>>>>>>> If
>>>>>>>>>> you
>>>>>>>>>> are not the intended recipient, you should not disseminate,
>>>>>>>>>> distribute
>>>>>>>>>> or
>>>>>>>>>> copy this e-mail. Please notify the sender immediately and destroy
>>>>>>>>>> all
>>>>>>>>>> copies of this message and any attachments. 
>>>>>>>>>>
>>>>>>>>>> WARNING: Computer viruses can be transmitted via email. The
>>>>>>>>>> recipient
>>>>>>>>>> should check this email and any attachments for the presence of
>>>>>>>>>> viruses.
>>>>>>>>>> The company accepts no liability for any damage caused by any
>>>>>>>>>> virus
>>>>>>>>>> transmitted by this email.
>>>>>>>>>>  
>>>>>>>>>> www.wipro.com
>>>>>>>>>>
>>>>>>>>>>         
>>>>>>>>>>             
>>>>>>>>>>                 
>>>>>>>>>>                     
>>>>>>>>     
>>>>>>>>         
>>>>>>>>             
>>>>>>>>                 
>>>>>>>   
>>>>>>>       
>>>>>>>           
>>>>>>>               
>>>>>>     
>>>>>>         
>>>>>>             
>>>>>   
>>>>>       
>>>>>           
>>>>     
>>>>         
>>>   
>>>       
>>     
>
>   

Re: Problem while invoking rule by using drools component

Posted by Arif Mohd <ar...@wipro.com>.
No, still iam getting the same exception
Now my rule is like this
rule "Route to tap1"
	when
		me : Exchange( status == Exchange.ACTIVE, in : in != null )
		eval( in.xpath("$org.apache.servicemix.senderEndpoint='cbr1'") ) 
	then
jbi.route( "service:http://intel.com/bescocr_031807/tap1" );
end

i tried to give
in.getProperty("org.apache.servicemix.senderEndpoint")='cbr1'

but even this doesn't work

Gert Vanthienen wrote:
> 
> Arif,
> 
> Sorry about the confusion with the syntax, there was an error in one of 
> my previous posts. I think $org.apache.servicemix.sendEndpoint (without 
> the curly braces) should work fine...
> 
> Gert
> 
> Arif Mohd wrote:
>> Hi gert,
>>
>>  i have given like this
>>
>> rule "Route to tap1"
>> 	when
>> 		me : Exchange( status == Exchange.ACTIVE, in : in != null )
>> 		eval( in.xpath("${org.apache.servicemix.senderEndpoint}='cbr1'") )
>>
>> 	then
>>                               jbi.route(
>> "service:http://xxx.com/bescocr_031807/tap1" );
>> end
>>
>> But iam getting the following exception
>> As of my understanding this xpath expression will be evaluated over the
>> message content, but in message content where we will have
>> "org.apache.servicemix.senderEndpoint" iam bit confused please help me
>> out
>> in this regard.
>>
>>
>> ERROR - DroolsComponent                - Error processing exchange
>> InOnly[
>>   id: ID:yyyy
>>   status: Active
>>   role: provider
>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>   endpoint: endpoint
>>   in: <My Message>
>> ]
>> org.drools.RuntimeDroolsException:
>> javax.jbi.messaging.MessagingException:
>> javax.xml.xpath.XPathExpressionException
>>         at org.drools.rule.EvalCondition.isAllowed(Unknown Source)
>>         at org.drools.reteoo.EvalConditionNode.assertTuple(Unknown
>> Source)
>>         at
>> org.drools.reteoo.LeftInputAdapterNode.createAndAssertTuple(Unknown
>> Source)
>>         at org.drools.reteoo.LeftInputAdapterNode.assertObject(Unknown
>> Source)
>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>> Source)
>>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>> Source)
>>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
>> Source)
>>         at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source)
>>         at org.drools.reteoo.Rete.assertObject(Unknown Source)
>>         at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source)
>>         at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown
>> Source)
>>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
>> Source)
>>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
>> Source)
>>         at
>> org.apache.servicemix.drools.model.JbiHelper.<init>(JbiHelper.java:57)
>>         at
>> org.apache.servicemix.drools.DroolsEndpoint.populateWorkingMemory(DroolsEndpoint.java:159)
>>         at
>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:149)
>>         at
>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>         at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>         at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>         at
>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>         at java.lang.Thread.run(Thread.java:595)
>> Caused by: javax.jbi.messaging.MessagingException:
>> javax.xml.xpath.XPathExpressionException
>>         at
>> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:106)
>>         at
>> org.apache.servicemix.drools.model.Message.xpath(Message.java:54)
>>         at
>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.eval0(Rule_Route_to_tap1_0.java:8)
>>         at
>> org.apache.servicemix.drools.Rule_Route_to_tap1_0Eval0Invoker.evaluate(Rule_Route_to_tap1_0Eval0Invoker.java:19)
>>         ... 29 more
>> Caused by: javax.xml.xpath.XPathExpressionException
>>         at
>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:191)
>>         at
>> org.apache.servicemix.expression.JAXPBooleanXPathExpression.evaluateXPath(JAXPBooleanXPathExpression.java:39)
>>         at
>> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:99)
>>         ... 32 more
>> Caused by: javax.xml.transform.TransformerException: Unknown error in
>> XPath.
>>         at
>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:296)
>>         at
>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:234)
>>         at
>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:123)
>>         at
>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97)
>>         at
>> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178)
>>         ... 34 more
>> Caused by: java.lang.NullPointerException
>>         at
>> org.apache.servicemix.expression.MessageVariableResolver.resolveVariable(MessageVariableResolver.java:63)
>>         at
>> com.sun.org.apache.xpath.internal.jaxp.JAXPVariableStack.getVariableOrParam(JAXPVariableStack.java:60)
>>         at
>> com.sun.org.apache.xpath.internal.operations.Variable.execute(Variable.java:213)
>>         at
>> com.sun.org.apache.xpath.internal.operations.Operation.execute(Operation.java:106)
>>         at
>> com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:268)
>>         ... 38 more
>>
>> Gert Vanthienen wrote:
>>   
>>> Arif Mohd,
>>>
>>>
>>> Doesn't the same syntax also works with servicemix-drools?  Something
>>> like
>>>     eval( in.xpath("$org.apache.servicemix.senderEndpoint ...") )
>>>
>>> The most convenient way to create your own Auditor by extending 
>>> ServiceMix's AbstractAuditor.  Secondly, you have to register your 
>>> auditor in the <sm:services/> section in conf/servicemix.xml.  From that 
>>> moment on, every message exchange that flows through the ESB, will 
>>> trigger your Auditor's exchangeSent() method, so this allows you to do 
>>> logging, archiving, ...
>>>
>>>
>>> Gert
>>>
>>>
>>> Arif Mohd wrote:
>>>     
>>>> Hi Gert,
>>>>   Firstly i want to know the sender endpoint from drools component(i.e,
>>>> i
>>>> want to know how to write a rule for determining sender endpoint)
>>>>
>>>> Secondly you are talking about message auditor, could you please
>>>> elobarate
>>>> how to do this? if possible with example.
>>>>
>>>>
>>>> Gert Vanthienen wrote:
>>>>   
>>>>       
>>>>> Arif Mohd,
>>>>>
>>>>>
>>>>> I think this is possible if you use the 
>>>>> ${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
>>>>> expressions to determine the sender endpoint.  However, if you use the 
>>>>> tap's for debugging purposes, I would suggest you build a message 
>>>>> auditor that logs the messages somehow (whatever is done by your 
>>>>> wiretaps right now).  This way, if you do not need the logging, you 
>>>>> simply disable the auditor in your ServiceMix configuration. 
>>>>>
>>>>> This would also allow you to remove all debugging configuration from 
>>>>> your SA, so it only contains real routing/service configuration.  This 
>>>>> improves the maintainability/readability of your configuration a lot 
>>>>> (recently done that for one of my own projects, which also had
>>>>> wiretaps 
>>>>> all over...)
>>>>>
>>>>>
>>>>> Gert
>>>>>
>>>>> Arif Mohd wrote:
>>>>>     
>>>>>         
>>>>>> Thank you gert,
>>>>>>    1) Iam able to call my rules now without any error.
>>>>>>    2) The example i was using is simply routing a message based on
>>>>>> the
>>>>>> content of message, which can be easily done with Content Based
>>>>>> Router
>>>>>>    Now i want to do routing based on the source component of the
>>>>>> message
>>>>>> from where the message is coming i.e, i want to remove the tap's(used
>>>>>> for
>>>>>> debugging) at runtime using drools.
>>>>>>
>>>>>> My component setup is
>>>>>>
>>>>>>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
>>>>>> Router-->eip:Tap2--->eip:Transformer
>>>>>>
>>>>>> Now i want to enable/disable Tap1 and Tap2 during runtime by using
>>>>>> drools,
>>>>>> for that purpose i planned to have my component setup as follows
>>>>>>
>>>>>>    JMS
>>>>>> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
>>>>>> Based
>>>>>> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>>>>>>
>>>>>> the logic in rules files should be as follows
>>>>>>
>>>>>> if source component is JMS queue, route to Tap1
>>>>>> if source component is Tap1, route to Content based router
>>>>>> if source component is ContentBaseRouter, route to Tap2
>>>>>> if source component is Tap2, route to Transformer
>>>>>>
>>>>>>
>>>>>> How can i write this kind of rules,please help me in this regard.
>>>>>> Also let me know is it a feasible way of adding/removing components
>>>>>> logically?
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Gert Vanthienen wrote:
>>>>>>   
>>>>>>       
>>>>>>           
>>>>>>> Arif,
>>>>>>>
>>>>>>>
>>>>>>> You can find a description on how to form this kind of URIs on 
>>>>>>> http://incubator.apache.org/servicemix/uris.html.
>>>>>>>
>>>>>>> If you think the URI is correct but still have these 'Cannot find
>>>>>>> route 
>>>>>>> to ...' errors, you can use a JMX console to verify which endpoints
>>>>>>> are 
>>>>>>> actually available on the ESB.  I think your service URI contained
>>>>>>> the 
>>>>>>> endpoint name, where it should only hold the service name.
>>>>>>>
>>>>>>>
>>>>>>> Gert
>>>>>>>
>>>>>>> Arif Mohd wrote:
>>>>>>>     
>>>>>>>         
>>>>>>>             
>>>>>>>> Hi Rabi,
>>>>>>>>
>>>>>>>>     I didn't understand this concept of giving service name as
>>>>>>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not
>>>>>>>> working
>>>>>>>>
>>>>>>>>    Can you please elobarate what is the meaning of the above
>>>>>>>> statement,
>>>>>>>> i
>>>>>>>> agree that previously i have missed to preceede the service name
>>>>>>>> with
>>>>>>>> namespace i.e, i should have given like
>>>>>>>>
>>>>>>>> jbi.route( "service:bescocr:tap1" );
>>>>>>>>
>>>>>>>> But even the above statement is not working
>>>>>>>>
>>>>>>>>
>>>>>>>> rabi wrote:
>>>>>>>>       
>>>>>>>>           
>>>>>>>>               
>>>>>>>>> in your routing.drl replace
>>>>>>>>>  
>>>>>>>>>  jbi.route( "bescocr::tap1" ); with
>>>>>>>>>  
>>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>>> /tap1");
>>>>>>>>>  
>>>>>>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>>>>>>
>>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>>> /tap2");
>>>>>>>>>  
>>>>>>>>> Regards, 
>>>>>>>>> Rabi Mishra 
>>>>>>>>> http://rabisblog.blogspot.com/
>>>>>>>>>
>>>>>>>>> ________________________________
>>>>>>>>>
>>>>>>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>>>>>>> Sent: Wed 6/20/2007 7:25 PM
>>>>>>>>> To: servicemix-users@geronimo.apache.org
>>>>>>>>> Subject: Problem while invoking rule by using drools component
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>  
>>>>>>>>>    Iam having the following setup
>>>>>>>>>
>>>>>>>>> JMS queue(Consumer)-->eip:Content Based
>>>>>>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule
>>>>>>>>> base)
>>>>>>>>>
>>>>>>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>>>>>>
>>>>>>>>>       <eip:routing-rule>
>>>>>>>>>         <eip:predicate>
>>>>>>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>>>>>>> namespaceContext="#nsContext" />
>>>>>>>>>         </eip:predicate>
>>>>>>>>>         <eip:target>
>>>>>>>>>           <eip:exchange-target service="bescocr:myDroolsService"
>>>>>>>>> />
>>>>>>>>>         </eip:target>
>>>>>>>>>       </eip:routing-rule>
>>>>>>>>>
>>>>>>>>> xbean.xml for DroolsComponent(SU) is
>>>>>>>>>
>>>>>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>>>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>>>>>>> <drools:endpoint
>>>>>>>>>      service="bescocr:myDroolsService"
>>>>>>>>>      endpoint="endpoint"
>>>>>>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>>>>>>> </beans>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> routing.drl is
>>>>>>>>>
>>>>>>>>> package org.apache.servicemix.drools
>>>>>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>>>>>
>>>>>>>>> rule "Route to tap1"
>>>>>>>>>         when
>>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in
>>>>>>>>> !=
>>>>>>>>> null
>>>>>>>>> )
>>>>>>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>>>>>>         then
>>>>>>>>>                 jbi.route( "bescocr::tap1" );
>>>>>>>>> end
>>>>>>>>>
>>>>>>>>> rule "Route to tap2"
>>>>>>>>>         when
>>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in
>>>>>>>>> !=
>>>>>>>>> null
>>>>>>>>> )
>>>>>>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>>>>>>         then
>>>>>>>>>                 jbi.route( "bescocr::tap2" );
>>>>>>>>> end
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> with the above setup iam getting the following exception "for
>>>>>>>>> service:
>>>>>>>>> null
>>>>>>>>> and interface: null" the exception is as follows, do i need to set
>>>>>>>>> something
>>>>>>>>> else in xbean.xml?
>>>>>>>>>
>>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>>> exchange:
>>>>>>>>> InOnly[
>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>   status: Active
>>>>>>>>>   role: provider
>>>>>>>>>   in: <My Message>
>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>>> va:19)
>>>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>>> Source)
>>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>>> Source)
>>>>>>>>>         at
>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>> Source)
>>>>>>>>>         at
>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>> Source)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>         at
>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>         at
>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>> ERROR - DroolsComponent                - Error processing exchange
>>>>>>>>> InOnly[
>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>>>>>>   status: Active
>>>>>>>>>   role: provider
>>>>>>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>>>>>>   endpoint: endpoint
>>>>>>>>>   in: <My Message>
>>>>>>>>> ]
>>>>>>>>> org.drools.spi.ConsequenceException:
>>>>>>>>> javax.jbi.messaging.MessagingException:
>>>>>>>>> Could not find route for exchange: InOnly[
>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>   status: Active
>>>>>>>>>   role: provider
>>>>>>>>>   in: <My Message>
>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>>> Source)
>>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>>> Source)
>>>>>>>>>         at
>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>> Source)
>>>>>>>>>         at
>>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>>> Source)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>         at
>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>         at
>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>> Caused by: javax.jbi.messaging.MessagingException: Could not find
>>>>>>>>> route
>>>>>>>>> for
>>>>>>>>> exchange: InOnly[
>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>   status: Active
>>>>>>>>>   role: provider
>>>>>>>>>   in: <My Message>
>>>>>>>>> ] for service: null and interface: null
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>>> va:19)
>>>>>>>>>         ... 16 more
>>>>>>>>> ERROR - JmsComponent                   - Error processing exchange
>>>>>>>>> InOnly[
>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>>>>>>   status: Error
>>>>>>>>>   role: consumer
>>>>>>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>>>>>>   endpoint: tap
>>>>>>>>>   in: <My Message>
>>>>>>>>>   error: org.drools.spi.ConsequenceException:
>>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>>> exchange:
>>>>>>>>> InOnly[
>>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>>   status: Active
>>>>>>>>>   role: provider
>>>>>>>>>   in: <My Message>
>>>>>>>>> ] for service: null and interface: null
>>>>>>>>> ]
>>>>>>>>> java.lang.UnsupportedOperationException: A destination must be
>>>>>>>>> specified.
>>>>>>>>>         at
>>>>>>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>>>>>>         at
>>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>>>>>>         at
>>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>         at
>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>         at
>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>> ERROR - JmsComponent                   - Error setting exchange
>>>>>>>>> status
>>>>>>>>> to
>>>>>>>>> ERROR
>>>>>>>>> javax.jbi.messaging.MessagingException: illegal call to send /
>>>>>>>>> sendSync
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>>         at
>>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>         at
>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>>         at
>>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> View this message in context:
>>>>>>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>>>>>>> Sent from the ServiceMix - User mailing list archive at
>>>>>>>>> Nabble.com.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> The information contained in this electronic message and any
>>>>>>>>> attachments
>>>>>>>>> to this message are intended for the exclusive use of the
>>>>>>>>> addressee(s)
>>>>>>>>> and
>>>>>>>>> may contain proprietary, confidential or privileged information.
>>>>>>>>> If
>>>>>>>>> you
>>>>>>>>> are not the intended recipient, you should not disseminate,
>>>>>>>>> distribute
>>>>>>>>> or
>>>>>>>>> copy this e-mail. Please notify the sender immediately and destroy
>>>>>>>>> all
>>>>>>>>> copies of this message and any attachments. 
>>>>>>>>>
>>>>>>>>> WARNING: Computer viruses can be transmitted via email. The
>>>>>>>>> recipient
>>>>>>>>> should check this email and any attachments for the presence of
>>>>>>>>> viruses.
>>>>>>>>> The company accepts no liability for any damage caused by any
>>>>>>>>> virus
>>>>>>>>> transmitted by this email.
>>>>>>>>>  
>>>>>>>>> www.wipro.com
>>>>>>>>>
>>>>>>>>>         
>>>>>>>>>             
>>>>>>>>>                 
>>>>>>>     
>>>>>>>         
>>>>>>>             
>>>>>>   
>>>>>>       
>>>>>>           
>>>>>     
>>>>>         
>>>>   
>>>>       
>>>
>>>     
>>
>>   
> 
> 

-- 
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11559123
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problem while invoking rule by using drools component

Posted by Gert Vanthienen <ge...@skynet.be>.
Arif,

Sorry about the confusion with the syntax, there was an error in one of 
my previous posts. I think $org.apache.servicemix.sendEndpoint (without 
the curly braces) should work fine...

Gert

Arif Mohd wrote:
> Hi gert,
>
>  i have given like this
>
> rule "Route to tap1"
> 	when
> 		me : Exchange( status == Exchange.ACTIVE, in : in != null )
> 		eval( in.xpath("${org.apache.servicemix.senderEndpoint}='cbr1'") )
>
> 	then
>                               jbi.route(
> "service:http://xxx.com/bescocr_031807/tap1" );
> end
>
> But iam getting the following exception
> As of my understanding this xpath expression will be evaluated over the
> message content, but in message content where we will have
> "org.apache.servicemix.senderEndpoint" iam bit confused please help me out
> in this regard.
>
>
> ERROR - DroolsComponent                - Error processing exchange InOnly[
>   id: ID:yyyy
>   status: Active
>   role: provider
>   service: {http://xxx.com/bescocr_031807}myDroolsService
>   endpoint: endpoint
>   in: <My Message>
> ]
> org.drools.RuntimeDroolsException: javax.jbi.messaging.MessagingException:
> javax.xml.xpath.XPathExpressionException
>         at org.drools.rule.EvalCondition.isAllowed(Unknown Source)
>         at org.drools.reteoo.EvalConditionNode.assertTuple(Unknown Source)
>         at
> org.drools.reteoo.LeftInputAdapterNode.createAndAssertTuple(Unknown Source)
>         at org.drools.reteoo.LeftInputAdapterNode.assertObject(Unknown
> Source)
>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
> Source)
>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
> Source)
>         at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
>         at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
> Source)
>         at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source)
>         at org.drools.reteoo.Rete.assertObject(Unknown Source)
>         at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source)
>         at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown
> Source)
>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
> Source)
>         at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
> Source)
>         at
> org.apache.servicemix.drools.model.JbiHelper.<init>(JbiHelper.java:57)
>         at
> org.apache.servicemix.drools.DroolsEndpoint.populateWorkingMemory(DroolsEndpoint.java:159)
>         at
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:149)
>         at
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>         at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>         at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.jbi.messaging.MessagingException:
> javax.xml.xpath.XPathExpressionException
>         at
> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:106)
>         at org.apache.servicemix.drools.model.Message.xpath(Message.java:54)
>         at
> org.apache.servicemix.drools.Rule_Route_to_tap1_0.eval0(Rule_Route_to_tap1_0.java:8)
>         at
> org.apache.servicemix.drools.Rule_Route_to_tap1_0Eval0Invoker.evaluate(Rule_Route_to_tap1_0Eval0Invoker.java:19)
>         ... 29 more
> Caused by: javax.xml.xpath.XPathExpressionException
>         at
> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:191)
>         at
> org.apache.servicemix.expression.JAXPBooleanXPathExpression.evaluateXPath(JAXPBooleanXPathExpression.java:39)
>         at
> org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:99)
>         ... 32 more
> Caused by: javax.xml.transform.TransformerException: Unknown error in XPath.
>         at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:296)
>         at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:234)
>         at
> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:123)
>         at
> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97)
>         at
> com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178)
>         ... 34 more
> Caused by: java.lang.NullPointerException
>         at
> org.apache.servicemix.expression.MessageVariableResolver.resolveVariable(MessageVariableResolver.java:63)
>         at
> com.sun.org.apache.xpath.internal.jaxp.JAXPVariableStack.getVariableOrParam(JAXPVariableStack.java:60)
>         at
> com.sun.org.apache.xpath.internal.operations.Variable.execute(Variable.java:213)
>         at
> com.sun.org.apache.xpath.internal.operations.Operation.execute(Operation.java:106)
>         at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:268)
>         ... 38 more
>
> Gert Vanthienen wrote:
>   
>> Arif Mohd,
>>
>>
>> Doesn't the same syntax also works with servicemix-drools?  Something like
>>     eval( in.xpath("$org.apache.servicemix.senderEndpoint ...") )
>>
>> The most convenient way to create your own Auditor by extending 
>> ServiceMix's AbstractAuditor.  Secondly, you have to register your 
>> auditor in the <sm:services/> section in conf/servicemix.xml.  From that 
>> moment on, every message exchange that flows through the ESB, will 
>> trigger your Auditor's exchangeSent() method, so this allows you to do 
>> logging, archiving, ...
>>
>>
>> Gert
>>
>>
>> Arif Mohd wrote:
>>     
>>> Hi Gert,
>>>   Firstly i want to know the sender endpoint from drools component(i.e, i
>>> want to know how to write a rule for determining sender endpoint)
>>>
>>> Secondly you are talking about message auditor, could you please
>>> elobarate
>>> how to do this? if possible with example.
>>>
>>>
>>> Gert Vanthienen wrote:
>>>   
>>>       
>>>> Arif Mohd,
>>>>
>>>>
>>>> I think this is possible if you use the 
>>>> ${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
>>>> expressions to determine the sender endpoint.  However, if you use the 
>>>> tap's for debugging purposes, I would suggest you build a message 
>>>> auditor that logs the messages somehow (whatever is done by your 
>>>> wiretaps right now).  This way, if you do not need the logging, you 
>>>> simply disable the auditor in your ServiceMix configuration. 
>>>>
>>>> This would also allow you to remove all debugging configuration from 
>>>> your SA, so it only contains real routing/service configuration.  This 
>>>> improves the maintainability/readability of your configuration a lot 
>>>> (recently done that for one of my own projects, which also had wiretaps 
>>>> all over...)
>>>>
>>>>
>>>> Gert
>>>>
>>>> Arif Mohd wrote:
>>>>     
>>>>         
>>>>> Thank you gert,
>>>>>    1) Iam able to call my rules now without any error.
>>>>>    2) The example i was using is simply routing a message based on the
>>>>> content of message, which can be easily done with Content Based Router
>>>>>    Now i want to do routing based on the source component of the
>>>>> message
>>>>> from where the message is coming i.e, i want to remove the tap's(used
>>>>> for
>>>>> debugging) at runtime using drools.
>>>>>
>>>>> My component setup is
>>>>>
>>>>>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
>>>>> Router-->eip:Tap2--->eip:Transformer
>>>>>
>>>>> Now i want to enable/disable Tap1 and Tap2 during runtime by using
>>>>> drools,
>>>>> for that purpose i planned to have my component setup as follows
>>>>>
>>>>>    JMS
>>>>> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
>>>>> Based
>>>>> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>>>>>
>>>>> the logic in rules files should be as follows
>>>>>
>>>>> if source component is JMS queue, route to Tap1
>>>>> if source component is Tap1, route to Content based router
>>>>> if source component is ContentBaseRouter, route to Tap2
>>>>> if source component is Tap2, route to Transformer
>>>>>
>>>>>
>>>>> How can i write this kind of rules,please help me in this regard.
>>>>> Also let me know is it a feasible way of adding/removing components
>>>>> logically?
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Gert Vanthienen wrote:
>>>>>   
>>>>>       
>>>>>           
>>>>>> Arif,
>>>>>>
>>>>>>
>>>>>> You can find a description on how to form this kind of URIs on 
>>>>>> http://incubator.apache.org/servicemix/uris.html.
>>>>>>
>>>>>> If you think the URI is correct but still have these 'Cannot find
>>>>>> route 
>>>>>> to ...' errors, you can use a JMX console to verify which endpoints
>>>>>> are 
>>>>>> actually available on the ESB.  I think your service URI contained the 
>>>>>> endpoint name, where it should only hold the service name.
>>>>>>
>>>>>>
>>>>>> Gert
>>>>>>
>>>>>> Arif Mohd wrote:
>>>>>>     
>>>>>>         
>>>>>>             
>>>>>>> Hi Rabi,
>>>>>>>
>>>>>>>     I didn't understand this concept of giving service name as
>>>>>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not
>>>>>>> working
>>>>>>>
>>>>>>>    Can you please elobarate what is the meaning of the above
>>>>>>> statement,
>>>>>>> i
>>>>>>> agree that previously i have missed to preceede the service name with
>>>>>>> namespace i.e, i should have given like
>>>>>>>
>>>>>>> jbi.route( "service:bescocr:tap1" );
>>>>>>>
>>>>>>> But even the above statement is not working
>>>>>>>
>>>>>>>
>>>>>>> rabi wrote:
>>>>>>>       
>>>>>>>           
>>>>>>>               
>>>>>>>> in your routing.drl replace
>>>>>>>>  
>>>>>>>>  jbi.route( "bescocr::tap1" ); with
>>>>>>>>  
>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>> /tap1");
>>>>>>>>  
>>>>>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>>>>>
>>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>>> /tap2");
>>>>>>>>  
>>>>>>>> Regards, 
>>>>>>>> Rabi Mishra 
>>>>>>>> http://rabisblog.blogspot.com/
>>>>>>>>
>>>>>>>> ________________________________
>>>>>>>>
>>>>>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>>>>>> Sent: Wed 6/20/2007 7:25 PM
>>>>>>>> To: servicemix-users@geronimo.apache.org
>>>>>>>> Subject: Problem while invoking rule by using drools component
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>  
>>>>>>>>    Iam having the following setup
>>>>>>>>
>>>>>>>> JMS queue(Consumer)-->eip:Content Based
>>>>>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule
>>>>>>>> base)
>>>>>>>>
>>>>>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>>>>>
>>>>>>>>       <eip:routing-rule>
>>>>>>>>         <eip:predicate>
>>>>>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>>>>>> namespaceContext="#nsContext" />
>>>>>>>>         </eip:predicate>
>>>>>>>>         <eip:target>
>>>>>>>>           <eip:exchange-target service="bescocr:myDroolsService" />
>>>>>>>>         </eip:target>
>>>>>>>>       </eip:routing-rule>
>>>>>>>>
>>>>>>>> xbean.xml for DroolsComponent(SU) is
>>>>>>>>
>>>>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>>>>>> <drools:endpoint
>>>>>>>>      service="bescocr:myDroolsService"
>>>>>>>>      endpoint="endpoint"
>>>>>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>>>>>> </beans>
>>>>>>>>
>>>>>>>>
>>>>>>>> routing.drl is
>>>>>>>>
>>>>>>>> package org.apache.servicemix.drools
>>>>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>>>>
>>>>>>>> rule "Route to tap1"
>>>>>>>>         when
>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>>>>>> null
>>>>>>>> )
>>>>>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>>>>>         then
>>>>>>>>                 jbi.route( "bescocr::tap1" );
>>>>>>>> end
>>>>>>>>
>>>>>>>> rule "Route to tap2"
>>>>>>>>         when
>>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>>>>>> null
>>>>>>>> )
>>>>>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>>>>>         then
>>>>>>>>                 jbi.route( "bescocr::tap2" );
>>>>>>>> end
>>>>>>>>
>>>>>>>>
>>>>>>>> with the above setup iam getting the following exception "for
>>>>>>>> service:
>>>>>>>> null
>>>>>>>> and interface: null" the exception is as follows, do i need to set
>>>>>>>> something
>>>>>>>> else in xbean.xml?
>>>>>>>>
>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>> exchange:
>>>>>>>> InOnly[
>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>   status: Active
>>>>>>>>   role: provider
>>>>>>>>   in: <My Message>
>>>>>>>> ] for service: null and interface: null
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>> va:19)
>>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>> Source)
>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>> Source)
>>>>>>>>         at
>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>> Source)
>>>>>>>>         at
>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>> Source)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>         at
>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>         at
>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>> ERROR - DroolsComponent                - Error processing exchange
>>>>>>>> InOnly[
>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>>>>>   status: Active
>>>>>>>>   role: provider
>>>>>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>>>>>   endpoint: endpoint
>>>>>>>>   in: <My Message>
>>>>>>>> ]
>>>>>>>> org.drools.spi.ConsequenceException:
>>>>>>>> javax.jbi.messaging.MessagingException:
>>>>>>>> Could not find route for exchange: InOnly[
>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>   status: Active
>>>>>>>>   role: provider
>>>>>>>>   in: <My Message>
>>>>>>>> ] for service: null and interface: null
>>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>>> Source)
>>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>>> Source)
>>>>>>>>         at
>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>> Source)
>>>>>>>>         at
>>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>>> Source)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>         at
>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>         at
>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>> Caused by: javax.jbi.messaging.MessagingException: Could not find
>>>>>>>> route
>>>>>>>> for
>>>>>>>> exchange: InOnly[
>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>   status: Active
>>>>>>>>   role: provider
>>>>>>>>   in: <My Message>
>>>>>>>> ] for service: null and interface: null
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>>> va:19)
>>>>>>>>         ... 16 more
>>>>>>>> ERROR - JmsComponent                   - Error processing exchange
>>>>>>>> InOnly[
>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>>>>>   status: Error
>>>>>>>>   role: consumer
>>>>>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>>>>>   endpoint: tap
>>>>>>>>   in: <My Message>
>>>>>>>>   error: org.drools.spi.ConsequenceException:
>>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>>> exchange:
>>>>>>>> InOnly[
>>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>>   status: Active
>>>>>>>>   role: provider
>>>>>>>>   in: <My Message>
>>>>>>>> ] for service: null and interface: null
>>>>>>>> ]
>>>>>>>> java.lang.UnsupportedOperationException: A destination must be
>>>>>>>> specified.
>>>>>>>>         at
>>>>>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>>>>>         at
>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>>>>>         at
>>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>         at
>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>         at
>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>> ERROR - JmsComponent                   - Error setting exchange
>>>>>>>> status
>>>>>>>> to
>>>>>>>> ERROR
>>>>>>>> javax.jbi.messaging.MessagingException: illegal call to send /
>>>>>>>> sendSync
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>>         at
>>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>         at
>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>>         at
>>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> View this message in context:
>>>>>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>>>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> The information contained in this electronic message and any
>>>>>>>> attachments
>>>>>>>> to this message are intended for the exclusive use of the
>>>>>>>> addressee(s)
>>>>>>>> and
>>>>>>>> may contain proprietary, confidential or privileged information. If
>>>>>>>> you
>>>>>>>> are not the intended recipient, you should not disseminate,
>>>>>>>> distribute
>>>>>>>> or
>>>>>>>> copy this e-mail. Please notify the sender immediately and destroy
>>>>>>>> all
>>>>>>>> copies of this message and any attachments. 
>>>>>>>>
>>>>>>>> WARNING: Computer viruses can be transmitted via email. The
>>>>>>>> recipient
>>>>>>>> should check this email and any attachments for the presence of
>>>>>>>> viruses.
>>>>>>>> The company accepts no liability for any damage caused by any virus
>>>>>>>> transmitted by this email.
>>>>>>>>  
>>>>>>>> www.wipro.com
>>>>>>>>
>>>>>>>>         
>>>>>>>>             
>>>>>>>>                 
>>>>>>     
>>>>>>         
>>>>>>             
>>>>>   
>>>>>       
>>>>>           
>>>>     
>>>>         
>>>   
>>>       
>>
>>     
>
>   

Re: Problem while invoking rule by using drools component

Posted by Arif Mohd <ar...@wipro.com>.
Hi gert,

 i have given like this

rule "Route to tap1"
	when
		me : Exchange( status == Exchange.ACTIVE, in : in != null )
		eval( in.xpath("${org.apache.servicemix.senderEndpoint}='cbr1'") )

	then
                              jbi.route(
"service:http://xxx.com/bescocr_031807/tap1" );
end

But iam getting the following exception
As of my understanding this xpath expression will be evaluated over the
message content, but in message content where we will have
"org.apache.servicemix.senderEndpoint" iam bit confused please help me out
in this regard.


ERROR - DroolsComponent                - Error processing exchange InOnly[
  id: ID:yyyy
  status: Active
  role: provider
  service: {http://xxx.com/bescocr_031807}myDroolsService
  endpoint: endpoint
  in: <My Message>
]
org.drools.RuntimeDroolsException: javax.jbi.messaging.MessagingException:
javax.xml.xpath.XPathExpressionException
        at org.drools.rule.EvalCondition.isAllowed(Unknown Source)
        at org.drools.reteoo.EvalConditionNode.assertTuple(Unknown Source)
        at
org.drools.reteoo.LeftInputAdapterNode.createAndAssertTuple(Unknown Source)
        at org.drools.reteoo.LeftInputAdapterNode.assertObject(Unknown
Source)
        at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
Source)
        at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
        at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
Source)
        at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
        at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown
Source)
        at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source)
        at org.drools.reteoo.Rete.assertObject(Unknown Source)
        at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source)
        at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown
Source)
        at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
Source)
        at org.drools.common.AbstractWorkingMemory.assertObject(Unknown
Source)
        at
org.apache.servicemix.drools.model.JbiHelper.<init>(JbiHelper.java:57)
        at
org.apache.servicemix.drools.DroolsEndpoint.populateWorkingMemory(DroolsEndpoint.java:159)
        at
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:149)
        at
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)
Caused by: javax.jbi.messaging.MessagingException:
javax.xml.xpath.XPathExpressionException
        at
org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:106)
        at org.apache.servicemix.drools.model.Message.xpath(Message.java:54)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0.eval0(Rule_Route_to_tap1_0.java:8)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0Eval0Invoker.evaluate(Rule_Route_to_tap1_0Eval0Invoker.java:19)
        ... 29 more
Caused by: javax.xml.xpath.XPathExpressionException
        at
com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:191)
        at
org.apache.servicemix.expression.JAXPBooleanXPathExpression.evaluateXPath(JAXPBooleanXPathExpression.java:39)
        at
org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:99)
        ... 32 more
Caused by: javax.xml.transform.TransformerException: Unknown error in XPath.
        at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:296)
        at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:234)
        at
com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:123)
        at
com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97)
        at
com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178)
        ... 34 more
Caused by: java.lang.NullPointerException
        at
org.apache.servicemix.expression.MessageVariableResolver.resolveVariable(MessageVariableResolver.java:63)
        at
com.sun.org.apache.xpath.internal.jaxp.JAXPVariableStack.getVariableOrParam(JAXPVariableStack.java:60)
        at
com.sun.org.apache.xpath.internal.operations.Variable.execute(Variable.java:213)
        at
com.sun.org.apache.xpath.internal.operations.Operation.execute(Operation.java:106)
        at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:268)
        ... 38 more

Gert Vanthienen wrote:
> 
> Arif Mohd,
> 
> 
> Doesn't the same syntax also works with servicemix-drools?  Something like
>     eval( in.xpath("$org.apache.servicemix.senderEndpoint ...") )
> 
> The most convenient way to create your own Auditor by extending 
> ServiceMix's AbstractAuditor.  Secondly, you have to register your 
> auditor in the <sm:services/> section in conf/servicemix.xml.  From that 
> moment on, every message exchange that flows through the ESB, will 
> trigger your Auditor's exchangeSent() method, so this allows you to do 
> logging, archiving, ...
> 
> 
> Gert
> 
> 
> Arif Mohd wrote:
>> Hi Gert,
>>   Firstly i want to know the sender endpoint from drools component(i.e, i
>> want to know how to write a rule for determining sender endpoint)
>>
>> Secondly you are talking about message auditor, could you please
>> elobarate
>> how to do this? if possible with example.
>>
>>
>> Gert Vanthienen wrote:
>>   
>>> Arif Mohd,
>>>
>>>
>>> I think this is possible if you use the 
>>> ${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
>>> expressions to determine the sender endpoint.  However, if you use the 
>>> tap's for debugging purposes, I would suggest you build a message 
>>> auditor that logs the messages somehow (whatever is done by your 
>>> wiretaps right now).  This way, if you do not need the logging, you 
>>> simply disable the auditor in your ServiceMix configuration. 
>>>
>>> This would also allow you to remove all debugging configuration from 
>>> your SA, so it only contains real routing/service configuration.  This 
>>> improves the maintainability/readability of your configuration a lot 
>>> (recently done that for one of my own projects, which also had wiretaps 
>>> all over...)
>>>
>>>
>>> Gert
>>>
>>> Arif Mohd wrote:
>>>     
>>>> Thank you gert,
>>>>    1) Iam able to call my rules now without any error.
>>>>    2) The example i was using is simply routing a message based on the
>>>> content of message, which can be easily done with Content Based Router
>>>>    Now i want to do routing based on the source component of the
>>>> message
>>>> from where the message is coming i.e, i want to remove the tap's(used
>>>> for
>>>> debugging) at runtime using drools.
>>>>
>>>> My component setup is
>>>>
>>>>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
>>>> Router-->eip:Tap2--->eip:Transformer
>>>>
>>>> Now i want to enable/disable Tap1 and Tap2 during runtime by using
>>>> drools,
>>>> for that purpose i planned to have my component setup as follows
>>>>
>>>>    JMS
>>>> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
>>>> Based
>>>> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>>>>
>>>> the logic in rules files should be as follows
>>>>
>>>> if source component is JMS queue, route to Tap1
>>>> if source component is Tap1, route to Content based router
>>>> if source component is ContentBaseRouter, route to Tap2
>>>> if source component is Tap2, route to Transformer
>>>>
>>>>
>>>> How can i write this kind of rules,please help me in this regard.
>>>> Also let me know is it a feasible way of adding/removing components
>>>> logically?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Gert Vanthienen wrote:
>>>>   
>>>>       
>>>>> Arif,
>>>>>
>>>>>
>>>>> You can find a description on how to form this kind of URIs on 
>>>>> http://incubator.apache.org/servicemix/uris.html.
>>>>>
>>>>> If you think the URI is correct but still have these 'Cannot find
>>>>> route 
>>>>> to ...' errors, you can use a JMX console to verify which endpoints
>>>>> are 
>>>>> actually available on the ESB.  I think your service URI contained the 
>>>>> endpoint name, where it should only hold the service name.
>>>>>
>>>>>
>>>>> Gert
>>>>>
>>>>> Arif Mohd wrote:
>>>>>     
>>>>>         
>>>>>> Hi Rabi,
>>>>>>
>>>>>>     I didn't understand this concept of giving service name as
>>>>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not
>>>>>> working
>>>>>>
>>>>>>    Can you please elobarate what is the meaning of the above
>>>>>> statement,
>>>>>> i
>>>>>> agree that previously i have missed to preceede the service name with
>>>>>> namespace i.e, i should have given like
>>>>>>
>>>>>> jbi.route( "service:bescocr:tap1" );
>>>>>>
>>>>>> But even the above statement is not working
>>>>>>
>>>>>>
>>>>>> rabi wrote:
>>>>>>       
>>>>>>           
>>>>>>> in your routing.drl replace
>>>>>>>  
>>>>>>>  jbi.route( "bescocr::tap1" ); with
>>>>>>>  
>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>> /tap1");
>>>>>>>  
>>>>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>>>>
>>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>>> /tap2");
>>>>>>>  
>>>>>>> Regards, 
>>>>>>> Rabi Mishra 
>>>>>>> http://rabisblog.blogspot.com/
>>>>>>>
>>>>>>> ________________________________
>>>>>>>
>>>>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>>>>> Sent: Wed 6/20/2007 7:25 PM
>>>>>>> To: servicemix-users@geronimo.apache.org
>>>>>>> Subject: Problem while invoking rule by using drools component
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Hi,
>>>>>>>  
>>>>>>>    Iam having the following setup
>>>>>>>
>>>>>>> JMS queue(Consumer)-->eip:Content Based
>>>>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule
>>>>>>> base)
>>>>>>>
>>>>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>>>>
>>>>>>>       <eip:routing-rule>
>>>>>>>         <eip:predicate>
>>>>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>>>>> namespaceContext="#nsContext" />
>>>>>>>         </eip:predicate>
>>>>>>>         <eip:target>
>>>>>>>           <eip:exchange-target service="bescocr:myDroolsService" />
>>>>>>>         </eip:target>
>>>>>>>       </eip:routing-rule>
>>>>>>>
>>>>>>> xbean.xml for DroolsComponent(SU) is
>>>>>>>
>>>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>>>>> <drools:endpoint
>>>>>>>      service="bescocr:myDroolsService"
>>>>>>>      endpoint="endpoint"
>>>>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>>>>> </beans>
>>>>>>>
>>>>>>>
>>>>>>> routing.drl is
>>>>>>>
>>>>>>> package org.apache.servicemix.drools
>>>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>>>
>>>>>>> rule "Route to tap1"
>>>>>>>         when
>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>>>>> null
>>>>>>> )
>>>>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>>>>         then
>>>>>>>                 jbi.route( "bescocr::tap1" );
>>>>>>> end
>>>>>>>
>>>>>>> rule "Route to tap2"
>>>>>>>         when
>>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>>>>> null
>>>>>>> )
>>>>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>>>>         then
>>>>>>>                 jbi.route( "bescocr::tap2" );
>>>>>>> end
>>>>>>>
>>>>>>>
>>>>>>> with the above setup iam getting the following exception "for
>>>>>>> service:
>>>>>>> null
>>>>>>> and interface: null" the exception is as follows, do i need to set
>>>>>>> something
>>>>>>> else in xbean.xml?
>>>>>>>
>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>> exchange:
>>>>>>> InOnly[
>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>   status: Active
>>>>>>>   role: provider
>>>>>>>   in: <My Message>
>>>>>>> ] for service: null and interface: null
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>> va:19)
>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>> Source)
>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>> Source)
>>>>>>>         at
>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>> Source)
>>>>>>>         at
>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>> Source)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>         at
>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>         at
>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>> ERROR - DroolsComponent                - Error processing exchange
>>>>>>> InOnly[
>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>>>>   status: Active
>>>>>>>   role: provider
>>>>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>>>>   endpoint: endpoint
>>>>>>>   in: <My Message>
>>>>>>> ]
>>>>>>> org.drools.spi.ConsequenceException:
>>>>>>> javax.jbi.messaging.MessagingException:
>>>>>>> Could not find route for exchange: InOnly[
>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>   status: Active
>>>>>>>   role: provider
>>>>>>>   in: <My Message>
>>>>>>> ] for service: null and interface: null
>>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>>> Source)
>>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>>> Source)
>>>>>>>         at
>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>> Source)
>>>>>>>         at
>>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>>> Source)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>         at
>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>         at
>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>> Caused by: javax.jbi.messaging.MessagingException: Could not find
>>>>>>> route
>>>>>>> for
>>>>>>> exchange: InOnly[
>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>   status: Active
>>>>>>>   role: provider
>>>>>>>   in: <My Message>
>>>>>>> ] for service: null and interface: null
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>>         at
>>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>>> va:19)
>>>>>>>         ... 16 more
>>>>>>> ERROR - JmsComponent                   - Error processing exchange
>>>>>>> InOnly[
>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>>>>   status: Error
>>>>>>>   role: consumer
>>>>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>>>>   endpoint: tap
>>>>>>>   in: <My Message>
>>>>>>>   error: org.drools.spi.ConsequenceException:
>>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>>> exchange:
>>>>>>> InOnly[
>>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>>   status: Active
>>>>>>>   role: provider
>>>>>>>   in: <My Message>
>>>>>>> ] for service: null and interface: null
>>>>>>> ]
>>>>>>> java.lang.UnsupportedOperationException: A destination must be
>>>>>>> specified.
>>>>>>>         at
>>>>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>>>>         at
>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>>>>         at
>>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>         at
>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>         at
>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>> ERROR - JmsComponent                   - Error setting exchange
>>>>>>> status
>>>>>>> to
>>>>>>> ERROR
>>>>>>> javax.jbi.messaging.MessagingException: illegal call to send /
>>>>>>> sendSync
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>>>>         at
>>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>>         at
>>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>         at
>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>>         at
>>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> View this message in context:
>>>>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> The information contained in this electronic message and any
>>>>>>> attachments
>>>>>>> to this message are intended for the exclusive use of the
>>>>>>> addressee(s)
>>>>>>> and
>>>>>>> may contain proprietary, confidential or privileged information. If
>>>>>>> you
>>>>>>> are not the intended recipient, you should not disseminate,
>>>>>>> distribute
>>>>>>> or
>>>>>>> copy this e-mail. Please notify the sender immediately and destroy
>>>>>>> all
>>>>>>> copies of this message and any attachments. 
>>>>>>>
>>>>>>> WARNING: Computer viruses can be transmitted via email. The
>>>>>>> recipient
>>>>>>> should check this email and any attachments for the presence of
>>>>>>> viruses.
>>>>>>> The company accepts no liability for any damage caused by any virus
>>>>>>> transmitted by this email.
>>>>>>>  
>>>>>>> www.wipro.com
>>>>>>>
>>>>>>>         
>>>>>>>             
>>>>>     
>>>>>         
>>>>   
>>>>       
>>>
>>>     
>>
>>   
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11558133
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problem while invoking rule by using drools component

Posted by Gert Vanthienen <ge...@skynet.be>.
Arif Mohd,


Doesn't the same syntax also works with servicemix-drools?  Something like
    eval( in.xpath("$org.apache.servicemix.senderEndpoint ...") )

The most convenient way to create your own Auditor by extending 
ServiceMix's AbstractAuditor.  Secondly, you have to register your 
auditor in the <sm:services/> section in conf/servicemix.xml.  From that 
moment on, every message exchange that flows through the ESB, will 
trigger your Auditor's exchangeSent() method, so this allows you to do 
logging, archiving, ...


Gert


Arif Mohd wrote:
> Hi Gert,
>   Firstly i want to know the sender endpoint from drools component(i.e, i
> want to know how to write a rule for determining sender endpoint)
>
> Secondly you are talking about message auditor, could you please elobarate
> how to do this? if possible with example.
>
>
> Gert Vanthienen wrote:
>   
>> Arif Mohd,
>>
>>
>> I think this is possible if you use the 
>> ${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
>> expressions to determine the sender endpoint.  However, if you use the 
>> tap's for debugging purposes, I would suggest you build a message 
>> auditor that logs the messages somehow (whatever is done by your 
>> wiretaps right now).  This way, if you do not need the logging, you 
>> simply disable the auditor in your ServiceMix configuration. 
>>
>> This would also allow you to remove all debugging configuration from 
>> your SA, so it only contains real routing/service configuration.  This 
>> improves the maintainability/readability of your configuration a lot 
>> (recently done that for one of my own projects, which also had wiretaps 
>> all over...)
>>
>>
>> Gert
>>
>> Arif Mohd wrote:
>>     
>>> Thank you gert,
>>>    1) Iam able to call my rules now without any error.
>>>    2) The example i was using is simply routing a message based on the
>>> content of message, which can be easily done with Content Based Router
>>>    Now i want to do routing based on the source component of the message
>>> from where the message is coming i.e, i want to remove the tap's(used for
>>> debugging) at runtime using drools.
>>>
>>> My component setup is
>>>
>>>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
>>> Router-->eip:Tap2--->eip:Transformer
>>>
>>> Now i want to enable/disable Tap1 and Tap2 during runtime by using
>>> drools,
>>> for that purpose i planned to have my component setup as follows
>>>
>>>    JMS
>>> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
>>> Based
>>> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>>>
>>> the logic in rules files should be as follows
>>>
>>> if source component is JMS queue, route to Tap1
>>> if source component is Tap1, route to Content based router
>>> if source component is ContentBaseRouter, route to Tap2
>>> if source component is Tap2, route to Transformer
>>>
>>>
>>> How can i write this kind of rules,please help me in this regard.
>>> Also let me know is it a feasible way of adding/removing components
>>> logically?
>>>
>>>
>>>
>>>
>>>
>>>
>>> Gert Vanthienen wrote:
>>>   
>>>       
>>>> Arif,
>>>>
>>>>
>>>> You can find a description on how to form this kind of URIs on 
>>>> http://incubator.apache.org/servicemix/uris.html.
>>>>
>>>> If you think the URI is correct but still have these 'Cannot find route 
>>>> to ...' errors, you can use a JMX console to verify which endpoints are 
>>>> actually available on the ESB.  I think your service URI contained the 
>>>> endpoint name, where it should only hold the service name.
>>>>
>>>>
>>>> Gert
>>>>
>>>> Arif Mohd wrote:
>>>>     
>>>>         
>>>>> Hi Rabi,
>>>>>
>>>>>     I didn't understand this concept of giving service name as
>>>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not
>>>>> working
>>>>>
>>>>>    Can you please elobarate what is the meaning of the above statement,
>>>>> i
>>>>> agree that previously i have missed to preceede the service name with
>>>>> namespace i.e, i should have given like
>>>>>
>>>>> jbi.route( "service:bescocr:tap1" );
>>>>>
>>>>> But even the above statement is not working
>>>>>
>>>>>
>>>>> rabi wrote:
>>>>>       
>>>>>           
>>>>>> in your routing.drl replace
>>>>>>  
>>>>>>  jbi.route( "bescocr::tap1" ); with
>>>>>>  
>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>> /tap1");
>>>>>>  
>>>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>>>
>>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>>> /tap2");
>>>>>>  
>>>>>> Regards, 
>>>>>> Rabi Mishra 
>>>>>> http://rabisblog.blogspot.com/
>>>>>>
>>>>>> ________________________________
>>>>>>
>>>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>>>> Sent: Wed 6/20/2007 7:25 PM
>>>>>> To: servicemix-users@geronimo.apache.org
>>>>>> Subject: Problem while invoking rule by using drools component
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>  
>>>>>>    Iam having the following setup
>>>>>>
>>>>>> JMS queue(Consumer)-->eip:Content Based
>>>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule
>>>>>> base)
>>>>>>
>>>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>>>
>>>>>>       <eip:routing-rule>
>>>>>>         <eip:predicate>
>>>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>>>> namespaceContext="#nsContext" />
>>>>>>         </eip:predicate>
>>>>>>         <eip:target>
>>>>>>           <eip:exchange-target service="bescocr:myDroolsService" />
>>>>>>         </eip:target>
>>>>>>       </eip:routing-rule>
>>>>>>
>>>>>> xbean.xml for DroolsComponent(SU) is
>>>>>>
>>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>>>> <drools:endpoint
>>>>>>      service="bescocr:myDroolsService"
>>>>>>      endpoint="endpoint"
>>>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>>>> </beans>
>>>>>>
>>>>>>
>>>>>> routing.drl is
>>>>>>
>>>>>> package org.apache.servicemix.drools
>>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>>
>>>>>> rule "Route to tap1"
>>>>>>         when
>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>>>> null
>>>>>> )
>>>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>>>         then
>>>>>>                 jbi.route( "bescocr::tap1" );
>>>>>> end
>>>>>>
>>>>>> rule "Route to tap2"
>>>>>>         when
>>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>>>> null
>>>>>> )
>>>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>>>         then
>>>>>>                 jbi.route( "bescocr::tap2" );
>>>>>> end
>>>>>>
>>>>>>
>>>>>> with the above setup iam getting the following exception "for service:
>>>>>> null
>>>>>> and interface: null" the exception is as follows, do i need to set
>>>>>> something
>>>>>> else in xbean.xml?
>>>>>>
>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>> exchange:
>>>>>> InOnly[
>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>   status: Active
>>>>>>   role: provider
>>>>>>   in: <My Message>
>>>>>> ] for service: null and interface: null
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>         at
>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>> va:19)
>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>> Source)
>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>> Source)
>>>>>>         at
>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>> Source)
>>>>>>         at
>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>> Source)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>         at
>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>         at
>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>         at
>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>> ERROR - DroolsComponent                - Error processing exchange
>>>>>> InOnly[
>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>>>   status: Active
>>>>>>   role: provider
>>>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>>>   endpoint: endpoint
>>>>>>   in: <My Message>
>>>>>> ]
>>>>>> org.drools.spi.ConsequenceException:
>>>>>> javax.jbi.messaging.MessagingException:
>>>>>> Could not find route for exchange: InOnly[
>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>   status: Active
>>>>>>   role: provider
>>>>>>   in: <My Message>
>>>>>> ] for service: null and interface: null
>>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>>> Source)
>>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>>> Source)
>>>>>>         at
>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>> Source)
>>>>>>         at
>>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>>> Source)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>>         at
>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>         at
>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>         at
>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>> Caused by: javax.jbi.messaging.MessagingException: Could not find
>>>>>> route
>>>>>> for
>>>>>> exchange: InOnly[
>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>   status: Active
>>>>>>   role: provider
>>>>>>   in: <My Message>
>>>>>> ] for service: null and interface: null
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>>         at
>>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>>         at
>>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>>> va:19)
>>>>>>         ... 16 more
>>>>>> ERROR - JmsComponent                   - Error processing exchange
>>>>>> InOnly[
>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>>>   status: Error
>>>>>>   role: consumer
>>>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>>>   endpoint: tap
>>>>>>   in: <My Message>
>>>>>>   error: org.drools.spi.ConsequenceException:
>>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>>> exchange:
>>>>>> InOnly[
>>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>>   status: Active
>>>>>>   role: provider
>>>>>>   in: <My Message>
>>>>>> ] for service: null and interface: null
>>>>>> ]
>>>>>> java.lang.UnsupportedOperationException: A destination must be
>>>>>> specified.
>>>>>>         at
>>>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>>>         at
>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>>>         at
>>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>>>         at
>>>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>>         at
>>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>>>         at
>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>         at
>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>         at
>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>> ERROR - JmsComponent                   - Error setting exchange status
>>>>>> to
>>>>>> ERROR
>>>>>> javax.jbi.messaging.MessagingException: illegal call to send /
>>>>>> sendSync
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>>>         at
>>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>         at
>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>>         at
>>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> The information contained in this electronic message and any
>>>>>> attachments
>>>>>> to this message are intended for the exclusive use of the addressee(s)
>>>>>> and
>>>>>> may contain proprietary, confidential or privileged information. If
>>>>>> you
>>>>>> are not the intended recipient, you should not disseminate, distribute
>>>>>> or
>>>>>> copy this e-mail. Please notify the sender immediately and destroy all
>>>>>> copies of this message and any attachments. 
>>>>>>
>>>>>> WARNING: Computer viruses can be transmitted via email. The recipient
>>>>>> should check this email and any attachments for the presence of
>>>>>> viruses.
>>>>>> The company accepts no liability for any damage caused by any virus
>>>>>> transmitted by this email.
>>>>>>  
>>>>>> www.wipro.com
>>>>>>
>>>>>>         
>>>>>>             
>>>>     
>>>>         
>>>   
>>>       
>>
>>     
>
>   


Re: Problem while invoking rule by using drools component

Posted by Arif Mohd <ar...@wipro.com>.
Hi Gert,
  Firstly i want to know the sender endpoint from drools component(i.e, i
want to know how to write a rule for determining sender endpoint)

Secondly you are talking about message auditor, could you please elobarate
how to do this? if possible with example.


Gert Vanthienen wrote:
> 
> Arif Mohd,
> 
> 
> I think this is possible if you use the 
> ${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
> expressions to determine the sender endpoint.  However, if you use the 
> tap's for debugging purposes, I would suggest you build a message 
> auditor that logs the messages somehow (whatever is done by your 
> wiretaps right now).  This way, if you do not need the logging, you 
> simply disable the auditor in your ServiceMix configuration. 
> 
> This would also allow you to remove all debugging configuration from 
> your SA, so it only contains real routing/service configuration.  This 
> improves the maintainability/readability of your configuration a lot 
> (recently done that for one of my own projects, which also had wiretaps 
> all over...)
> 
> 
> Gert
> 
> Arif Mohd wrote:
>> Thank you gert,
>>    1) Iam able to call my rules now without any error.
>>    2) The example i was using is simply routing a message based on the
>> content of message, which can be easily done with Content Based Router
>>    Now i want to do routing based on the source component of the message
>> from where the message is coming i.e, i want to remove the tap's(used for
>> debugging) at runtime using drools.
>>
>> My component setup is
>>
>>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
>> Router-->eip:Tap2--->eip:Transformer
>>
>> Now i want to enable/disable Tap1 and Tap2 during runtime by using
>> drools,
>> for that purpose i planned to have my component setup as follows
>>
>>    JMS
>> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
>> Based
>> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>>
>> the logic in rules files should be as follows
>>
>> if source component is JMS queue, route to Tap1
>> if source component is Tap1, route to Content based router
>> if source component is ContentBaseRouter, route to Tap2
>> if source component is Tap2, route to Transformer
>>
>>
>> How can i write this kind of rules,please help me in this regard.
>> Also let me know is it a feasible way of adding/removing components
>> logically?
>>
>>
>>
>>
>>
>>
>> Gert Vanthienen wrote:
>>   
>>> Arif,
>>>
>>>
>>> You can find a description on how to form this kind of URIs on 
>>> http://incubator.apache.org/servicemix/uris.html.
>>>
>>> If you think the URI is correct but still have these 'Cannot find route 
>>> to ...' errors, you can use a JMX console to verify which endpoints are 
>>> actually available on the ESB.  I think your service URI contained the 
>>> endpoint name, where it should only hold the service name.
>>>
>>>
>>> Gert
>>>
>>> Arif Mohd wrote:
>>>     
>>>> Hi Rabi,
>>>>
>>>>     I didn't understand this concept of giving service name as
>>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not
>>>> working
>>>>
>>>>    Can you please elobarate what is the meaning of the above statement,
>>>> i
>>>> agree that previously i have missed to preceede the service name with
>>>> namespace i.e, i should have given like
>>>>
>>>> jbi.route( "service:bescocr:tap1" );
>>>>
>>>> But even the above statement is not working
>>>>
>>>>
>>>> rabi wrote:
>>>>       
>>>>> in your routing.drl replace
>>>>>  
>>>>>  jbi.route( "bescocr::tap1" ); with
>>>>>  
>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>> /tap1");
>>>>>  
>>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>>
>>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>>> /tap2");
>>>>>  
>>>>> Regards, 
>>>>> Rabi Mishra 
>>>>> http://rabisblog.blogspot.com/
>>>>>
>>>>> ________________________________
>>>>>
>>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>>> Sent: Wed 6/20/2007 7:25 PM
>>>>> To: servicemix-users@geronimo.apache.org
>>>>> Subject: Problem while invoking rule by using drools component
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Hi,
>>>>>  
>>>>>    Iam having the following setup
>>>>>
>>>>> JMS queue(Consumer)-->eip:Content Based
>>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule
>>>>> base)
>>>>>
>>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>>
>>>>>       <eip:routing-rule>
>>>>>         <eip:predicate>
>>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>>> namespaceContext="#nsContext" />
>>>>>         </eip:predicate>
>>>>>         <eip:target>
>>>>>           <eip:exchange-target service="bescocr:myDroolsService" />
>>>>>         </eip:target>
>>>>>       </eip:routing-rule>
>>>>>
>>>>> xbean.xml for DroolsComponent(SU) is
>>>>>
>>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>>> <drools:endpoint
>>>>>      service="bescocr:myDroolsService"
>>>>>      endpoint="endpoint"
>>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>>> </beans>
>>>>>
>>>>>
>>>>> routing.drl is
>>>>>
>>>>> package org.apache.servicemix.drools
>>>>> import org.apache.servicemix.drools.model.Exchange;
>>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>>
>>>>> rule "Route to tap1"
>>>>>         when
>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>>> null
>>>>> )
>>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>>         then
>>>>>                 jbi.route( "bescocr::tap1" );
>>>>> end
>>>>>
>>>>> rule "Route to tap2"
>>>>>         when
>>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>>> null
>>>>> )
>>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>>         then
>>>>>                 jbi.route( "bescocr::tap2" );
>>>>> end
>>>>>
>>>>>
>>>>> with the above setup iam getting the following exception "for service:
>>>>> null
>>>>> and interface: null" the exception is as follows, do i need to set
>>>>> something
>>>>> else in xbean.xml?
>>>>>
>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>> exchange:
>>>>> InOnly[
>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>   status: Active
>>>>>   role: provider
>>>>>   in: <My Message>
>>>>> ] for service: null and interface: null
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>         at
>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>         at
>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>         at
>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>         at
>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>         at
>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>         at
>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>> va:19)
>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>> Source)
>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>> Source)
>>>>>         at
>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>> Source)
>>>>>         at
>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>> Source)
>>>>>         at
>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>         at
>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>         at
>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>         at
>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>         at
>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>         at
>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>         at
>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>> ERROR - DroolsComponent                - Error processing exchange
>>>>> InOnly[
>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>>   status: Active
>>>>>   role: provider
>>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>>   endpoint: endpoint
>>>>>   in: <My Message>
>>>>> ]
>>>>> org.drools.spi.ConsequenceException:
>>>>> javax.jbi.messaging.MessagingException:
>>>>> Could not find route for exchange: InOnly[
>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>   status: Active
>>>>>   role: provider
>>>>>   in: <My Message>
>>>>> ] for service: null and interface: null
>>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>>> Source)
>>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
>>>>> Source)
>>>>>         at
>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>> Source)
>>>>>         at
>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>>> Source)
>>>>>         at
>>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>>         at
>>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>>         at
>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>         at
>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>>         at
>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>         at
>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>         at
>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>> Caused by: javax.jbi.messaging.MessagingException: Could not find
>>>>> route
>>>>> for
>>>>> exchange: InOnly[
>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>   status: Active
>>>>>   role: provider
>>>>>   in: <My Message>
>>>>> ] for service: null and interface: null
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>>         at
>>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>>         at
>>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>>         at
>>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>>         at
>>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>>         at
>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>>         at
>>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>>> va:19)
>>>>>         ... 16 more
>>>>> ERROR - JmsComponent                   - Error processing exchange
>>>>> InOnly[
>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>>   status: Error
>>>>>   role: consumer
>>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>>   endpoint: tap
>>>>>   in: <My Message>
>>>>>   error: org.drools.spi.ConsequenceException:
>>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>>> exchange:
>>>>> InOnly[
>>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>>   status: Active
>>>>>   role: provider
>>>>>   in: <My Message>
>>>>> ] for service: null and interface: null
>>>>> ]
>>>>> java.lang.UnsupportedOperationException: A destination must be
>>>>> specified.
>>>>>         at
>>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>>         at
>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>>         at
>>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>>         at
>>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>>         at
>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>>         at
>>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>>         at
>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>         at
>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>         at
>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>> ERROR - JmsComponent                   - Error setting exchange status
>>>>> to
>>>>> ERROR
>>>>> javax.jbi.messaging.MessagingException: illegal call to send /
>>>>> sendSync
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>>         at
>>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>>         at
>>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>         at
>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>>         at
>>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> The information contained in this electronic message and any
>>>>> attachments
>>>>> to this message are intended for the exclusive use of the addressee(s)
>>>>> and
>>>>> may contain proprietary, confidential or privileged information. If
>>>>> you
>>>>> are not the intended recipient, you should not disseminate, distribute
>>>>> or
>>>>> copy this e-mail. Please notify the sender immediately and destroy all
>>>>> copies of this message and any attachments. 
>>>>>
>>>>> WARNING: Computer viruses can be transmitted via email. The recipient
>>>>> should check this email and any attachments for the presence of
>>>>> viruses.
>>>>> The company accepts no liability for any damage caused by any virus
>>>>> transmitted by this email.
>>>>>  
>>>>> www.wipro.com
>>>>>
>>>>>         
>>>     
>>
>>   
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11534408
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problem while invoking rule by using drools component

Posted by Gert Vanthienen <ge...@skynet.be>.
Arif Mohd,


I think this is possible if you use the 
${org.apache.servicemix.senderEndpoint} property in your CBR's xpath 
expressions to determine the sender endpoint.  However, if you use the 
tap's for debugging purposes, I would suggest you build a message 
auditor that logs the messages somehow (whatever is done by your 
wiretaps right now).  This way, if you do not need the logging, you 
simply disable the auditor in your ServiceMix configuration. 

This would also allow you to remove all debugging configuration from 
your SA, so it only contains real routing/service configuration.  This 
improves the maintainability/readability of your configuration a lot 
(recently done that for one of my own projects, which also had wiretaps 
all over...)


Gert

Arif Mohd wrote:
> Thank you gert,
>    1) Iam able to call my rules now without any error.
>    2) The example i was using is simply routing a message based on the
> content of message, which can be easily done with Content Based Router
>    Now i want to do routing based on the source component of the message
> from where the message is coming i.e, i want to remove the tap's(used for
> debugging) at runtime using drools.
>
> My component setup is
>
>    JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
> Router-->eip:Tap2--->eip:Transformer
>
> Now i want to enable/disable Tap1 and Tap2 during runtime by using drools,
> for that purpose i planned to have my component setup as follows
>
>    JMS
> queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
> Based
> Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer
>
> the logic in rules files should be as follows
>
> if source component is JMS queue, route to Tap1
> if source component is Tap1, route to Content based router
> if source component is ContentBaseRouter, route to Tap2
> if source component is Tap2, route to Transformer
>
>
> How can i write this kind of rules,please help me in this regard.
> Also let me know is it a feasible way of adding/removing components
> logically?
>
>
>
>
>
>
> Gert Vanthienen wrote:
>   
>> Arif,
>>
>>
>> You can find a description on how to form this kind of URIs on 
>> http://incubator.apache.org/servicemix/uris.html.
>>
>> If you think the URI is correct but still have these 'Cannot find route 
>> to ...' errors, you can use a JMX console to verify which endpoints are 
>> actually available on the ESB.  I think your service URI contained the 
>> endpoint name, where it should only hold the service name.
>>
>>
>> Gert
>>
>> Arif Mohd wrote:
>>     
>>> Hi Rabi,
>>>
>>>     I didn't understand this concept of giving service name as
>>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not working
>>>
>>>    Can you please elobarate what is the meaning of the above statement, i
>>> agree that previously i have missed to preceede the service name with
>>> namespace i.e, i should have given like
>>>
>>> jbi.route( "service:bescocr:tap1" );
>>>
>>> But even the above statement is not working
>>>
>>>
>>> rabi wrote:
>>>       
>>>> in your routing.drl replace
>>>>  
>>>>  jbi.route( "bescocr::tap1" ); with
>>>>  
>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>> /tap1");
>>>>  
>>>> and                 jbi.route( "bescocr::tap2" ); with
>>>>
>>>> jbi.route("service:http://xxx.com/bescocr_031807
>>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>>> /tap2");
>>>>  
>>>> Regards, 
>>>> Rabi Mishra 
>>>> http://rabisblog.blogspot.com/
>>>>
>>>> ________________________________
>>>>
>>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>>> Sent: Wed 6/20/2007 7:25 PM
>>>> To: servicemix-users@geronimo.apache.org
>>>> Subject: Problem while invoking rule by using drools component
>>>>
>>>>
>>>>
>>>>
>>>> Hi,
>>>>  
>>>>    Iam having the following setup
>>>>
>>>> JMS queue(Consumer)-->eip:Content Based
>>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule base)
>>>>
>>>> part of xbean.xml for "eip:Content Based Router" is
>>>>
>>>>       <eip:routing-rule>
>>>>         <eip:predicate>
>>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>>> namespaceContext="#nsContext" />
>>>>         </eip:predicate>
>>>>         <eip:target>
>>>>           <eip:exchange-target service="bescocr:myDroolsService" />
>>>>         </eip:target>
>>>>       </eip:routing-rule>
>>>>
>>>> xbean.xml for DroolsComponent(SU) is
>>>>
>>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>>> <drools:endpoint
>>>>      service="bescocr:myDroolsService"
>>>>      endpoint="endpoint"
>>>>      ruleBaseResource="classpath:routing.drl"/>
>>>> </beans>
>>>>
>>>>
>>>> routing.drl is
>>>>
>>>> package org.apache.servicemix.drools
>>>> import org.apache.servicemix.drools.model.Exchange;
>>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>>
>>>> rule "Route to tap1"
>>>>         when
>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>> null
>>>> )
>>>>                 eval( in.xpath("/Record/eid = 100") )
>>>>         then
>>>>                 jbi.route( "bescocr::tap1" );
>>>> end
>>>>
>>>> rule "Route to tap2"
>>>>         when
>>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>>> null
>>>> )
>>>>                 eval( in.xpath("/Record/eid = 101") )
>>>>         then
>>>>                 jbi.route( "bescocr::tap2" );
>>>> end
>>>>
>>>>
>>>> with the above setup iam getting the following exception "for service:
>>>> null
>>>> and interface: null" the exception is as follows, do i need to set
>>>> something
>>>> else in xbean.xml?
>>>>
>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>> exchange:
>>>> InOnly[
>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>   status: Active
>>>>   role: provider
>>>>   in: <My Message>
>>>> ] for service: null and interface: null
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>         at
>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>         at
>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>         at
>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>         at
>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>         at
>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>         at
>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>> va:19)
>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>> Source)
>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
>>>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>> Source)
>>>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>> Source)
>>>>         at
>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>         at
>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>         at
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>         at
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>         at
>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>         at java.lang.Thread.run(Thread.java:595)
>>>> ERROR - DroolsComponent                - Error processing exchange
>>>> InOnly[
>>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>>   status: Active
>>>>   role: provider
>>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>>   endpoint: endpoint
>>>>   in: <My Message>
>>>> ]
>>>> org.drools.spi.ConsequenceException:
>>>> javax.jbi.messaging.MessagingException:
>>>> Could not find route for exchange: InOnly[
>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>   status: Active
>>>>   role: provider
>>>>   in: <My Message>
>>>> ] for service: null and interface: null
>>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>>> Source)
>>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
>>>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>> Source)
>>>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>>> Source)
>>>>         at
>>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>>         at
>>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>>         at
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>         at
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>>         at
>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>         at java.lang.Thread.run(Thread.java:595)
>>>> Caused by: javax.jbi.messaging.MessagingException: Could not find route
>>>> for
>>>> exchange: InOnly[
>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>   status: Active
>>>>   role: provider
>>>>   in: <My Message>
>>>> ] for service: null and interface: null
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>>         at
>>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>>         at
>>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>>         at
>>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>>         at
>>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>>         at
>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>>         at
>>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>>> va:19)
>>>>         ... 16 more
>>>> ERROR - JmsComponent                   - Error processing exchange
>>>> InOnly[
>>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>>   status: Error
>>>>   role: consumer
>>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>>   endpoint: tap
>>>>   in: <My Message>
>>>>   error: org.drools.spi.ConsequenceException:
>>>> javax.jbi.messaging.MessagingException: Could not find route for
>>>> exchange:
>>>> InOnly[
>>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>>   status: Active
>>>>   role: provider
>>>>   in: <My Message>
>>>> ] for service: null and interface: null
>>>> ]
>>>> java.lang.UnsupportedOperationException: A destination must be
>>>> specified.
>>>>         at
>>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>>         at
>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>>         at
>>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>>         at
>>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>>         at
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>>         at
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>>         at
>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>         at java.lang.Thread.run(Thread.java:595)
>>>> ERROR - JmsComponent                   - Error setting exchange status
>>>> to
>>>> ERROR
>>>> javax.jbi.messaging.MessagingException: illegal call to send / sendSync
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>>         at
>>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>>         at
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>>         at
>>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>>         at java.lang.Thread.run(Thread.java:595)
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> The information contained in this electronic message and any attachments
>>>> to this message are intended for the exclusive use of the addressee(s)
>>>> and
>>>> may contain proprietary, confidential or privileged information. If you
>>>> are not the intended recipient, you should not disseminate, distribute
>>>> or
>>>> copy this e-mail. Please notify the sender immediately and destroy all
>>>> copies of this message and any attachments. 
>>>>
>>>> WARNING: Computer viruses can be transmitted via email. The recipient
>>>> should check this email and any attachments for the presence of viruses.
>>>> The company accepts no liability for any damage caused by any virus
>>>> transmitted by this email.
>>>>  
>>>> www.wipro.com
>>>>
>>>>         
>>     
>
>   


Re: Problem while invoking rule by using drools component

Posted by Arif Mohd <ar...@wipro.com>.
Thank you gert,
   1) Iam able to call my rules now without any error.
   2) The example i was using is simply routing a message based on the
content of message, which can be easily done with Content Based Router
   Now i want to do routing based on the source component of the message
from where the message is coming i.e, i want to remove the tap's(used for
debugging) at runtime using drools.

My component setup is

   JMS queue(Consumer)-->eip:Tap1-->eip:Content Based
Router-->eip:Tap2--->eip:Transformer

Now i want to enable/disable Tap1 and Tap2 during runtime by using drools,
for that purpose i planned to have my component setup as follows

   JMS
queue(Consumer)-->SA(DroolsComponent)eip:Tap1-->SA(DroolsComponent)--->eip:Content
Based
Router-->SA(DroolsComponent)--->eip:Tap2--->SA(DroolsComponent)-->eip:Transformer

the logic in rules files should be as follows

if source component is JMS queue, route to Tap1
if source component is Tap1, route to Content based router
if source component is ContentBaseRouter, route to Tap2
if source component is Tap2, route to Transformer


How can i write this kind of rules,please help me in this regard.
Also let me know is it a feasible way of adding/removing components
logically?






Gert Vanthienen wrote:
> 
> Arif,
> 
> 
> You can find a description on how to form this kind of URIs on 
> http://incubator.apache.org/servicemix/uris.html.
> 
> If you think the URI is correct but still have these 'Cannot find route 
> to ...' errors, you can use a JMX console to verify which endpoints are 
> actually available on the ESB.  I think your service URI contained the 
> endpoint name, where it should only hold the service name.
> 
> 
> Gert
> 
> Arif Mohd wrote:
>> Hi Rabi,
>> 
>>     I didn't understand this concept of giving service name as
>> "service:http://xxx.com/bescocr_031807/tap1" but still it is not working
>> 
>>    Can you please elobarate what is the meaning of the above statement, i
>> agree that previously i have missed to preceede the service name with
>> namespace i.e, i should have given like
>> 
>> jbi.route( "service:bescocr:tap1" );
>> 
>> But even the above statement is not working
>> 
>> 
>> rabi wrote:
>>>
>>> in your routing.drl replace
>>>  
>>>  jbi.route( "bescocr::tap1" ); with
>>>  
>>> jbi.route("service:http://xxx.com/bescocr_031807
>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>> /tap1");
>>>  
>>> and                 jbi.route( "bescocr::tap2" ); with
>>>
>>> jbi.route("service:http://xxx.com/bescocr_031807
>>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>>> /tap2");
>>>  
>>> Regards, 
>>> Rabi Mishra 
>>> http://rabisblog.blogspot.com/
>>>
>>> ________________________________
>>>
>>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>>> Sent: Wed 6/20/2007 7:25 PM
>>> To: servicemix-users@geronimo.apache.org
>>> Subject: Problem while invoking rule by using drools component
>>>
>>>
>>>
>>>
>>> Hi,
>>>  
>>>    Iam having the following setup
>>>
>>> JMS queue(Consumer)-->eip:Content Based
>>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule base)
>>>
>>> part of xbean.xml for "eip:Content Based Router" is
>>>
>>>       <eip:routing-rule>
>>>         <eip:predicate>
>>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>>> namespaceContext="#nsContext" />
>>>         </eip:predicate>
>>>         <eip:target>
>>>           <eip:exchange-target service="bescocr:myDroolsService" />
>>>         </eip:target>
>>>       </eip:routing-rule>
>>>
>>> xbean.xml for DroolsComponent(SU) is
>>>
>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>>> <drools:endpoint
>>>      service="bescocr:myDroolsService"
>>>      endpoint="endpoint"
>>>      ruleBaseResource="classpath:routing.drl"/>
>>> </beans>
>>>
>>>
>>> routing.drl is
>>>
>>> package org.apache.servicemix.drools
>>> import org.apache.servicemix.drools.model.Exchange;
>>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>>
>>> rule "Route to tap1"
>>>         when
>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>> null
>>> )
>>>                 eval( in.xpath("/Record/eid = 100") )
>>>         then
>>>                 jbi.route( "bescocr::tap1" );
>>> end
>>>
>>> rule "Route to tap2"
>>>         when
>>>                 me : Exchange( status == Exchange.ACTIVE, in : in !=
>>> null
>>> )
>>>                 eval( in.xpath("/Record/eid = 101") )
>>>         then
>>>                 jbi.route( "bescocr::tap2" );
>>> end
>>>
>>>
>>> with the above setup iam getting the following exception "for service:
>>> null
>>> and interface: null" the exception is as follows, do i need to set
>>> something
>>> else in xbean.xml?
>>>
>>> javax.jbi.messaging.MessagingException: Could not find route for
>>> exchange:
>>> InOnly[
>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>   status: Active
>>>   role: provider
>>>   in: <My Message>
>>> ] for service: null and interface: null
>>>         at
>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>         at
>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>         at
>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>         at
>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>         at
>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>         at
>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>         at
>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>> va:19)
>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>> Source)
>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
>>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>> Source)
>>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>> Source)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>         at
>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>         at java.lang.Thread.run(Thread.java:595)
>>> ERROR - DroolsComponent                - Error processing exchange
>>> InOnly[
>>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>>   status: Active
>>>   role: provider
>>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>>   endpoint: endpoint
>>>   in: <My Message>
>>> ]
>>> org.drools.spi.ConsequenceException:
>>> javax.jbi.messaging.MessagingException:
>>> Could not find route for exchange: InOnly[
>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>   status: Active
>>>   role: provider
>>>   in: <My Message>
>>> ] for service: null and interface: null
>>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
>>> Source)
>>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
>>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>> Source)
>>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>>> Source)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>>         at
>>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>>         at
>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>         at java.lang.Thread.run(Thread.java:595)
>>> Caused by: javax.jbi.messaging.MessagingException: Could not find route
>>> for
>>> exchange: InOnly[
>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>   status: Active
>>>   role: provider
>>>   in: <My Message>
>>> ] for service: null and interface: null
>>>         at
>>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>>         at
>>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>>         at
>>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>>         at
>>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>>         at
>>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>>         at
>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>>         at
>>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>>> va:19)
>>>         ... 16 more
>>> ERROR - JmsComponent                   - Error processing exchange
>>> InOnly[
>>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>>   status: Error
>>>   role: consumer
>>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>>   endpoint: tap
>>>   in: <My Message>
>>>   error: org.drools.spi.ConsequenceException:
>>> javax.jbi.messaging.MessagingException: Could not find route for
>>> exchange:
>>> InOnly[
>>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>>   status: Active
>>>   role: provider
>>>   in: <My Message>
>>> ] for service: null and interface: null
>>> ]
>>> java.lang.UnsupportedOperationException: A destination must be
>>> specified.
>>>         at
>>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>>         at
>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>>         at
>>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>>         at
>>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>>         at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>>         at
>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>         at java.lang.Thread.run(Thread.java:595)
>>> ERROR - JmsComponent                   - Error setting exchange status
>>> to
>>> ERROR
>>> javax.jbi.messaging.MessagingException: illegal call to send / sendSync
>>>         at
>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>>         at
>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>>         at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>>         at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>>         at
>>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>>         at java.lang.Thread.run(Thread.java:595)
>>>
>>>
>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>
>>>
>>>
>>>
>>>
>>>
>>> The information contained in this electronic message and any attachments
>>> to this message are intended for the exclusive use of the addressee(s)
>>> and
>>> may contain proprietary, confidential or privileged information. If you
>>> are not the intended recipient, you should not disseminate, distribute
>>> or
>>> copy this e-mail. Please notify the sender immediately and destroy all
>>> copies of this message and any attachments. 
>>>
>>> WARNING: Computer viruses can be transmitted via email. The recipient
>>> should check this email and any attachments for the presence of viruses.
>>> The company accepts no liability for any damage caused by any virus
>>> transmitted by this email.
>>>  
>>> www.wipro.com
>>>
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11519195
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problem while invoking rule by using drools component

Posted by Gert Vanthienen <ge...@skynet.be>.
Arif,


You can find a description on how to form this kind of URIs on 
http://incubator.apache.org/servicemix/uris.html.

If you think the URI is correct but still have these 'Cannot find route 
to ...' errors, you can use a JMX console to verify which endpoints are 
actually available on the ESB.  I think your service URI contained the 
endpoint name, where it should only hold the service name.


Gert

Arif Mohd wrote:
> Hi Rabi,
> 
>     I didn't understand this concept of giving service name as
> "service:http://xxx.com/bescocr_031807/tap1" but still it is not working
> 
>    Can you please elobarate what is the meaning of the above statement, i
> agree that previously i have missed to preceede the service name with
> namespace i.e, i should have given like
> 
> jbi.route( "service:bescocr:tap1" );
> 
> But even the above statement is not working
> 
> 
> rabi wrote:
>>
>> in your routing.drl replace
>>  
>>  jbi.route( "bescocr::tap1" ); with
>>  
>> jbi.route("service:http://xxx.com/bescocr_031807
>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>> /tap1");
>>  
>> and                 jbi.route( "bescocr::tap2" ); with
>>
>> jbi.route("service:http://xxx.com/bescocr_031807
>> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
>> /tap2");
>>  
>> Regards, 
>> Rabi Mishra 
>> http://rabisblog.blogspot.com/
>>
>> ________________________________
>>
>> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
>> Sent: Wed 6/20/2007 7:25 PM
>> To: servicemix-users@geronimo.apache.org
>> Subject: Problem while invoking rule by using drools component
>>
>>
>>
>>
>> Hi,
>>  
>>    Iam having the following setup
>>
>> JMS queue(Consumer)-->eip:Content Based
>> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule base)
>>
>> part of xbean.xml for "eip:Content Based Router" is
>>
>>       <eip:routing-rule>
>>         <eip:predicate>
>>           <eip:xpath-predicate xpath="/Record/eid = 100"
>> namespaceContext="#nsContext" />
>>         </eip:predicate>
>>         <eip:target>
>>           <eip:exchange-target service="bescocr:myDroolsService" />
>>         </eip:target>
>>       </eip:routing-rule>
>>
>> xbean.xml for DroolsComponent(SU) is
>>
>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>>        xmlns:bescocr="http://xxx.com/bescocr_031807">
>> <drools:endpoint
>>      service="bescocr:myDroolsService"
>>      endpoint="endpoint"
>>      ruleBaseResource="classpath:routing.drl"/>
>> </beans>
>>
>>
>> routing.drl is
>>
>> package org.apache.servicemix.drools
>> import org.apache.servicemix.drools.model.Exchange;
>> global org.apache.servicemix.drools.model.JbiHelper jbi;
>>
>> rule "Route to tap1"
>>         when
>>                 me : Exchange( status == Exchange.ACTIVE, in : in != null
>> )
>>                 eval( in.xpath("/Record/eid = 100") )
>>         then
>>                 jbi.route( "bescocr::tap1" );
>> end
>>
>> rule "Route to tap2"
>>         when
>>                 me : Exchange( status == Exchange.ACTIVE, in : in != null
>> )
>>                 eval( in.xpath("/Record/eid = 101") )
>>         then
>>                 jbi.route( "bescocr::tap2" );
>> end
>>
>>
>> with the above setup iam getting the following exception "for service:
>> null
>> and interface: null" the exception is as follows, do i need to set
>> something
>> else in xbean.xml?
>>
>> javax.jbi.messaging.MessagingException: Could not find route for exchange:
>> InOnly[
>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>   status: Active
>>   role: provider
>>   in: <My Message>
>> ] for service: null and interface: null
>>         at
>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>         at
>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>         at
>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>         at
>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>         at
>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>         at
>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>         at
>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>> va:19)
>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>> Source)
>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>> Source)
>>         at
>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>         at
>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>         at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>         at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>         at
>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>         at java.lang.Thread.run(Thread.java:595)
>> ERROR - DroolsComponent                - Error processing exchange InOnly[
>>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>>   status: Active
>>   role: provider
>>   service: {http://xxx.com/bescocr_031807}myDroolsService
>>   endpoint: endpoint
>>   in: <My Message>
>> ]
>> org.drools.spi.ConsequenceException:
>> javax.jbi.messaging.MessagingException:
>> Could not find route for exchange: InOnly[
>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>   status: Active
>>   role: provider
>>   in: <My Message>
>> ] for service: null and interface: null
>>         at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
>>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>> Source)
>>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
>> Source)
>>         at
>> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>>         at
>> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>>         at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>         at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>>         at
>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>         at java.lang.Thread.run(Thread.java:595)
>> Caused by: javax.jbi.messaging.MessagingException: Could not find route
>> for
>> exchange: InOnly[
>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>   status: Active
>>   role: provider
>>   in: <My Message>
>> ] for service: null and interface: null
>>         at
>> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>>         at
>> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>>         at
>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>>         at
>> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>>         at
>> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>>         at
>> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>>         at
>> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
>> va:19)
>>         ... 16 more
>> ERROR - JmsComponent                   - Error processing exchange InOnly[
>>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>>   status: Error
>>   role: consumer
>>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>>   endpoint: tap
>>   in: <My Message>
>>   error: org.drools.spi.ConsequenceException:
>> javax.jbi.messaging.MessagingException: Could not find route for exchange:
>> InOnly[
>>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>>   status: Active
>>   role: provider
>>   in: <My Message>
>> ] for service: null and interface: null
>> ]
>> java.lang.UnsupportedOperationException: A destination must be specified.
>>         at
>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>>         at
>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>>         at
>> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>>         at
>> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>>         at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>>         at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>>         at
>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>         at java.lang.Thread.run(Thread.java:595)
>> ERROR - JmsComponent                   - Error setting exchange status to
>> ERROR
>> javax.jbi.messaging.MessagingException: illegal call to send / sendSync
>>         at
>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>>         at
>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>>         at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>>         at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>>         at
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>>         at java.lang.Thread.run(Thread.java:595)
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
>>
>>
>>
>>
>>
>> The information contained in this electronic message and any attachments
>> to this message are intended for the exclusive use of the addressee(s) and
>> may contain proprietary, confidential or privileged information. If you
>> are not the intended recipient, you should not disseminate, distribute or
>> copy this e-mail. Please notify the sender immediately and destroy all
>> copies of this message and any attachments. 
>>
>> WARNING: Computer viruses can be transmitted via email. The recipient
>> should check this email and any attachments for the presence of viruses.
>> The company accepts no liability for any damage caused by any virus
>> transmitted by this email.
>>  
>> www.wipro.com
>>
> 

RE: Problem while invoking rule by using drools component

Posted by ra...@wipro.com.
You can give "bescocr", but you have to define what bescocr means for
JBIHelper in your drools file. 

jbi -> this is nothing but the JBIHelper with some helper methods. This
is imported in your drools file.

I have included your namespace in the uri to simplify this. It works for
me.

Send me your complete log/configurations to understand if there is any
other problem.


Regards,
Rabi Mishra, 
http://rabisblog.blogspot.com/
c++; /* this makes c bigger but returns the old value */ 
-----Original Message-----
From: Arif Mohd [mailto:arif.mohammed1@wipro.com] 
Sent: Thursday, June 21, 2007 11:39 AM
To: servicemix-users@geronimo.apache.org
Subject: RE: Problem while invoking rule by using drools component


Hi Rabi,

    I didn't understand this concept of giving service name as
"service:http://xxx.com/bescocr_031807/tap1" but still it is not working

   Can you please elobarate what is the meaning of the above statement,
i agree that previously i have missed to preceede the service name with
namespace i.e, i should have given like

jbi.route( "service:bescocr:tap1" );

But even the above statement is not working


rabi wrote:
> 
> 
> in your routing.drl replace
>  
>  jbi.route( "bescocr::tap1" ); with
>  
> jbi.route("service:http://xxx.com/bescocr_031807
> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/be
> scocr_031807>
> /tap1");
>  
> and                 jbi.route( "bescocr::tap2" ); with
> 
> jbi.route("service:http://xxx.com/bescocr_031807
> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/be
> scocr_031807>
> /tap2");
>  
> Regards,
> Rabi Mishra
> http://rabisblog.blogspot.com/
> 
> ________________________________
> 
> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
> Sent: Wed 6/20/2007 7:25 PM
> To: servicemix-users@geronimo.apache.org
> Subject: Problem while invoking rule by using drools component
> 
> 
> 
> 
> Hi,
>  
>    Iam having the following setup
> 
> JMS queue(Consumer)-->eip:Content Based
> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule 
> Router-->base)
> 
> part of xbean.xml for "eip:Content Based Router" is
> 
>       <eip:routing-rule>
>         <eip:predicate>
>           <eip:xpath-predicate xpath="/Record/eid = 100"
> namespaceContext="#nsContext" />
>         </eip:predicate>
>         <eip:target>
>           <eip:exchange-target service="bescocr:myDroolsService" />
>         </eip:target>
>       </eip:routing-rule>
> 
> xbean.xml for DroolsComponent(SU) is
> 
> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>        xmlns:bescocr="http://xxx.com/bescocr_031807">
> <drools:endpoint
>      service="bescocr:myDroolsService"
>      endpoint="endpoint"
>      ruleBaseResource="classpath:routing.drl"/>
> </beans>
> 
> 
> routing.drl is
> 
> package org.apache.servicemix.drools
> import org.apache.servicemix.drools.model.Exchange;
> global org.apache.servicemix.drools.model.JbiHelper jbi;
> 
> rule "Route to tap1"
>         when
>                 me : Exchange( status == Exchange.ACTIVE, in : in != 
> null
> )
>                 eval( in.xpath("/Record/eid = 100") )
>         then
>                 jbi.route( "bescocr::tap1" ); end
> 
> rule "Route to tap2"
>         when
>                 me : Exchange( status == Exchange.ACTIVE, in : in != 
> null
> )
>                 eval( in.xpath("/Record/eid = 101") )
>         then
>                 jbi.route( "bescocr::tap2" ); end
> 
> 
> with the above setup iam getting the following exception "for service:
> null
> and interface: null" the exception is as follows, do i need to set 
> something else in xbean.xml?
> 
> javax.jbi.messaging.MessagingException: Could not find route for
exchange:
> InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>   status: Active
>   role: provider
>   in: <My Message>
> ] for service: null and interface: null
>         at
>
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBr
oker.java:295)
>         at
>
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(Secu
redBroker.java:80)
>         at
>
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContain
er.java:793)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryC
hannelImpl.java:381)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(Deliver
yChannelImpl.java:456)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(Deliver
yChannelImpl.java:428)
>         at
>
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDe
liveryChannel.java:88)
>         at
> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>         at
>
org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route
_to_tap1_0.java:11)
>         at
> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.ev
> aluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
> va:19)
>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
Source)
>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
Source)
>         at 
> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
>         at 
> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
>         at
>
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:1
50)
>         at
>
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:
141)
>         at
>
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeC
ycle.java:489)
>         at
>
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBas
eLifeCycle.java:441)
>         at
>
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCyc
le.java:46)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(D
eliveryChannelImpl.java:593)
>         at
>
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.j
ava:174)
>         at
>
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java
:176)
>         at
>
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:1
34)
>         at
>
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.runTask(ThreadPoolExecutor.java:665)
>         at
>
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> ERROR - DroolsComponent                - Error processing exchange
InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>   status: Active
>   role: provider
>   service: {http://xxx.com/bescocr_031807}myDroolsService
>   endpoint: endpoint
>   in: <My Message>
> ]
> org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException:
> Could not find route for exchange: InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>   status: Active
>   role: provider
>   in: <My Message>
> ] for service: null and interface: null
>         at org.drools.common.DefaultAgenda.fireActivation(Unknown
Source)
>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown
Source)
>         at 
> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
>         at 
> org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
>         at
>
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:1
50)
>         at
>
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:
141)
>         at
>
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeC
ycle.java:489)
>         at
>
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBas
eLifeCycle.java:441)
>         at
>
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCyc
le.java:46)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(D
eliveryChannelImpl.java:593)
>         at
>
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.j
ava:174)
>         at
>
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java
:176)
>         at
>
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:1
34)
>         at
>
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.runTask(ThreadPoolExecutor.java:665)
>         at
>
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.jbi.messaging.MessagingException: Could not find 
> route for
> exchange: InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>   status: Active
>   role: provider
>   in: <My Message>
> ] for service: null and interface: null
>         at
>
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBr
oker.java:295)
>         at
>
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(Secu
redBroker.java:80)
>         at
>
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContain
er.java:793)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryC
hannelImpl.java:381)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(Deliver
yChannelImpl.java:456)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(Deliver
yChannelImpl.java:428)
>         at
>
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDe
liveryChannel.java:88)
>         at
> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>         at
>
org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route
_to_tap1_0.java:11)
>         at
> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.ev
> aluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
> va:19)
>         ... 16 more
> ERROR - JmsComponent                   - Error processing exchange
InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>   status: Error
>   role: consumer
>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>   endpoint: tap
>   in: <My Message>
>   error: org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException: Could not find route for
exchange:
> InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>   status: Active
>   role: provider
>   in: <My Message>
> ] for service: null and interface: null ]
> java.lang.UnsupportedOperationException: A destination must be
specified.
>         at
>
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer
.java:448)
>         at
> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>         at
> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>         at
>
org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.pro
cess(MultiplexingConsumerProcessor.java:125)
>         at
>
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeC
ycle.java:489)
>         at
>
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBas
eLifeCycle.java:463)
>         at
>
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCyc
le.java:46)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(D
eliveryChannelImpl.java:593)
>         at
>
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.j
ava:174)
>         at
>
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java
:176)
>         at
>
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:1
34)
>         at
>
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.runTask(ThreadPoolExecutor.java:665)
>         at
>
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> ERROR - JmsComponent                   - Error setting exchange status
to
> ERROR
> javax.jbi.messaging.MessagingException: illegal call to send /
sendSync
>         at
>
org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(Messa
geExchangeImpl.java:571)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryC
hannelImpl.java:370)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryCha
nnelImpl.java:417)
>         at
>
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCyc
le.java:58)
>         at
>
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(D
eliveryChannelImpl.java:593)
>         at
>
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.j
ava:174)
>         at
>
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java
:176)
>         at
>
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:1
34)
>         at
>
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.runTask(ThreadPoolExecutor.java:665)
>         at
>
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> 
> 
> 
> 
> --
> View this message in context:
> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-comp
> onent-tf3952519s12049.html#a11213830
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
> 
> 
> 
> 
> 
> 
> The information contained in this electronic message and any 
> attachments to this message are intended for the exclusive use of the 
> addressee(s) and may contain proprietary, confidential or privileged 
> information. If you are not the intended recipient, you should not 
> disseminate, distribute or copy this e-mail. Please notify the sender 
> immediately and destroy all copies of this message and any
attachments.
> 
> WARNING: Computer viruses can be transmitted via email. The recipient 
> should check this email and any attachments for the presence of
viruses.
> The company accepts no liability for any damage caused by any virus 
> transmitted by this email.
>  
> www.wipro.com
> 

--
View this message in context:
http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-compon
ent-tf3952519s12049.html#a11227175
Sent from the ServiceMix - User mailing list archive at Nabble.com.



The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. 

WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email.
 
www.wipro.com

RE: Problem while invoking rule by using drools component

Posted by Arif Mohd <ar...@wipro.com>.
Hi Rabi,

    I didn't understand this concept of giving service name as
"service:http://xxx.com/bescocr_031807/tap1" but still it is not working

   Can you please elobarate what is the meaning of the above statement, i
agree that previously i have missed to preceede the service name with
namespace i.e, i should have given like

jbi.route( "service:bescocr:tap1" );

But even the above statement is not working


rabi wrote:
> 
> 
> in your routing.drl replace
>  
>  jbi.route( "bescocr::tap1" ); with
>  
> jbi.route("service:http://xxx.com/bescocr_031807
> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
> /tap1");
>  
> and                 jbi.route( "bescocr::tap2" ); with
> 
> jbi.route("service:http://xxx.com/bescocr_031807
> <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807>
> /tap2");
>  
> Regards, 
> Rabi Mishra 
> http://rabisblog.blogspot.com/
> 
> ________________________________
> 
> From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
> Sent: Wed 6/20/2007 7:25 PM
> To: servicemix-users@geronimo.apache.org
> Subject: Problem while invoking rule by using drools component
> 
> 
> 
> 
> Hi,
>  
>    Iam having the following setup
> 
> JMS queue(Consumer)-->eip:Content Based
> Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule base)
> 
> part of xbean.xml for "eip:Content Based Router" is
> 
>       <eip:routing-rule>
>         <eip:predicate>
>           <eip:xpath-predicate xpath="/Record/eid = 100"
> namespaceContext="#nsContext" />
>         </eip:predicate>
>         <eip:target>
>           <eip:exchange-target service="bescocr:myDroolsService" />
>         </eip:target>
>       </eip:routing-rule>
> 
> xbean.xml for DroolsComponent(SU) is
> 
> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
>        xmlns:bescocr="http://xxx.com/bescocr_031807">
> <drools:endpoint
>      service="bescocr:myDroolsService"
>      endpoint="endpoint"
>      ruleBaseResource="classpath:routing.drl"/>
> </beans>
> 
> 
> routing.drl is
> 
> package org.apache.servicemix.drools
> import org.apache.servicemix.drools.model.Exchange;
> global org.apache.servicemix.drools.model.JbiHelper jbi;
> 
> rule "Route to tap1"
>         when
>                 me : Exchange( status == Exchange.ACTIVE, in : in != null
> )
>                 eval( in.xpath("/Record/eid = 100") )
>         then
>                 jbi.route( "bescocr::tap1" );
> end
> 
> rule "Route to tap2"
>         when
>                 me : Exchange( status == Exchange.ACTIVE, in : in != null
> )
>                 eval( in.xpath("/Record/eid = 101") )
>         then
>                 jbi.route( "bescocr::tap2" );
> end
> 
> 
> with the above setup iam getting the following exception "for service:
> null
> and interface: null" the exception is as follows, do i need to set
> something
> else in xbean.xml?
> 
> javax.jbi.messaging.MessagingException: Could not find route for exchange:
> InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>   status: Active
>   role: provider
>   in: <My Message>
> ] for service: null and interface: null
>         at
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>         at
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>         at
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>         at
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>         at
> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>         at
> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>         at
> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
> va:19)
>         at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
>         at
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>         at
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>         at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>         at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> ERROR - DroolsComponent                - Error processing exchange InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-3:2
>   status: Active
>   role: provider
>   service: {http://xxx.com/bescocr_031807}myDroolsService
>   endpoint: endpoint
>   in: <My Message>
> ]
> org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException:
> Could not find route for exchange: InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>   status: Active
>   role: provider
>   in: <My Message>
> ] for service: null and interface: null
>         at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
>         at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
>         at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
>         at
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
>         at
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>         at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>         at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.jbi.messaging.MessagingException: Could not find route
> for
> exchange: InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>   status: Active
>   role: provider
>   in: <My Message>
> ] for service: null and interface: null
>         at
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
>         at
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
>         at
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
>         at
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
>         at
> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
>         at
> org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
>         at
> org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
> va:19)
>         ... 16 more
> ERROR - JmsComponent                   - Error processing exchange InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-4:0
>   status: Error
>   role: consumer
>   service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
>   endpoint: tap
>   in: <My Message>
>   error: org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException: Could not find route for exchange:
> InOnly[
>   id: ID:EC4T16INT165110-4730-1182344415869-7:0
>   status: Active
>   role: provider
>   in: <My Message>
> ] for service: null and interface: null
> ]
> java.lang.UnsupportedOperationException: A destination must be specified.
>         at
> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
>         at
> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
>         at
> org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
>         at
> org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
>         at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>         at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> ERROR - JmsComponent                   - Error setting exchange status to
> ERROR
> javax.jbi.messaging.MessagingException: illegal call to send / sendSync
>         at
> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
>         at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>         at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> 
> 
> 
> 
> --
> View this message in context:
> http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
> 
> 
> 
> 
> 
> 
> The information contained in this electronic message and any attachments
> to this message are intended for the exclusive use of the addressee(s) and
> may contain proprietary, confidential or privileged information. If you
> are not the intended recipient, you should not disseminate, distribute or
> copy this e-mail. Please notify the sender immediately and destroy all
> copies of this message and any attachments. 
> 
> WARNING: Computer viruses can be transmitted via email. The recipient
> should check this email and any attachments for the presence of viruses.
> The company accepts no liability for any damage caused by any virus
> transmitted by this email.
>  
> www.wipro.com
> 

-- 
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11227175
Sent from the ServiceMix - User mailing list archive at Nabble.com.


RE: Problem while invoking rule by using drools component

Posted by ra...@wipro.com.
in your routing.drl replace
 
 jbi.route( "bescocr::tap1" ); with
 
jbi.route("service:http://xxx.com/bescocr_031807 <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807> /tap1");
 
and                 jbi.route( "bescocr::tap2" ); with

jbi.route("service:http://xxx.com/bescocr_031807 <https://webmail.wipro.com/exchweb/bin/redir.asp?URL=http://xxx.com/bescocr_031807> /tap2");
 
Regards, 
Rabi Mishra 
http://rabisblog.blogspot.com/

________________________________

From: Arif Mohd [mailto:arif.mohammed1@wipro.com]
Sent: Wed 6/20/2007 7:25 PM
To: servicemix-users@geronimo.apache.org
Subject: Problem while invoking rule by using drools component




Hi,
 
   Iam having the following setup

JMS queue(Consumer)-->eip:Content Based
Router-->SA(DroolsComponent)-->eip:TAP1 or eip:TAP2(Based on rule base)

part of xbean.xml for "eip:Content Based Router" is

      <eip:routing-rule>
        <eip:predicate>
          <eip:xpath-predicate xpath="/Record/eid = 100"
namespaceContext="#nsContext" />
        </eip:predicate>
        <eip:target>
          <eip:exchange-target service="bescocr:myDroolsService" />
        </eip:target>
      </eip:routing-rule>

xbean.xml for DroolsComponent(SU) is

<beans xmlns:drools="http://servicemix.apache.org/drools/1.0"
       xmlns:bescocr="http://xxx.com/bescocr_031807">
<drools:endpoint
     service="bescocr:myDroolsService"
     endpoint="endpoint"
     ruleBaseResource="classpath:routing.drl"/>
</beans>


routing.drl is

package org.apache.servicemix.drools
import org.apache.servicemix.drools.model.Exchange;
global org.apache.servicemix.drools.model.JbiHelper jbi;

rule "Route to tap1"
        when
                me : Exchange( status == Exchange.ACTIVE, in : in != null )
                eval( in.xpath("/Record/eid = 100") )
        then
                jbi.route( "bescocr::tap1" );
end

rule "Route to tap2"
        when
                me : Exchange( status == Exchange.ACTIVE, in : in != null )
                eval( in.xpath("/Record/eid = 101") )
        then
                jbi.route( "bescocr::tap2" );
end


with the above setup iam getting the following exception "for service: null
and interface: null" the exception is as follows, do i need to set something
else in xbean.xml?

javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-7:0
  status: Active
  role: provider
  in: <My Message>
] for service: null and interface: null
        at
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
        at
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
        at
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
        at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
        at
org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
va:19)
        at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
        at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
        at
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
        at
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)
ERROR - DroolsComponent                - Error processing exchange InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-3:2
  status: Active
  role: provider
  service: {http://xxx.com/bescocr_031807}myDroolsService
  endpoint: endpoint
  in: <My Message>
]
org.drools.spi.ConsequenceException: javax.jbi.messaging.MessagingException:
Could not find route for exchange: InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-7:0
  status: Active
  role: provider
  in: <My Message>
] for service: null and interface: null
        at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
        at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
        at
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:150)
        at
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:141)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)
Caused by: javax.jbi.messaging.MessagingException: Could not find route for
exchange: InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-7:0
  status: Active
  role: provider
  in: <My Message>
] for service: null and interface: null
        at
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:295)
        at
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:80)
        at
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:793)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:381)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:456)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:428)
        at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:88)
        at
org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0.consequence(Rule_Route_to_tap1_0.java:11)
        at
org.apache.servicemix.drools.Rule_Route_to_tap1_0ConsequenceInvoker.evaluate(Rule_Route_to_tap1_0ConsequenceInvoker.ja
va:19)
        ... 16 more
ERROR - JmsComponent                   - Error processing exchange InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-4:0
  status: Error
  role: consumer
  service: {http://xxx.com/bescocr_031807}JmsToPipeTapSvc
  endpoint: tap
  in: <My Message>
  error: org.drools.spi.ConsequenceException:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOnly[
  id: ID:EC4T16INT165110-4730-1182344415869-7:0
  status: Active
  role: provider
  in: <My Message>
] for service: null and interface: null
]
java.lang.UnsupportedOperationException: A destination must be specified.
        at
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
        at
org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:75)
        at
org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:60)
        at
org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(MultiplexingConsumerProcessor.java:125)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:463)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)
ERROR - JmsComponent                   - Error setting exchange status to
ERROR
javax.jbi.messaging.MessagingException: illegal call to send / sendSync
        at
org.apache.servicemix.jbi.messaging.MessageExchangeImpl.handleSend(MessageExchangeImpl.java:571)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:370)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:417)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)




--
View this message in context: http://www.nabble.com/Problem-while-invoking-rule-by-using-drools-component-tf3952519s12049.html#a11213830
Sent from the ServiceMix - User mailing list archive at Nabble.com.






The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. 

WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email.
 
www.wipro.com