[rules-users] Unable to fire Rules

Markus Helbig info at markushelbig.de
Fri Apr 4 03:59:23 EDT 2008


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
>



More information about the rules-users mailing list