Folks,<br><br>A little bit later than expected (!) I&#39;ve managed to get Drools running within Google App Engine. <br><br>A list of the changes that I made to the Drools Core and Drools Util code are below. A lot of these changes are NullPointer checks when reading properties from a file (i.e. things that you might want in the codebase anyway).<br>
<br>Notes on the sample I used to try this out are at <br><a href="http://code.google.com/p/red-piranha/wiki/ModifyDroolsRunInGoogleAppEngine">http://code.google.com/p/red-piranha/wiki/ModifyDroolsRunInGoogleAppEngine</a><br>
The sample (for the moment) is running a pre-built KnowledgeBase within GAE (i.e. no rule compilation, nor any of the advanced features).<br><br>What is the best way of submitting the actual code changes for review and possible inclusion as part of the Drools source code? <br>
<br>Thanks<br><br>Paul<br><br><p><strong> Drools Core </strong></p><pre class="prettyprint"><span class="pln"> </span><span class="typ">AbstractRuleBase</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 265 surrounded by try / catch </span><span class="pln"><br>
      </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">config </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="typ">RuleBaseConfiguration</span><span class="pun">)</span><span class="pln"> droolsStream</span><span class="pun">.</span><span class="pln">readObject</span><span class="pun">();</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">RuleBaseConfiguration</span><span class="pun">.</span><span class="pln">java </span><span class="com">// - line 985 surround by try / catch</span><span class="pln"><br>
         </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">classLoader </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ClassLoaderUtil</span><span class="pun">.</span><span class="pln">getClassLoader</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">RuleBaseConfiguration</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 395  surround by try / catch</span><span class="pln"><br>
     </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">chainedProperties </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ChainedProperties</span><span class="pun">(</span><span class="pln"> </span><span class="str">&quot;rulebase.conf&quot;</span><span class="pun">,</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">RuleBaseConfiguration</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 457 surround by try / catch, default Conflict Resolver</span><span class="pln"><br>
          setConflictResolver</span><span class="pun">(</span><span class="pln"> determineConflictResolver</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">chainedProperties</span><span class="pun">.</span><span class="pln">getProperty</span><span class="pun">(</span><span class="pln"> </span><span class="str">&quot;drools.conflictResolver&quot;</span><span class="pun">,</span><span class="pln"> </span></pre>
<p>            <strong> Drools Util </strong></p><pre class="prettyprint"><span class="pln"> </span><span class="typ">ChainedProperties</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 98 - exception check around ClassLoader.getSystemClassLoader();</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">ChainedProperties</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 125 - exception check around ClassLoader.getSystemClassLoader();</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">ChainedProperties</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 160 </span><span class="pln"><br>        </span><span class="pun">-</span><span class="pln"> </span><span class="kwd">null</span><span class="pln"> check </span><span class="kwd">for</span><span class="pln"> properties </span><span class="pun">/</span><span class="pln">key </span><span class="kwd">and</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">default</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">ChainedProperties</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 240 - surround by try / catch for securityaccessexception</span><span class="pln"><br>
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> file </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">null</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> file</span><span class="pun">.</span><span class="pln">exists</span><span class="pun">()</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">ChainedProperties</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 270 - surround by try / catch for securityaccessexception</span><span class="pln"><br>
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> file </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">null</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> file</span><span class="pun">.</span><span class="pln">exists</span><span class="pun">()</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">ClassFieldInspector</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 166 - </span><span class="pln"><br>         </span><span class="kwd">return</span><span class="pln"> </span><span class="str">&quot;/&quot;</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> clazz</span><span class="pun">.</span><span class="pln">getCanonicalName</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">&quot;.class&quot;</span><span class="pun">;</span></pre>
<pre class="prettyprint"><span class="pln"> </span><span class="typ">ClassLoaderUtil</span><span class="pun">.</span><span class="pln">java </span><span class="com">// line 25 - surround by try / catch for securityaccessexception</span><span class="pln"><br>
     </span><span class="typ">ClassLoader</span><span class="pln"> systemClassLoader </span><span class="pun">=</span><span class="pln"> </span></pre><br>