[rules-users] Help on using Drools with embedded objects
D1vy@@Ind1@
divya.rajendranath at gmail.com
Mon Mar 2 04:07:36 EST 2009
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.
More information about the rules-users
mailing list