I see that you are using the JBRules API to create rules (RuleDescr,
ColumnDescr, etc.)  Did you find documentation for these classes and
methods (other than just the java prototypes) anywhere?
 
thanks,
neil
 
Neil M. Goldman
Teknowledge Corporation
4640 Admiralty Way, Suite 1010
Marina Del Rey, CA 90292
(310) 578-5350 x204 (voice)
(310) 578-5710 (fax)
[EMAIL PROTECTED] 


  _____  

From: Damien Delautre [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, November 22, 2006 8:41 AM
To: [email protected]
Subject: [drools-user] Rules execution ClassLoader


Hello,

I have rules based on a class which is generated dynamically (my rules
are also generated dynamically).
I have found how to specify the ClassLoader to compile the rules (with
the PackageBuilderConfiguration class), but I don't know how to specify
the ClassLoader for the execution.
Can anyone tell me how to do this?
I am using JBRules 3.0.4.

Thanks

    Damien

My code:

            Class elementClass = ((ListImpl)
contact.getList()).getElementClass(clmSession);
            String className = elementClass.getSimpleName();
            String fullClassName = elementClass.getName();
            
            PackageBuilderConfiguration config = new
PackageBuilderConfiguration();
            config.setClassLoader(contact.getClass().getClassLoader());
            PackageBuilder builder = new PackageBuilder(config);

            PackageDescr pack = new
PackageDescr("com.konversation.core.condition");
            pack.addImport(fullClassName);
            RuleDescr ruleDescr = new RuleDescr("Province = QC");
            AndDescr and = new AndDescr();
            ColumnDescr column = new ColumnDescr(className, "contact");
            LiteralDescr fieldConstraint = new
LiteralDescr("propProvince", "==", "QC");
            column.addDescr(fieldConstraint);
            and.addDescr(column);
            ruleDescr.setLhs(and);
            ruleDescr.setConsequence("System.out.println(\"province =
QC\");");
            pack.addRule(ruleDescr);
           
            builder.addPackage(pack);
            RuleBase ruleBase = RuleBaseFactory.newRuleBase();
            ruleBase.addPackage( builder.getPackage() );
   
            WorkingMemory workingMemory = ruleBase.newWorkingMemory();
            FactHandle handle = workingMemory.assertObject(contact);
            workingMemory.fireAllRules();

The DRL generated :
            package com.konversation.core.condition;

            import com.konversation.worlds.List67ElementImpl;



            rule "Province = QC" 
                 when
                    contact : List67ElementImpl( propProvince == "QC" )

                 then
                    System.out.println("province = QC");
            end

The exception:
            java.lang.NoClassDefFoundError:
com/konversation/worlds/List67ElementImpl
                at
org.drools.base.com.konversation.worlds.List67ElementImpl$getPropProvinc
e.getValue(Unknown Source)
                at org.drools.base.ClassFieldExtractor.getValue(Unknown
Source)
                at org.drools.reteoo.AlphaNodeSwitch.getNode(Unknown
Source)
                at
org.drools.reteoo.HashedObjectSinkList$1.hasNext(Unknown Source)
                at
org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown Source)
                at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown
Source)
                at org.drools.reteoo.Rete.assertObject(Unknown Source)
                at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown
Source)
                at
org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown Source)
                at
org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source)
                at
org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source) 

Reply via email to