[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