[rules-users] NPE on fact insertion if rule has sliding window

Wolfgang Laun wolfgang.laun at gmail.com
Wed Jul 13 09:05:43 EDT 2011


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 <jfullard at 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110713/851e662f/attachment.html 


More information about the rules-users mailing list