<br>&nbsp;&nbsp; You must update to <a href="http://4.0.7.">4.0.7.</a> You are probably facing the issues we had in <a href="http://4.0.3.">4.0.3.</a><br><br>&nbsp;&nbsp; []s<br>&nbsp;&nbsp; Edson<br><br><div class="gmail_quote">2008/5/7 Barath &lt;<a href="mailto:barathguna@gmail.com">barathguna@gmail.com</a>&gt;:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Edson,<br>
I am using &nbsp;4.0.3 version.<br>
<br>
In my code,<br>
&nbsp;* For each thread new rule base and StatefulSession is created.<br>
&nbsp;* Then why i am getting the previously mentioned exceptions(which i posted<br>
in the first message) for few &nbsp; &nbsp;threads only while other works fine.<br>
&nbsp;* Your suggestions please,<br>
<div class="Ih2E3d"> &nbsp; &nbsp;&quot; 1 . Am i getting this error bcoz of the global list? or any other<br>
reason?<br>
 &nbsp; &nbsp; &nbsp;2 . How to solve this problem?&quot;<br>
<br>
</div>~Barath.<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
Edson Tirelli-3 wrote:<br>
&gt;<br>
&gt; &nbsp; &nbsp;Barath,<br>
&gt;<br>
&gt; &nbsp; &nbsp;What version of drools are you using?<br>
&gt;<br>
&gt; &nbsp; &nbsp;The drools rulebase is designed to be shared among multiple threads.<br>
&gt; The<br>
&gt; working memory (session) is not.<br>
&gt; &nbsp; &nbsp;Having said that, we had a couple bugs in the past regarding<br>
&gt; multi-thread<br>
&gt; environments, and so you must use 4.0.7 version that is about to be<br>
&gt; released. For you test, while you wait for the official release, you can<br>
&gt; checkout the code and built it from here:<br>
&gt;<br>
&gt; <a href="http://anonsvn.labs.jboss.com/labs/jbossrules/branches/4.0.x/" target="_blank">http://anonsvn.labs.jboss.com/labs/jbossrules/branches/4.0.x/</a><br>
&gt;<br>
&gt; &nbsp; &nbsp;[]s<br>
&gt; &nbsp; &nbsp;Edson<br>
&gt;<br>
&gt; 2008/5/5 Barath &lt;<a href="mailto:barathguna@gmail.com">barathguna@gmail.com</a>&gt;:<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt;<br>
&gt;&gt; While doing a load test with jmeter,my web service application with<br>
&gt;&gt; drools<br>
&gt;&gt; works fine for few clients(5 simultaneous hits for 10 times)<br>
&gt;&gt; but when i increase my clients(120 simultanious hits for 100 times) i am<br>
&gt;&gt; gettin the following exception for<br>
&gt;&gt; few client, (out of 12,000 hits 200 throws this exception)<br>
&gt;&gt;<br>
&gt;&gt; problem encountered at node [11] 5{170,189}: unable to resolve property:<br>
&gt;&gt; null pointer exception in property: declr.identifier<br>
&gt;&gt; org.mvel.TemplateInterpreter.execute(TemplateInterpreter.java:528)<br>
&gt;&gt; org.mvel.TemplateInterpreter.parse(TemplateInterpreter.java:341)<br>
&gt;&gt;<br>
&gt;&gt; org.drools.rule.builder.dialect.java.AbstractJavaBuilder.generatTemplates(AbstractJavaBuilder.java:113)<br>
&gt;&gt;<br>
&gt;&gt; org.drools.rule.builder.dialect.java.JavaConsequenceBuilder.build(JavaConsequenceBuilder.java:95)<br>
&gt;&gt; org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:67)<br>
&gt;&gt; org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:446)<br>
&gt;&gt; org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:304)<br>
&gt;&gt;<br>
&gt;&gt; org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:167)<br>
&gt;&gt; com.drools.util.RuleEngine.applyRule(RuleEngine.java:47)<br>
&gt;&gt;<br>
&gt;&gt; com.drools.util.DroolsController.getAdvertisement(DroolsController.java:94)<br>
&gt;&gt;<br>
&gt;&gt; com.drools.util.DroolsController.routeBusinessMethod(DroolsController.java:67)<br>
&gt;&gt;<br>
&gt;&gt; com.drools.util.DroolsController.getAdvertisement(DroolsController.java:43)<br>
&gt;&gt; com.drools.MyEndpoint.getAdvertisement(MyEndpoint.java:237)<br>
&gt;&gt; com.drools.MyEndpoint.process(MyEndpoint.java:144)<br>
&gt;&gt;<br>
&gt;&gt; org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)<br>
&gt;&gt;<br>
&gt;&gt; org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)<br>
&gt;&gt;<br>
&gt;&gt; org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)<br>
&gt;&gt;<br>
&gt;&gt; org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:595)<br>
&gt;&gt;<br>
&gt;&gt; org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)<br>
&gt;&gt;<br>
&gt;&gt; org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)<br>
&gt;&gt;<br>
&gt;&gt; org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)<br>
&gt;&gt;<br>
&gt;&gt; edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)<br>
&gt;&gt;<br>
&gt;&gt; edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)<br>
&gt;&gt; java.lang.Thread.run(Thread.java:619)<br>
&gt;&gt;<br>
&gt;&gt; drl file has 6 rules,<br>
&gt;&gt; 5 rules &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - which retract facts which passes the rule.<br>
&gt;&gt; 1 rule(low salience) &nbsp;- will add the fact to java.util.List (set as<br>
&gt;&gt; global)<br>
&gt;&gt; which passes the rule.<br>
&gt;&gt;<br>
&gt;&gt; 1 . Am i getting this error bcoz of the global list? or any other reason?<br>
&gt;&gt; 2 . How to solve this problem?<br>
&gt;&gt;<br>
&gt;&gt; here the rules,<br>
&gt;&gt;<br>
&gt;&gt; &lt;code&gt;<br>
&gt;&gt; global java.util.List feasibleAdv;<br>
&gt;&gt;<br>
&gt;&gt; rule &quot; percentage rule &quot;<br>
&gt;&gt; &nbsp; &nbsp;when<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;$adv : Advertisement( percentageLimit != 0 , percentageLimit &lt;<br>
&gt;&gt; playedPercentage )<br>
&gt;&gt; &nbsp; &nbsp;then<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(&quot;remove this adv (failed percentage):<br>
&gt;&gt; &quot;+$adv.getAdvertisementID());<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;retract($adv);<br>
&gt;&gt; end<br>
&gt;&gt;<br>
&gt;&gt; rule &quot;per day rule&quot;<br>
&gt;&gt; &nbsp; &nbsp;when<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;$adv : Advertisement( limitperday != 0 , limitperday &lt;=<br>
&gt;&gt; playedperday<br>
&gt;&gt; )<br>
&gt;&gt; &nbsp; &nbsp;then<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;//System.out.println(&quot;remove this adv (failed day):<br>
&gt;&gt; &quot;+$adv.getAdvertisementID());<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;retract($adv);<br>
&gt;&gt; end<br>
&gt;&gt;<br>
&gt;&gt; rule &quot;per week rule&quot;<br>
&gt;&gt; &nbsp; &nbsp;when<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;$adv : Advertisement( limitperweek != 0 , limitperweek &lt;=<br>
&gt;&gt; playedperweek)<br>
&gt;&gt; &nbsp; &nbsp;then<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;//System.out.println(&quot;remove this adv (failed week):<br>
&gt;&gt; &quot;+$adv.getAdvertisementID());<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;retract($adv);<br>
&gt;&gt; end<br>
&gt;&gt;<br>
&gt;&gt; rule &quot;per month rule&quot;<br>
&gt;&gt; &nbsp; &nbsp;when<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;$adv : Advertisement( limitpermonth != 0 , limitpermonth &lt;=<br>
&gt;&gt; playedpermonth)<br>
&gt;&gt; &nbsp; &nbsp;then<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;//System.out.println(&quot;remove this adv (failed month) :<br>
&gt;&gt; &quot;+$adv.getAdvertisementID());<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;retract($adv);<br>
&gt;&gt; end<br>
&gt;&gt;<br>
&gt;&gt; rule &quot;total played rule&quot;<br>
&gt;&gt; &nbsp; &nbsp;when<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;$adv : Advertisement( totallimit != 0 , totallimit &lt;= totalplayed<br>
&gt;&gt; )<br>
&gt;&gt; &nbsp; &nbsp;then<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;//System.out.println(&quot;remove this adv (failed total played) :<br>
&gt;&gt; &quot;+$adv.getAdvertisementID());<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;retract($adv);<br>
&gt;&gt; end<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; rule &quot;advertisement select rule&quot;<br>
&gt;&gt; salience -1<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;when<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$adv : Advertisement( $playedPercentPerAdvertisement :<br>
&gt;&gt; playedPercentPerAdvertisement)<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;not( Advertisement( playedPercentPerAdvertisement &lt;<br>
&gt;&gt; $playedPercentPerAdvertisement ) )<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$advertisementCount : Integer()<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;then<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;boolean status = true;<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if($advertisementCount-1 &lt; 0){<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//System.out.println(&quot;halted&quot;);<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;status = false;<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;drools.halt();<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(status){<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;feasibleAdv.add($adv);<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;drools.update(<br>
&gt;&gt; drools.getWorkingMemory().getFactHandle($advertisementCount), new<br>
&gt;&gt; Integer($advertisementCount-1) );<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;retract($adv);<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt;&gt; end<br>
&gt;&gt;<br>
&gt;&gt; &lt;/code&gt;<br>
&gt;&gt; --<br>
&gt;&gt; View this message in context:<br>
&gt;&gt; <a href="http://www.nabble.com/Can-drools-work-in-multithreaded-environment--tp17053936p17053936.html" target="_blank">http://www.nabble.com/Can-drools-work-in-multithreaded-environment--tp17053936p17053936.html</a><br>

&gt;&gt; Sent from the drools - user mailing list archive at Nabble.com.<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; rules-users mailing list<br>
&gt;&gt; <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Edson Tirelli<br>
&gt; JBoss Drools Core Development<br>
&gt; Office: +55 11 3529-6000<br>
&gt; Mobile: +55 11 9287-5646<br>
&gt; JBoss, a division of Red Hat @ <a href="http://www.jboss.com" target="_blank">www.jboss.com</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; rules-users mailing list<br>
&gt; <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
&gt;<br>
&gt;<br>
<br>
--<br>
</div></div>View this message in context: <a href="http://www.nabble.com/Can-i-use-drools-in-multithreaded-environment--tp17053936p17097302.html" target="_blank">http://www.nabble.com/Can-i-use-drools-in-multithreaded-environment--tp17053936p17097302.html</a><br>

<div><div></div><div class="Wj3C7c">Sent from the drools - user mailing list archive at Nabble.com.<br>
<br>
_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br> Edson Tirelli<br> JBoss Drools Core Development<br> Office: +55 11 3529-6000<br> Mobile: +55 11 9287-5646<br> JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a>