[rules-users] Help on using Drools with embedded objects

Greg Barton greg_barton at yahoo.com
Mon Mar 2 10:33:25 EST 2009


You've answered your own question.  The method is non-static.  You must call it on a particular instance.  You can pass the instance in as a global variable or match on it in the rule.

global com.test.serviceImpl.StaffingFormMailingServiceImpl foo;

or

when
  $s:StaffingForm(...)
  $f:StaffingFormMailingServiceImpl()
then
  ...
end

Unless you have multiple StaffingFormMailingServiceImpl instances, the first option is best.

--- On Mon, 3/2/09, D1vy@@Ind1@ <divya.rajendranath at gmail.com> wrote:

> From: D1vy@@Ind1@ <divya.rajendranath at gmail.com>
> Subject: Re: [rules-users] Help on using Drools with embedded objects
> To: rules-users at lists.jboss.org
> Date: Monday, March 2, 2009, 3:07 AM
> I have still not found a solution to the problem.
> 
> The problem is that I have a non static function in my
> service class and i
> have to call thhat from my drools rule file.
> 
> The function basically accepts a mail id and if a mailing
> list returns an
> arraylist of the individual mail ids in the mailing list.
> 
> my drl file looks like this:
> 
> ========================================================
> package com.test.ams.rule
> 
> dialect "java"
> 
> import java.util.ArrayList;
> import org.json.JSONArray;
> import java.net.HttpURLConnection;
> import java.net.URL;
> import java.io.InputStream;
> import java.io.InputStreamReader;
> import java.io.BufferedReader;
> 
> import com.test.domobjects.StaffingForm;
> import com.test.domobjects.StaffingFormOfferDetails;
> import com.test.domobjects.OfferResponseType;
> import function
> com.test.serviceImpl.StaffingFormMailingServiceImpl.expandTheMailingList;
> 
> global java.util.HashMap myOSFRecipientsMap;
> 
> rule "Part A"
> 	salience 20
> 	no-loop true
> 	when
> 		$s:StaffingForm(staffingFormOfferDetails.offerValue==
> true && 
> 						staffingFormOfferDetails.offerResponseType.offerResponseTypeName
> ==
> "Accepted")
> 		then
> 	
> $s.setPartARecipients((ArrayList<String>)expandTheMailingList((String)myOSFRecipientsMap.get("PART_A_EXEC_COMMITTEE")));
> 	
> $s.setPartARecipients((String)myOSFRecipientsMap.get("PART_A_CONFIDENTIAL"));
> 		$s.setPartARecipients((String)myOSFRecipientsMap.get("PART_A_PAYROLL"));
> 		update($s);
> 	end
> ========================================================
> 
> 
> This gives me an exception -- java.lang.RuntimeException:
> Unable to compile
> "the.drl".
> 
> Please let me know what is the problem here.
> 
> 
> Thanks
> -D
> 
> 
> 
> D1vy@@Ind1@ wrote:
> > 
> > A couple of more questions,
> > 
> > I am calling my rules engine from a service and into
> the session i am
> > inserting the business object.
> > 
> > In my service class, I have a few helper functions,
> which I need to call
> > from my drl file.
> > 
> > How can I do that ?
> > 
> > Thanks
> > -D
> > 
> > 
> > 
> > Corneil du Plessis wrote:
> >> 
> >> You should initialise your globals and then pass
> them into the session.
> >> Your rule file will have:
> >> 
> >> global java.lang.String recipients
> >> global java.lang.String to
> >> global java.lang.String cc
> >> 
> >> 
> >> On Mon, 2009-02-23 at 06:23 -0800, D1vy@@Ind1@
> wrote:
> >> 
> >>> Thanks for your help , Sudhir, 
> >>> 
> >>> I used 
> >>> 
> >>> rule
> >>> when $a:A(b.z.s=="test");
> >>> then
> >>> end
> >>> 
> >>> And that solved my problem.
> >>> 
> >>> But I would like to know one more information
> about global variables.
> >>> 
> >>> package...
> >>> dialect java
> >>> import ..,
> >>> 
> >>> global java.lang.String
> recipients="divya at gmail.com"
> >>> global java.lang.String
> to="xyz at yahoo.com"
> >>> global java.lang.String
> cc="abc at gmail.com"
> >>> 
> >>> rule
> >>> when when $a:A(b.z.s=="divya");
> >>> then
> >>> $a.setRecipients(recipients);
> >>> $a.setTo(to);
> >>> $a.setCC(cc);
> >>> update($a)
> >>> end
> >>> 
> >>> Is this feasible with Drools. I get 
> >>> 
> >>> unable to comile myfile.drl file
> >>> [9,40]: unknown:9:40 mismatched token:
> [@49,201:201='=',<71>,9:40];
> >>> E
> >>> 
> >>> exception. Could you please help me with this
> too.
> >>> 
> >>> 
> >>> Thanks
> >>> -D
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> Sudhir M-2 wrote:
> >>> > 
> >>> > Hi D,
> >>> > I don't know which version of drools
> are you using. If u are using
> >>> drools
> >>> > 4
> >>> > or higher you can use 'from'  to
> write rules on nested objects. All u
> >>> need
> >>> > to do is insert the root pbject in the
> working memory
> >>> > 
> >>> > Regards,
> >>> > sudhir.
> >>> > 
> >>> > On Mon, Feb 23, 2009 at 2:56 PM, Divya
> Rajendranath <
> >>> > divya.rajendranath at gmail.com> wrote:
> >>> > 
> >>> >> Hi,
> >>> >>
> >>> >> I am planning to use Drools - JBoss
> Rules Engine. My requirement is
> >>> to
> >>> >> disburse mails from my application to
> different groups based on
> >>> various
> >>> >> criteria. I want to use Drools here.
> >>> >>
> >>> >> My object structure is as follows:
> >>> >>
> >>> >> class A{
> >>> >>
> >>> >> String B = "";
> >>> >>
> >>> >> B b;
> >>> >>
> >>> >> C c;
> >>> >> }
> >>> >>
> >>> >> Hence Obj A has embedded objects
> within it, and obj B and C further
> >>> has
> >>> >> embedded objects.
> >>> >>
> >>> >> class B {
> >>> >>
> >>> >> String X;
> >>> >>
> >>> >> Z z;
> >>> >>
> >>> >> }
> >>> >>
> >>> >> class Z{
> >>> >>
> >>> >> String t;
> >>> >>
> >>> >> String s;
> >>> >>
> >>> >> }
> >>> >>
> >>> >> The decision on sending the mails
> based on the fields in embedded
> >>> objects
> >>> >> of A. I pass instance of A to Drools
> >>> >>
> >>> >> Format of drl file:
> >>> >>
> >>> >> package...;
> >>> >>
> >>> >> import ..;
> >>> >>
> >>> >> rule "Test"
> >>> >>
> >>> >> when $a:A(B(Z(s ==
> "testvalue")))
> >>> >>
> >>> >> then
> >>> >>
> >>> >> $a.setSomething();
> >>> >>
> >>> >> update($a);
> >>> >>
> >>> >> end
> >>> >>
> >>> >> I wanted to know if this (accessing
> fields in embedded/child object)
> >>> is
> >>> >> feasible with Drools.
> >>> >>
> >>> >> I get an error saying "UNable to
> compile myfile.drl when i try to fo
> >>> >> this.
> >>> >>
> >>> >> Could some one look into this issue
> and let me know the reason for
> >>> this ?
> >>> >>
> >>> >>
> >>> >>
> >>> >> Thanks
> >>> >>
> >>> >> -D
> >>> >>
> >>> >>
> _______________________________________________
> >>> >> rules-users mailing list
> >>> >> 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
> >>> > 
> >>> > 
> >>> 
> >> 
> >> _______________________________________________
> >> rules-users mailing list
> >> rules-users at lists.jboss.org
> >>
> https://lists.jboss.org/mailman/listinfo/rules-users
> >> 
> >> 
> > 
> > 
> 
> -- 
> View this message in context:
> http://www.nabble.com/Help-on-using-Drools-with-embedded-objects-tp22158087p22283483.html
> Sent from the drools - user mailing list archive at
> Nabble.com.
> 
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users


      



More information about the rules-users mailing list