I'm pretty sure that this is a bug. When compiling a DRL from a Chenge Set, the resulting package in the Knowledge Base does not contain declare'd types that do not contain fields; it only contains declares with at least one field.
This results in a ClassObjectTypeConf with a typeDecl == null, and the damage is done. I'd say that this is a show stopper for any combination of ChangeSet / Pojo as Event. -W On 12 July 2011 19:32, John <jfull...@progeny.net> wrote: > Hello, > > I've been messing with this for days now and can't get to the bottom of > this. I'm using drools 5.2.0 Final and setting up my KnowledgeBase with a > KnowledgeAgent which is pulling a package from guvnor (also 5.2.0 Final). > I > do NOT get this error if I use a KnowledgeBuilder and add the exact same > drl > file as a resource. > > If the DRL in guvnor has a rule that uses a sliding window, i get an NPE > when trying to insert an object and the following stack trace: > > java.lang.NullPointerException > at > > org.drools.reteoo.ReteooFactHandleFactory.newFactHandle(ReteooFactHandleFactory.java:56) > at > > org.drools.common.AbstractFactHandleFactory.newFactHandle(AbstractFactHandleFactory.java:80) > at > > org.drools.common.AbstractFactHandleFactory.newFactHandle(AbstractFactHandleFactory.java:65) > at > org.drools.common.NamedEntryPoint.createHandle(NamedEntryPoint.java:705) > at > org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:282) > at > > org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:905) > at > > org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:864) > at > > org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:255) > at john.DroolsError.runRules(DroolsError.java:48) > at john.DroolsError.main(DroolsError.java:40) > > Here is the DRL: > > 1. | package drools > 2. | import simple.SimpleType > 3. | > 4. | > 5. | > 6. | > 7. | > 8. | > 9. | import simple.SimpleType; > 10. | > 11. | declare SimpleType > 12. | @role(event) > 13. | end > 14. | > 15. | rule "timer" > 16. | timer (cron:5/5 * * * * ?) > 17. | when > 18. | $newest : Number() > 19. | from accumulate( SimpleType ($num : number) over > window:time(5s), > 20. | max($num) ) > 21. | $st : SimpleType( number == $newest.intValue ) > 22. | then > 23. | System.out.println("SimpleType: " + $st.number); > 24. | end > (note: the first import of simple.SimpleType comes from the package > configuration in guvnor, the second is in the drl file itself. the file > will > not validate without the import explicitly listed there, saying the type is > not declared as an event...) > > Here is the Java code: > > ResourceChangeScannerConfiguration sconf = ResourceFactory > .getResourceChangeScannerService() > .newResourceChangeScannerConfiguration(); > sconf.setProperty("drools.resource.scanner.interval", "20"); > > ResourceFactory.getResourceChangeScannerService().configure(sconf); > > KnowledgeBaseConfiguration config = KnowledgeBaseFactory > .newKnowledgeBaseConfiguration(); > config.setOption(EventProcessingOption.STREAM); > > KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory > .newKnowledgeAgentConfiguration(); > aconf.setProperty("drools.agent.scanDirectories", "true"); > aconf.setProperty("drools.agent.scanResources", "true"); > aconf.setProperty("drools.agent.newInstance", "false"); > KnowledgeBase kbase = > KnowledgeBaseFactory.newKnowledgeBase(config); > KnowledgeAgent kagent = > KnowledgeAgentFactory.newKnowledgeAgent( > "drools agent", kbase, aconf); > > String urlString = > " > http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/drools/LATEST/ChangeSet.xml > "; > try { > URL url = new URL(urlString); > UrlResource urlResource = (UrlResource) > ResourceFactory > .newUrlResource(url); > urlResource.setBasicAuthentication("enabled"); > urlResource.setUsername("John"); > urlResource.setPassword(""); > kagent.applyChangeSet(urlResource); > } catch (Exception e) { > System.out.println("Caught exception: " + > e.getMessage()); > e.printStackTrace(); > } > > ResourceFactory.getResourceChangeNotifierService().start(); > ResourceFactory.getResourceChangeScannerService().start(); > > StatefulKnowledgeSession ksession = > kbase.newStatefulKnowledgeSession(); > System.out.println("Initialize drools complete"); > > SimpleType simp = new SimpleType(); > simp.setNumber(5); > > ksession.insert(simp); > > Thanks, > John > > -- > View this message in context: > http://drools.46999.n3.nabble.com/NPE-on-fact-insertion-if-rule-has-sliding-window-tp3163261p3163261.html > Sent from the Drools: User forum mailing list archive at Nabble.com. > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users