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

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>
</font></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>