<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Hi,</div><div><br></div><div>I hope someone can help me with this.&nbsp;</div><div><br></div><div>I are running Drools 5.0.0.CR1 using JANINO to compile a spreadsheet into rules. I have lots of tests that prove the compilation is working properly and the rules are correct.&nbsp;</div><div><br></div><div>Every now and then (twice in two months) we have had the following exception start appearing and the rules stop working at all. The error occurs after the system has been running for a while and at a point in the application that has been visited many many times before the error appears.</div><div><br></div><div>Caused by: java.lang.OutOfMemoryError</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at java.util.zip.ZipFile.open(Native Method)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at java.util.zip.ZipFile.&lt;init&gt;(ZipFile.java:203)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at java.util.jar.JarFile.&lt;init&gt;(JarFile.java:132)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at java.util.jar.JarFile.&lt;init&gt;(JarFile.java:97)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.apache.catalina.loader.WebappClassLoader.openJARs(WebappClassLoader.java:1724)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.apache.catalina.loader.WebappClassLoader.findResources(WebappClassLoader.java:991)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at java.lang.ClassLoader.getResources(ClassLoader.java:1015)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.drools.util.ChainedProperties.getResources(ChainedProperties.java:155)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.drools.util.ChainedProperties.&lt;init&gt;(ChainedProperties.java:79)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.drools.util.ChainedProperties.&lt;init&gt;(ChainedProperties.java:41)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.drools.util.ChainedProperties.&lt;init&gt;(ChainedProperties.java:35)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.drools.SessionConfiguration.init(SessionConfiguration.java:112)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.drools.SessionConfiguration.&lt;init&gt;(SessionConfiguration.java:106)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.drools.reteoo.ReteooStatelessSession.newWorkingMemory(ReteooStatelessSession.java:86)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at org.drools.reteoo.ReteooStatelessSession.execute(ReteooStatelessSession.java:185)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at com.base2.ecm.just.service.product.LocalRulesEngine.apply(LocalRulesEngine.java:49)</div><div>2010-02-16 02:28:38,143 ERROR [STDERR]&nbsp;<span class="Apple-tab-span" style="white-space: pre; ">        </span>at com.base2.ecm.just.service.product.PublishingDetailsServiceImpl.getPublishingDetails(PublishingDetailsServiceImpl.java:41)</div><div><br></div><div>Here is the code:</div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(127, 0, 85); ">&nbsp;&nbsp; &nbsp;private<span style="color: #000000"> </span>static<span style="color: #000000"> RuleBase </span><span style="color: #0000c0">ruleBase</span><span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(0, 0, 192); "><span style="color: #000000">&nbsp;&nbsp; &nbsp;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; <span style="color: #7f0055">public</span> <span style="color: #7f0055">void</span> apply(PublishingDetails publishingDetails, Advertisement advertisment)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; StatelessSession statelessSession = getStatelessSession();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; statelessSession.setGlobal(<span style="color: #2a00ff">"du"</span>,<span style="color: #7f0055">new</span> DateUtils());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; Object[] facts = {publishingDetails, advertisment};</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; statelessSession.execute(facts);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; }</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px">&nbsp;&nbsp; &nbsp;<br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; <span style="color: #7f0055">public</span> <span style="color: #7f0055">void</span> apply(Publication publication)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; StatelessSession statelessSession = getStatelessSession();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; statelessSession.setGlobal(<span style="color: #2a00ff">"du"</span>,<span style="color: #7f0055">new</span> DateUtils());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; statelessSession.execute(publication);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; <span style="color: #7f0055">private</span> StatelessSession getStatelessSession()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055">if</span> (<span style="color: #0000c0">ruleBase</span> == <span style="color: #7f0055">null</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initRuleBase();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; StatelessSession statelessSession = <span style="color: #0000c0">ruleBase</span>.newStatelessSession();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055">return</span> statelessSession;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; <span style="color: #7f0055">private</span> <span style="color: #7f0055">void</span> initRuleBase()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; Properties properties = <span style="color: #7f0055">new</span> Properties();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(42, 0, 255); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; properties.setProperty(</span>"drools.dialect.java.compiler"<span style="color: #000000">, </span>"JANINO"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; PackageBuilderConfiguration conf = <span style="color: #7f0055">new</span> PackageBuilderConfiguration(properties);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; PackageBuilder builder = <span style="color: #7f0055">new</span> PackageBuilder(conf);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055">try</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SpreadsheetCompiler compiler = <span style="color: #7f0055">new</span> SpreadsheetCompiler();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String drl = compiler.compile(getSpreadsheetStream(), InputType.<span style="color: #0000c0">XLS</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;builder.addPackageFromDrl(<span style="color: #7f0055">new</span> StringReader(drl));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055">catch</span> (DroolsParserException e)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(42, 0, 255); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #7f0055">throw</span><span style="color: #000000"> </span><span style="color: #7f0055">new</span><span style="color: #000000"> RuntimeException(</span>"DroolsParserException when parsing the drools package"<span style="color: #000000">, e);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055">catch</span> (IOException e)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(42, 0, 255); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #7f0055">throw</span><span style="color: #000000"> </span><span style="color: #7f0055">new</span><span style="color: #000000"> RuntimeException(</span>"IOException when loading the drools package"<span style="color: #000000">, e);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; PackageBuilderErrors errors = builder.getErrors();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055">if</span> (errors != <span style="color: #7f0055">null</span> &amp;&amp; !errors.isEmpty())</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055">for</span> (KnowledgeBuilderError error : errors)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000c0">LOG</span>.error(error.getMessage());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(42, 0, 255); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #7f0055">throw</span><span style="color: #000000"> </span><span style="color: #7f0055">new</span><span style="color: #000000"> RuntimeException(</span>"There were errors in the drl file"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; Package pkg = builder.getPackage();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000c0">ruleBase</span> = RuleBaseFactory.newRuleBase();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000c0">ruleBase</span>.addPackage(pkg);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">As I said before the loading of the rules is OK. I'm wondering if keeping a static reference to the RuleBase might be the issue?</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">The exception looks like Drools is trying to load a jar file at runtime. Maybe there is a problem with the container (Jboss 4.2.2)?</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">If someone could confirm that I'm not doing anything wrong by keeping a static reference to the RuleBase that would be appreciated. Note that the system runs perfectly and then starts throwing this exception with no apparent pattern to the failure.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">Cheers</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">James</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><br></div></div></body></html>