Drools 5.1.1
I create a package from a decision table:
ObjectOutputStream
out;
try
{
out
= new ObjectOutputStream(new FileOutputStream(“venue.pkg”));
out.writeObject(knowledgeBase.getKnowledgePackages());
// knowledgeBase previously loaded from spreadsheet
out.close();
}
catch (IOException ex) {
logger.debug(ex.getMessage());
}
I can load this package directly into a knowledge base and
run rules with no errors:
ObjectInputStream
in;
Collection<KnowledgePackage>
packages = null;
try
{
in
= new ObjectInputStream(new FileInputStream(“venue.pkg”));
packages
= (Collection<KnowledgePackage>) in.readObject();
in.close();
}
catch (Exception ex) {
logger.debug(ex.getMessage());
}
knowledgeBase.addKnowledgePackages(packages);
HOWEVER if I try to load the same package using a knowledge
agent:
KnowledgeAgent
kagent = KnowledgeAgentFactory.newKnowledgeAgent("TheAgent");
kagent.applyChangeSet(ResourceFactory.newFileResource(“ChangeSet.xml”));
The package does not load. Any idea of the cause of
these exceptions?
[2011:06:165 10:06:159:info] ResourceChangeNotification
created
[2011:06:165 10:06:161:info] ResourceChangeScanner
reconfigured with interval=60
[2011:06:165 10:06:161:info] ResourceChangeScanner created
with default interval=60
[2011:06:165 10:06:162:debug] ResourceChangeNotification
monitor added monitor=org.drools.io.impl.ResourceChangeScannerImpl@5c73a7ab
[2011:06:165 10:06:163:debug] KnowledgeAgent building
resource map
[2011:06:165 10:06:163:info] KnowledegAgent has started listening
for ChangeSet notifications
[2011:06:165 10:06:163:info] KnowledgeAgent created, with
configuration:
monitorChangeSetEvents=true scanResources=true
scanDirectories=true newInstance=true
[2011:06:165 10:06:413:info] KnowledgeAgent applying ChangeSet
[2011:06:165 10:06:415:debug] KnowledgeAgent notifier
subscribing to resource=[ClassPathResource
path='com/abclegal/rules/resources/venue.pkg']
[2011:06:165 10:06:415:debug] ResourceChangeNotification
subscribing listener=org.drools.agent.impl.KnowledgeAgentImpl@5fe0f2f6 to
resource=[ClassPathResource path='com/abclegal/rules/resources/venue.pkg']
[2011:06:165 10:06:416:debug] ResourceChangeScanner
subcribing notifier=org.drools.io.impl.ResourceChangeNotifierImpl@296f25a7 to
resource=[ClassPathResource path='com/abclegal/rules/resources/venue.pkg']
[2011:06:165 10:06:416:debug] KnowledgeAgent rebuilding
KnowledgeBase using ChangeSet
[2011:06:165 10:06:556:exception]
java.lang.RuntimeException: KnowledgeAgent exception while
trying to deserialize KnowledgeDefinitionsPackage
at
org.drools.agent.impl.KnowledgeAgentImpl.createPackageFromResource(KnowledgeAgentImpl.java:664)
at
org.drools.agent.impl.KnowledgeAgentImpl.addResourcesToKnowledgeBase(KnowledgeAgentImpl.java:889)
at org.drools.agent.impl.KnowledgeAgentImpl.rebuildResources(KnowledgeAgentImpl.java:704)
at
org.drools.agent.impl.KnowledgeAgentImpl.buildKnowledgeBase(KnowledgeAgentImpl.java:584)
at
org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:185)
at
org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:168)
at
com.abclegal.rules.RulesUtilities.createKnowledgeBaseUsingAgent(RulesUtilities.java:91)
at
com.abclegal.rules.RulesBenchmarks.benchmarkVenueSelection(RulesBenchmarks.java:39)
at
com.abclegal.rules.RulesBenchmarks.main(RulesBenchmarks.java:33)
Caused by: java.lang.ClassCastException: [B cannot be cast
to org.drools.rule.DialectRuntimeRegistry
at
org.drools.rule.Package.readExternal(Package.java:197)
at
org.drools.definitions.impl.KnowledgePackageImp.readExternal(KnowledgePackageImp.java:115)
at
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1791)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at
java.util.ArrayList.readObject(ArrayList.java:593)
at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at
java.lang.reflect.Method.invoke(Method.java:597)
at
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at
org.drools.core.util.DroolsStreamUtils.streamIn(DroolsStreamUtils.java:205)
at
org.drools.core.util.DroolsStreamUtils.streamIn(DroolsStreamUtils.java:174)
at
org.drools.agent.impl.KnowledgeAgentImpl.createPackageFromResource(KnowledgeAgentImpl.java:653)
... 8 more
[2011:06:165 10:06:856:debug] KnowledgeAgent obtaining pkg
resource=[ClassPathResource path='com/abclegal/rules/resources/venue.pkg']
[2011:06:165 10:06:856:exception]
java.lang.RuntimeException: KnowledgeAgent exception while
trying to deserialize KnowledgeDefinitionsPackage
at
org.drools.agent.impl.KnowledgeAgentImpl.addResourcesToKnowledgeBase(KnowledgeAgentImpl.java:914)
at
org.drools.agent.impl.KnowledgeAgentImpl.rebuildResources(KnowledgeAgentImpl.java:704)
at
org.drools.agent.impl.KnowledgeAgentImpl.buildKnowledgeBase(KnowledgeAgentImpl.java:584)
at
org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:185)
at
org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:168)
at
com.abclegal.rules.RulesUtilities.createKnowledgeBaseUsingAgent(RulesUtilities.java:91)
at
com.abclegal.rules.RulesBenchmarks.benchmarkVenueSelection(RulesBenchmarks.java:39)
at
com.abclegal.rules.RulesBenchmarks.main(RulesBenchmarks.java:33)
Caused by: java.lang.NullPointerException
at
org.drools.agent.impl.KnowledgeAgentImpl.addResourcesToKnowledgeBase(KnowledgeAgentImpl.java:906)
... 7 more
[2011:06:165 10:06:865:info] KnowledgeAgent new
KnowledgeBase now built and in use
[2011:06:165 10:06:865:debug] KnowledgeAgent finished
rebuilding KnowledgeBase using ChangeSet