[rules-users] Unable to fire Rules

Hanumesh Mekala hanumesh.m at gmail.com
Mon Apr 7 03:15:19 EDT 2008


Hi Markus,

   Thanks a lot.. Now I am able to fire the rules dynamically by fetching
rules from Database.

   I have modified the code as follows:

   While filling the VO's iteself, I am concatinating the .* to the field
fileMask, and the drl code.

   And the .drl is as follows:

rule "Process ALL"
   no-loop
   when
        t:TransactionVO();
        m:Message(fileName matches t.fileMask)
  then
        System.out.println( "Reading Rule for ..." + t.getFileMask() );
        m.setFromQ(t.getFrom_Q());
       m.setToQ(t.getTo_Q());
       m.setTransType(t.getTrans_type());
       update( m );
end

Thanks again,

Hanumesh M


On 4/4/08, Markus Helbig <info at markushelbig.de> wrote:
>
> Hi,
>
> your rules represent the following Java Code (the system.out are just
> to see the result of matches)
>
>        public static void main(String[] args)
>        {
>                // You're rule
>
>
> System.out.println("ABC-834".matches("ABC-834-test-100.edi")); //false
>
> System.out.println("XYZ-834".matches("ABC-834-test-100.edi"));  // false
>
> System.out.println("834".matches("ABC-834-test-100.edi"));  // false
>
> so it could never work
>
> but maybe this is what you want to have
>
>
>                // m.fileName matches .*+fileMask+.*
>
>
>
> System.out.println("ABC-834-test-100.edi".matches(".*ABC-834.*")); //true
>
> System.out.println("ABC-834-test-100.edi".matches(".*XYZ-834.*"));
> //false, if this should also be true because fo the 834 you have to
> use regex grouping with an optional group before the -
>
> System.out.println("ABC-834-test-100.edi".matches(".*834.*")); //true
>        }
>
> Cheers
>
> Markus
>
> On Fri, Apr 4, 2008 at 9:28 AM, hanumesh.m <hanumesh.m at gmail.com> wrote:
> >
> >  Hi,
> >
> >   I am inserting message(fileName, fromQ,toQ,transType) to
> WorkingMemory.
> >  fileName as "ABC-834-test-100.edi"
> >
> >   I am inserting 3 instances of TrasactionVO's to workingmemory as
> follows:
> >       TransactionVO transVO = new TransactionVO("ABC-834",
> "ABC.834.EDI",
> >  "ABC.834.XML", "834");
> >       TransactionVO transVO1 = new TransactionVO("XYZ-834",
> "XYZ.834.EDI",
> >  "XYZ.834.XML", "834");
> >       TransactionVO transVO2 = new TransactionVO("834",
> "INBOUND.834.EDI",
> >  "INBOUND.834.XML", "834");
> >
> >   In drl, which ever object of TransactionVO matches the fileName of
> Message,
> >  then update Message's rest of the details with TransactionVO. But the
> rules
> >  are not getting fired.
> >
> >   Follewed is the testCase and .drl file along with FactObjects.
> >
> >  TestCase:
> >  -------------------------------------------------------------
> >  package com.sample;
> >
> >  import java.io.InputStreamReader;
> >  import java.io.Reader;
> >
> >  import org.drools.FactException;
> >  import org.drools.RuleBase;
> >  import org.drools.RuleBaseFactory;
> >  import org.drools.WorkingMemory;
> >  import org.drools.compiler.PackageBuilder;
> >  import org.drools.rule.Package;
> >  import com.sample.MessageEA;
> >  import com.sample.TransactionVO;
> >
> >  /**
> >   * This is a sample file to launch a rule package from a rule source
> file.
> >   */
> >  public class DroolsTest2 {
> >
> >     public static final void main(String[] args) {
> >         try {
> >
> >                 //load up the rulebase
> >             RuleBase ruleBase = readRule();
> >             WorkingMemory workingMemory = ruleBase.newStatefulSession();
> >             MessageEA messageEA = new MessageEA();
> >             messageEA.setFileName("ABC-834-test-100.edi");
> >             workingMemory.insert( messageEA );
> >
> >             TransactionVO transVO = new TransactionVO("ABC-834",
> >  "ABC.834.EDI", "ABC.834.XML", "834");
> >             TransactionVO transVO1 = new TransactionVO("XYZ-834",
> >  "XYZ.834.EDI", "XYZ.834.XML", "834");
> >             TransactionVO transVO2 = new TransactionVO("834",
> >  "INBOUND.834.EDI", "INBOUND.834.XML", "834");
> >             workingMemory.insert( transVO );
> >             workingMemory.insert( transVO1 );
> >             workingMemory.insert( transVO2);
> >             try{
> >                 workingMemory.fireAllRules();
> >             }catch (FactException e ){
> >                 System.out.println("err: "+e.getMessage());
> >             }catch(Exception ee){
> >                 System.out.println("Err2 : "+ee.getMessage());
> >             }
> >
> >             System.out.println("fName: "+messageEA.getFileName());
> >             System.out.println("frQ: "+messageEA.getFromQ());
> >             System.out.println("toQ: "+messageEA.getToQ());
> >
> >
> >         } catch (Throwable t) {
> >             t.printStackTrace();
> >         }
> >     }
> >
> >     /**
> >      * Please note that this is the "low level" rule assembly API.
> >      */
> >         private static RuleBase readRule() throws Exception {
> >                 //read in the source
> >                 Reader source = new InputStreamReader(
> >  DroolsTest.class.getResourceAsStream( "/EATech.drl" ) );
> >
> >                 //optionally read in the DSL (if you are using it).
> >                 //Reader dsl = new InputStreamReader(
> >  DroolsTest.class.getResourceAsStream( "/mylang.dsl" ) );
> >
> >                 //Use package builder to build up a rule package.
> >                 //An alternative lower level class called "DrlParser"
> can also be used...
> >
> >                 PackageBuilder builder = new PackageBuilder();
> >
> >                 //this wil parse and compile in one step
> >                 //NOTE: There are 2 methods here, the one argument one
> is for normal DRL.
> >                 builder.addPackageFromDrl( source );
> >
> >                 //Use the following instead of above if you are using a
> DSL:
> >                 //builder.addPackageFromDrl( source, dsl );
> >
> >                 //get the compiled package (which is serializable)
> >                 Package pkg = builder.getPackage();
> >
> >                 //add the package to a rulebase (deploy the rule
> package).
> >                 RuleBase ruleBase = RuleBaseFactory.newRuleBase();
> >                 ruleBase.addPackage( pkg );
> >                 return ruleBase;
> >         }
> >
> >  }
> >  -------------------------------------------
> >  .drl file
> >
> >  package com.sample;
> >
> >  import com.sample.MessageEA;
> >  import com.sample.TransactionVO;
> >
> >  rule "Process ALL"
> >   no-loop
> >   when
> >         m:MessageEA()
> >         p: TransactionVO(fileMask matches m.fileName)
> >  then
> >         System.out.println( "Reading Rule for ..." + p.getFileMask() );
> >         m.setFromQ(p.getFrom_Q());
> >         m.setToQ(p.getTo_Q());
> >         m.setTransType(p.getTransType());
> >         update( m );
> >  end
> >  ------------------------------------------------------------------
> >  MessageEA (private String transType,    private String fileName,private
> String
> >  fromQ, private String toQ)
> >  TransactionVO(private String fileMask,  private String from_Q,private
> String
> >  to_Q,private String transType);
> >  )
> >
> >
> >  This testCase has executed only Once accurately. But from later on it
> >  stopped working. Not able to file Rules..
> >
> >  I am doing wrong anywhere?
> >
> >  Please suggest.
> >  Hanumesh M
> >  --
> >  View this message in context:
> http://www.nabble.com/Unable-to-fire-Rules-tp16486801p16486801.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
> >
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080407/b8a9718e/attachment.html 


More information about the rules-users mailing list