[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