[rules-users] KnowledgeAgent and Pipeline

David Zeigler dzeigler at gmail.com
Tue May 12 22:45:42 EDT 2009


I opened a Jira and attached a patch for the unit test with my case
that results in a NPE.
https://jira.jboss.org/jira/browse/JBRULES-2090

Thanks,
David

2009/5/12 Mark Proctor <mproctor at codehaus.org>:
> David Zeigler wrote:
>
> Hi Mark,
> Thanks for the quick reply.
>
> Now I'm getting a NullPointerException when I insert the message into
> the pipeline using 5.0.1.SNAPSHOT from today:
> java.lang.NullPointerException
> 	at
> org.drools.runtime.pipeline.impl.StatelessKnowledgeSessionPipelineImpl.insert(StatelessKnowledgeSessionPipelineImpl.java:24)
>
> It looks like StatelessKnowledgeSession's ruleBase is null when
> created by the KnowledgeAgent, which poses a problem since
> StatelessKnowledgeSessionPipelineImpl invokes getRootClassLoader() on
> the session's ruleBase.
>
> Here's what I'm doing:
> StatelessKnowledgeSession ksession = kagent.newStatelessKnowledgeSession();
> Pipeline pipeline =
> PipelineFactory.newStatelessKnowledgeSessionPipeline(ksession);
> pipeline.setReceiver(messageTransformer);
> pipeline.insert(message);  // NPE here
>
>
> I'm a bit busy to look into this in detail. But there is a unit test for
> this:
> http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java
> testModifyFileUrlWithStateless
>
> That test works, maybe you could do an adaption of that unit test to make it
> fail and we can add it to the test framework, and which also means I'll fix
> it asap, if it's a bug.
>
> Mark
>
> Thanks,
> David
>
> 2009/5/12 Mark Proctor <mproctor at codehaus.org>:
>
>
> David Zeigler wrote:
>
> Hi,
> I've set up the KnowledgeAgent to automatically reload the rules
> resources if they change.  If I use this with a Pipeline, it seems
> that its StatelessKnowledgeSession is not reloaded automatically.  The
> only way I've been able to get the Pipeline to reflect the rules
> change is to do the following prior to each pipeline.insert():
>
> StatelessKnowledgeSession ksession =
> kagent.getKnowledgeBase().newStatelessKnowledgeSession();
> Pipeline pipeline =
> PipelineFactory.newStatelessKnowledgeSessionPipeline(ksession);
> pipeline.setReceiver( messageTransformer );
>
> Reloading the pipeline for each request adds a lot of overhead (halves
> my transactions per second).  Is there a way to automatically reload
> the Pipeline's session when its needed instead of recreating the
> Pipeline prior to each insert?  I see there is a
> ResourceChangeListener interface that I could probably use to
> accomplish this, but I figured I'd ask in case there is a better way
> to handle this case with pipelines.  What's the best approach?
>
>
> Try trunk, it has a fix for this. Where if you get the
> StatelessKnowledgeSession directly from the knowledgeagent every execute
> will check for a new KnowledgeBase.
> https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/
>
> https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/javadocs/stable/drools-api/org/drools/agent/KnowledgeAgent.html
> KnowledgeAgent.newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf)
>  StatelessKnowledgeSession created from here will always have the execute()
> method called against the latest built KnowledgeBase.
>
> So now you can just use that returned session with the pipeline and it
> should always be using the latest rules.
>
> Mark
>
> I'm using 5.0.0.CR1.
>
> Thanks!
> David
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>




More information about the rules-users mailing list