[rules-users] RE: how to find duplicate inlineeval

Sikkandar Nawabjan Sikkandar.Nawabjan at ust-global.com
Wed Nov 14 05:02:03 EST 2007


Edson,

As you said i used inline eval. But am getting erroe message like this can't be used in static context.am using statelesssession to assert my objects.

i also put eval(this!=obj1) as follows. 

  $obj1:Object1($id:id,$name:name)
  $obj2:Object1(id==$id,$name:name==$name, eval( this!=$obj1 ))  eval($obj2!=  $obj1)

Though my references are different the rule is not firing


Thanks and Regs

Basha

From: rules-users-bounces at lists.jboss.org on behalf of Edson Tirelli
Sent: Tue 11/13/2007 9:35 PM
To: Rules Users List
Subject: Re: [rules-users] RE: how to find duplicate




   Sikkandar,

   The only way to check for identity is to use an inline eval and use java code to check that:

when
        $obj1:Object1($id:id,$name:name)
        $obj2:Object1(id==$id,$name:name==$name, eval( this!=$obj1 )) 
then

   Another option is to configure your rulebase to not allow the same object to be matched by more than one pattern in your rules. To do that you can either set a system property:

drools.removeIdentities = true

    Or you can use drools API:

RuleBaseConfiguration conf = new RuleBaseConfiguration();
conf.setRemoveIdentities( true );
RuleBase rulebase = RuleBaseFactory.newRuleBase( conf );

    If you do that, your rule can be written as this: 

when
        $obj1:Object1($id:id,$name:name)
        $obj2:Object1(id==$id,$name:name==$name)
then

   Since the engine will never allow the same fact to simultaneously match both patterns.

   []s
   Edson





2007/11/13, Sikkandar Nawabjan <Sikkandar.Nawabjan at ust-global.com>: 

	Hi,
	am passing list of objects to working memory. i want to fire the rule if there is any duplicate objects in the list
	
	i write code like this
	
	when
	        $obj1:Object1($id:id,$name:name)
	        $obj2:Object1(id==$id,$name:name==$name,this!=$obj1) 
	then
	  fire rule
	
	Now the problem lies at this!=objj1(a highlighted check). i put this to avoid a object check with itself.
	But this is internally calling equals method of the corresponding object and always return true. Because i overriden equals method in the Object itself 
	so at the end the rule won't fire even if there is a duplicate object. how i can solve this
	
	equals(Object obj){
	if(this.id=obj.id&& this.name==obj.name)
	  return true;
	else
	  return false; 
	}
	
	
	
	
	________________________________
	
	From: rules-users-bounces at lists.jboss.org on behalf of rules-users-request at lists.jboss.org
	Sent: Tue 11/13/2007 2:04 AM
	To: rules-users at lists.jboss.org 
	Subject: rules-users Digest, Vol 12, Issue 27
	
	
	
	Send rules-users mailing list submissions to
	        rules-users at lists.jboss.org
	
	To subscribe or unsubscribe via the World Wide Web, visit 
	        https://lists.jboss.org/mailman/listinfo/rules-users
	or, via email, send a message with subject or body 'help' to
	         rules-users-request at lists.jboss.org <mailto:rules-users-request at lists.jboss.org> 
	
	You can reach the person managing the list at
	        rules-users-owner at lists.jboss.org
	
	When replying, please edit your Subject line so it is more specific 
	than "Re: Contents of rules-users digest..."
	
	
	Today's Topics:
	
	   1. Re: Drools and jBPM integration (Fabian Weisensee)
	   2. Re: java.lang.OutOfMemoryError: Java heap space (Edson Tirelli) 
	   3. Re: Drools and jBPM integration (Mark Proctor)
	   4. Re: Drools and jBPM integration (Mark Proctor)
	
	
	----------------------------------------------------------------------
	
	Message: 1
	Date: Mon, 12 Nov 2007 18:23:06 +0100 
	From: Fabian Weisensee <fabian at weisensee.net>
	Subject: Re: [rules-users] Drools and jBPM integration
	To: Rules Users List < rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org> >
	Message-ID: <47388BFA.3010009 at weisensee.net>
	Content-Type: text/plain; charset=ISO-8859-1; format=flowed
	
	Yes, thanks for your help. I'll try your suggestion for #2. 
	
	I resolved the deployment problem by myself. It was just a mistake with
	the JBoss ESB deploying...
	
	But now I have another problem. The rule file is found, but there seem
	to be some problems with the parser. 
	
	The FireRulesActionHandler class from the jbpm wiki uses the following code:
	RuleBaseImpl ruleBase = new RuleBaseImpl();
	ruleBase.addPackage(pkg);
	
	But the RuleBaseImpl class doesn't seem to be part of drools anymore. I 
	looked at the javadocs to find a replacement. I've found the
	RuleBaseLoader class which looked like what I needed. I replaced the two
	lines with this:
	RuleBaseLoader rbl = RuleBaseLoader.getInstance();
	RuleBase ruleBase = rbl.loadFromReader(reader);
	ruleBase.addPackage(pkg);
	
	but when I run this I get the following error:
	
	ERROR [GraphElement] action threw exception: Unable to parser Reader
	java.lang.RuntimeException : Unable to parser Reader
	        at org.drools.compiler.DrlParser.getParser(DrlParser.java:209)
	        at org.drools.compiler.DrlParser.parse(DrlParser.java:60)
	        at
	org.drools.compiler.PackageBuilder.addPackageFromDrl (PackageBuilder.java:165)
	        at
	org.drools.compiler.RuleBaseLoader.loadFromReader(RuleBaseLoader.java:38)
	        at
	rechnung.kontrolle.FireRulesActionHandler.readRule(FireRulesActionHandler.java:92)
	        at 
	rechnung.kontrolle.FireRulesActionHandler.execute(FireRulesActionHandler.java:49)
	
	Of course I thought my rule file would be syntacticaly incorrect, but
	even this rule file didn't work:
	
	package rechnung.kontrolle 
	
	rule "test rule 1"
	        when
	        then
	                System.out.println("rule fired!");
	end
	
	What am I doing wrong? Is RulesBaseLoader the right class?
	Are there any other Informations about integrating jBPM and Drools? 
	
	--Fabian
	
	
	
	Aziz Boxwala schrieb:
	> Fabian,
	>
	> Response to #1: I believe the rule file needs to reside in the root
	> directory of the archive/directory of the example application. I have 
	> not tried that out so not sure.
	>
	> With Drools 4.0.x, you have the option of having your rules be located
	> in the BRMS.
	>
	> Response to #2: You should be able to do so using one decision-node. 
	> Associate the rule action handler with either the Before Signal or Node
	> Enter event and specify your decision conditions on the transitions out
	> of that node..
	>
	> --Aziz
	>
	> ----- Original Message ---- 
	> From: Fabian Weisensee <fabian at weisensee.net>
	> To: rules-users at lists.jboss.org
	> Sent: Monday, November 12, 2007 7:35:02 AM 
	> Subject: [rules-users] Drools and jBPM integration
	>
	> Hi there
	>
	> I have some questions concerning Drools and jBPM integration.
	> I know there is this wiki page:
	> http://wiki.jboss.org/wiki/Wiki.jsp?page=JbpmAndDrools
	> but first it's not really detailed and second does it seem to be outdated.
	>
	> 1) I changed the FireRulesActionHandler from the wiki to reflect the 
	> API-changes, that at least it's compileable. In the jBPM process
	> definition the rule file is simply passed as parameter like this:
	> "/Shipper.drl". To which directory does this relative path apply? So 
	> where do I have to deploy this rule file? I tried several locations in
	> the application server, but even with an absolute path every time
	> FireRulesActionHandler tries to read the rule it crashes:
	>
	> ERROR [GraphElement] action threw exception: null
	> java.lang.NullPointerException
	>     at java.io <http://java.io/>  <http://java.io.Re <http://java.io.re/>  < http://java.io.re/ <http://java.io.re/> > >.Reader.<init>(Unknown Source)
	>     at java.io <http://java.io/>  <http://java.io.In <http://java.io.in/>  <http://java.io.in/ > >.InputStreamReader.<init>(Unknown Source)
	>     at
	> rechnung.kontrolle.FireRulesActionHandler.readRule(FireRulesActionHandler.java:83)
	>     at
	> rechnung.kontrolle.FireRulesActionHandler.execute (FireRulesActionHandler.java:50)
	>
	> 2) As I understood the example in the wiki you have to create a node
	> which executes the rule and then a decision-node which routes the
	> process flow according to the rule results. 
	> Is it possible to do this with just one node?
	> But perhaps I should ask this at the jBPM forums.
	>
	> Every help would be appreciated. Thanks in advance.
	>
	> Fabian Weisensee
	> _______________________________________________ 
	> rules-users mailing list
	> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
	> https://lists.jboss.org/mailman/listinfo/rules-users
	>
	>
	> ------------------------------------------------------------------------
	>
	> _______________________________________________
	> rules-users mailing list
	> rules-users at lists.jboss.org
	> https://lists.jboss.org/mailman/listinfo/rules-users 
	
	
	------------------------------
	
	Message: 2
	Date: Mon, 12 Nov 2007 16:35:56 -0200
	From: "Edson Tirelli" <tirelli at post.com>
	Subject: Re: [rules-users] java.lang.OutOfMemoryError: Java heap space
	To: "Rules Users List" <rules-users at lists.jboss.org>
	Message-ID:
	        < e6dd5ba30711121035j634309ebq14f21d73ad68ce36 at mail.gmail.com <mailto:e6dd5ba30711121035j634309ebq14f21d73ad68ce36 at mail.gmail.com> >
	Content-Type: text/plain; charset="iso-8859-1"
	
	   Thanks for reporting and providing workaround. I will look into fixing
	that.
	
	

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/ms-tnef
Size: 12955 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20071114/cf108ae3/attachment.bin 


More information about the rules-users mailing list