Pierre,<br><br>There is no need to rebuild the entire rules base with each thread.&nbsp; You can build the rule base statically at startup.&nbsp; Then within your thread&#39;s just do:<br><br>// Note this is 4.0 syntax:<br>final StatefulSession session = 
ruleBase.newStatefulSession();<br><br>A single working memory is thread safe and the call in the ruleBase to create it is as well.<br><br>Ron<br><br><div><span class="gmail_quote">On 7/10/07, <b class="gmail_sendername">Pierre Paysant-Le Roux
</b> &lt;<a href="mailto:pierre.paysant_leroux@travelsoft.fr">pierre.paysant_leroux@travelsoft.fr</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>I have a problem using Drools in a multi thread program. I want that<br>several threads use there own working memory. There is an error when two<br>thread are building the same PackageBuilder at the same time. The<br>
exception is:&nbsp;&nbsp;java.lang.LinkageError: duplicate class definition.<br><br>Here is a simple program that generates the error.<br><br>package com.sample;<br><br>import java.io.IOException;<br>import java.io.InputStreamReader
;<br><br>import org.drools.compiler.DroolsParserException;<br>import org.drools.compiler.PackageBuilder;<br>import org.drools.compiler.PackageBuilderConfiguration;<br><br>public class TestThreads {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int i = 0; i&lt;2 ; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DroolsThread tt = new DroolsThread();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt.start();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;public static class DroolsThread extends Thread {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void run() {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PackageBuilderConfiguration pkgBuilderCfg =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new PackageBuilderConfiguration();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PackageBuilder builder = new PackageBuilder(pkgBuilderCfg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
builder.addPackageFromDrl(new<br>InputStreamReader(DroolsTest.class.getResourceAsStream( &quot;/Sample.drl&quot; )));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (DroolsParserException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br><br>I don&#39;t understand what to do to avoid the exception : using<br>&quot;synchronized&quot; somewhere ? Can someone help me please ?
<br>Thanks<br>Pierre<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">
https://lists.jboss.org/mailman/listinfo/rules-users</a><br></blockquote></div><br>