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$getPropProvince.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