I have a 5.4.0-SNAPSHOT version with your changes built and made the KnowledgeAgentConfiguration change you suggested.  My test code is now like this:

 

        KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();

        aconf.setProperty("drools.agent.useKBaseClassLoaderForCompiling", "true"); // new

        // KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("test", kbase, aconf, kbuilderConfig);

        KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("test", kbase, aconf);  // not passing kBuilderConfig

 

My project is attached – let me know if it doesn’t upload.

 

I can see I’m stepping threw your new code,  and I’m now getting a new error, below.

 

I can also tell you that we tried to just use the KnowledgeBuilder with custom classloader as in the Expert documentation (4.1.1) and could not get that to work either.  Stack trace follows:

 

java.lang.RuntimeException: KnowledgeAgent exception while trying to deserialize KnowledgeDefinitionsPackage 

                at org.drools.agent.impl.KnowledgeAgentImpl.createPackageFromResource(KnowledgeAgentImpl.java:770)

                at org.drools.agent.impl.KnowledgeAgentImpl.addResourcesToKnowledgeBase(KnowledgeAgentImpl.java:1029)

                at org.drools.agent.impl.KnowledgeAgentImpl.rebuildResources(KnowledgeAgentImpl.java:812)

                at org.drools.agent.impl.KnowledgeAgentImpl.buildKnowledgeBase(KnowledgeAgentImpl.java:671)

                at org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:202)

                at org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:181)

                at drools.cookbook.chapter02.KnowledgeAgentClassloaderTest.createKnowledgeBase(KnowledgeAgentClassloaderTest.java:62)

                at drools.cookbook.chapter02.KnowledgeAgentClassloaderTest.customClassloaderTest(KnowledgeAgentClassloaderTest.java:30)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

                at java.lang.reflect.Method.invoke(Method.java:601)

                at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)

                at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)

                at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)

                at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)

                at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)

                at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)

                at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)

                at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)

                at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)

                at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)

                at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)

                at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)

                at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)

                at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)

                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)

                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Caused by: java.io.OptionalDataException

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1367)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at org.drools.rule.Pattern.readExternal(Pattern.java:118)

                at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at java.util.ArrayList.readObject(ArrayList.java:733)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

                at java.lang.reflect.Method.invoke(Method.java:601)

                at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:991)

                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at org.drools.rule.GroupElement.readExternal(GroupElement.java:63)

                at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at org.drools.rule.Rule.readExternal(Rule.java:180)

                at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at java.util.IdentityHashMap.readObject(IdentityHashMap.java:1216)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

                at java.lang.reflect.Method.invoke(Method.java:601)

                at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:991)

                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at org.drools.rule.MVELDialectRuntimeData.readExternal(MVELDialectRuntimeData.java:92)

                at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at java.util.HashMap.readObject(HashMap.java:1043)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

                at java.lang.reflect.Method.invoke(Method.java:601)

                at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:991)

                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at org.drools.rule.DialectRuntimeRegistry.readExternal(DialectRuntimeRegistry.java:59)

                at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at org.drools.rule.Package.readExternal(Package.java:205)

                at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)

                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)

                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)

                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

                at org.drools.core.util.DroolsStreamUtils.streamIn(DroolsStreamUtils.java:205)

                at org.drools.core.util.DroolsStreamUtils.streamIn(DroolsStreamUtils.java:189)

                at org.drools.agent.impl.KnowledgeAgentImpl.createPackageFromResource(KnowledgeAgentImpl.java:756)

                ... 29 more

 

Thanks,

 

Herm


knowledge-agent-classloader-5.4.zip (53K) Download Attachment


View this message in context: RE: [rules-users] KnowledgeAgent custom class loader not working for PKG resources
Sent from the Drools: User forum mailing list archive at Nabble.com.