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:[EMAIL PROTECTED]
Sent: Wed 6/20/2007 7:25 PM
To: [email protected]
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



Reply via email to