[
http://jira.jboss.com/jira/browse/JBRULES-1013?page=comments#action_12378185 ]
Mark Proctor commented on JBRULES-1013:
---------------------------------------
I updated the test above to have 10 recursive method calls that builds up an int number,
which is checked from java.
Two functions with Janino compiler end up with out of memory error
------------------------------------------------------------------
Key: JBRULES-1013
URL:
http://jira.jboss.com/jira/browse/JBRULES-1013
Project: JBoss Rules
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Drl Parser/Builder
Affects Versions: 4.0.0.GA
Environment: Ubuntu Feisty, JDK 1.4 or 1.5, Drools Snapshot
Reporter: Pierre Paysant-Le Roux
Assigned To: Edson Tirelli
Fix For: FUTURE
Compiling a simple rules file containing two functions with janino causes an out of
memory error.
Rules file example :
package test
function boolean func1() {
return true;
}
function boolean func2() {
return true;
}
rule "test"
when
Object()
then
System.out.println("fired");
end
and the code that generate the error :
package test;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
public class Test {
public static void main (String[] args) {
Properties properties = new Properties();
properties.setProperty("drools.dialect.java.compiler",
"JANINO");
PackageBuilderConfiguration pkgBuilderCfg = new
PackageBuilderConfiguration(properties);
PackageBuilder builder = new PackageBuilder(pkgBuilderCfg);
try {
builder.addPackageFromDrl(getSource());
} catch (DroolsParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static InputStreamReader getSource() {
return new InputStreamReader(Test.class.getResourceAsStream(
"Sample.drl" ));
}
}
After profiling, I identified that the problematic line is the 146 one in class
JaninoJavaCompiler. It causes the loadIClass method to loop with a cycle that I don't
understand. Placing a breakpoint on the line 91 of JaninoJavaCompiler class permit to
observe the loop iterations.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira