The minimal plugin works completely in my RCP, which uses essentially identical code to access Drools. It includes
* drools-core - the rule engine itself.MVEL included just in case (because of the error I was misinterpreting)
* optional packages:
o xpp3-1.1.3.4.O, xstream-1.2.2 - for audit feature
* drools-compiler - the rule compiler itself.
* antlr3-runtime-3.0
* eclipse-jdt-core-3.2.3.v_686_R32x - to compile with eclipse
I don't really need JUnit to work against this minimal plugin, and I
think when I add nothing to the JUnit classpath that JUnit already
sees org.drools.eclipse_4.0.3.jar.
Here is the trace when I add nothing special to the JUnit classpath, showing
that the configuration was instantiated in lines 38 - 40, but the crash occurs
when instantiating the package builder in line 47. This crash occurs before
any effort is made to load a DRL, etc. I get the same identical trace if I add
org.drools.eclipse_4.0.3.jar to the classpath, which makes sense to me because
this jar is in my IDE environment and should be visible to JUnit.
Package configuration is not null
java.lang.NullPointerException
at
org.mvel.optimizers.OptimizerFactory.<clinit>(OptimizerFactory.java:43)
at
org.drools.rule.builder.dialect.mvel.MVELDialect.init(MVELDialect.java:142)
at org.drools.compiler.DialectRegistry.initAll(DialectRegistry.java:49)
at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:146)
at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:108)
at
droolsRules.tests.AllDroolsRulesTests.setUp(AllDroolsRulesTests.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74)
at
org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50)
at
org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33)
at
org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
[MVEL] Notice: Possible incorrect version of ASM present (3.0 required).
Disabling JIT compiler. Reflective Optimizer will be used.
If, on the other hand, I add the plugin that I use in my RCP, "minimal Drools",
I get a different trace. My plugin includes
* drools-core - the rule engine itself.
MVEL included just in case (because of the error I was
misinterpreting)
* optional packages:
o xpp3-1.1.3.4.O, xstream-1.2.2 - for audit feature
* drools-compiler - the rule compiler itself.
* antlr3-runtime-3.0
* eclipse-jdt-core-3.2.3.v_686_R32x - to compile with eclipse
Now the trace shows that the configuration file is not instantiated:
org.drools.RuntimeDroolsException: Unable to load dialect
'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java'
at
org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:152)
at
org.drools.compiler.PackageBuilderConfiguration.buildDialectConfigurationMap(PackageBuilderConfiguration.java:140)
at
org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:117)
at
org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:94)
at
droolsRules.tests.AllDroolsRulesTests.setUp(AllDroolsRulesTests.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74)
at
org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50)
at
org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33)
at
org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.NullPointerException
at
org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:146)
... 18 more
javaCode.java
Description: Binary data
In case the files are stripped, here are the contents. Code followed by traces.
I appreciate Drools - it is terrific. Thank you for any assistance you can provide to help me with this problem.
- Mike Dean
package droolsRules.tests;
import java.io.File;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.Reader;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.rule.Package;
import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
/**
* This suite is the place to add Drools tests.
*
* @author J. Michael Dean, M.D., M.B.A. (University of Utah)
* Copyright 2005 - 2008. All Rights Reserved.
*
*/
@RunWith(Suite.class)
@SuiteClasses( { TestHypoglycemiaDetection.class })
public class AllDroolsRulesTests {
public static RuleBase ruleBase;
@BeforeClass
public static void setUp() throws Exception {
Reader source;
PackageBuilderConfiguration pkgConfig = new
PackageBuilderConfiguration(); //ERROR OCCURS HERE WHEN I USE MY
MINIMAL DROOLS PLUGIN JAR
JavaDialectConfiguration javaDialectConf =
(JavaDialectConfiguration) pkgConfig.getDialectConfiguration("java");
javaDialectConf.setCompiler(JavaDialectConfiguration.ECLIPSE);
if (pkgConfig == null) {
System.out.println("Error - null package
configuration");
} else {
System.out.println("Package configuration is not null");
}
final PackageBuilder builder = new PackageBuilder(pkgConfig); //
ERROR OCCURS HERE WHEN I USE DROOLS.ORG.ECLIPSE_4.0.3.JAR
boolean exists = (new
File("rules/GlucoseDroolRules00.drl")).exists();
if (exists) {
builder.addPackageFromDrl(new FileReader(
"rules/GlucoseDroolRules00.drl"));
System.out.println("Found the file!");
} else {
System.out.println("Cannot locate the file - will try as
resource");
source = new InputStreamReader(AllDroolsRulesTests.class
.getResourceAsStream("GlucoseDroolRules00.drl"));
if (source == null){
System.out.println("Could not get input
stream");
} else {
System.out.println("Opened the stream
successfully");
}
builder.addPackageFromDrl(source);
}
if (builder.hasErrors()) {
System.out.println(builder.getErrors().toString());
}
Package pkg = builder.getPackage();
ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage(pkg);
}
@AfterClass
public static void tearDown() throws Exception {
}
public static RuleBase getRuleBase() {
return ruleBase;
}
}
Here are the respective traces (am sorry for the length of this post)
Here is the trace when I add nothing special to the JUnit classpath,
showing that the configuration was instantiated in lines 38 - 40, but
the crash occurs when instantiating the package builder in line 47.
This crash occurs before any effort is made to load a DRL, etc. I get
the same identical trace if I add org.drools.eclipse_4.0.3.jar to the
classpath, which makes sense to me because this jar is in my IDE
environment and should be visible to JUnit.
Package configuration is not null java.lang.NullPointerExceptionat org.mvel.optimizers.OptimizerFactory.<clinit>(OptimizerFactory.java:43) at org.drools.rule.builder.dialect.mvel.MVELDialect.init(MVELDialect.java: 142)
at org.drools.compiler.DialectRegistry.initAll(DialectRegistry.java:49)
at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:146)
at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:108)
at
droolsRules.tests.AllDroolsRulesTests.setUp(AllDroolsRulesTests.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun
.reflect
.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33)
at
org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at
org
.eclipse
.jdt
.internal
.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at
org
.eclipse
.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org
.eclipse
.jdt
.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
460)
at
org
.eclipse
.jdt
.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
673)
at
org
.eclipse
.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
386)
at
org
.eclipse
.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
196)
[MVEL] Notice: Possible incorrect version of ASM present (3.0
required). Disabling JIT compiler. Reflective Optimizer will be used.
If, on the other hand, I add the plugin that I use in my RCP, "minimal Drools", I get a different trace. My plugin includes
* drools-core - the rule engine itself.MVEL included just in case (because of the error I was misinterpreting)
* optional packages:
o xpp3-1.1.3.4.O, xstream-1.2.2 - for audit feature
* drools-compiler - the rule compiler itself.
* antlr3-runtime-3.0
* eclipse-jdt-core-3.2.3.v_686_R32x - to compile with eclipse
Now the trace shows that the configuration file is not instantiated:
org.drools.RuntimeDroolsException: Unable to load dialect
'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java'
at
org
.drools
.compiler
.PackageBuilderConfiguration
.addDialect(PackageBuilderConfiguration.java:152)
at
org
.drools
.compiler
.PackageBuilderConfiguration
.buildDialectConfigurationMap(PackageBuilderConfiguration.java:140)
at
org
.drools
.compiler
.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:117)
at
org
.drools
.compiler
.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:94)
at
droolsRules.tests.AllDroolsRulesTests.setUp(AllDroolsRulesTests.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun
.reflect
.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33)
at
org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at
org
.eclipse
.jdt
.internal
.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at
org
.eclipse
.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org
.eclipse
.jdt
.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
460)
at
org
.eclipse
.jdt
.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
673)
at
org
.eclipse
.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
386)
at
org
.eclipse
.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
196)
Caused by: java.lang.NullPointerExceptionat org .drools .compiler .PackageBuilderConfiguration .addDialect(PackageBuilderConfiguration.java:146)
... 18 more
On Jan 3, 2008, at 8:21 AM, [EMAIL PROTECTED] wrote:
Message: 4 Date: Thu, 03 Jan 2008 15:21:13 +0000 From: Mark Proctor <[EMAIL PROTECTED]> Subject: Re: [rules-users] Re: JUnit and classpath To: Rules Users List <[email protected]> Message-ID: <[EMAIL PROTECTED]> Content-Type: text/plain; charset=ISO-8859-1; format=flowed J Michael Dean wrote:I noticed the absence of asm and tried to manually add version 3.1 andthis had no effect on the trace.It gets a null pointer and says it can't use ASM in MVEL, thus uses reflection mode. That's fine as reflection is the mode we put MVEL in anyway. It's more of am informational warning than an error....On Jan 2, 2008, at 10:00 AM, [EMAIL PROTECTED] wrote:Mike, So it seems you are missing the ASM jar in your classpath... did you tried adding it? BTW, what is this MinimalDroolCore_1.0.0.jar that you are adding to your classpath? Drools also includes an inlined ASM version inside it for its own use... are you stripping that? []s Edson... Mike, This looks like a classpath problem indeed. Did you tried asking the JVM to dump its classpath so that you can know for sure what jars are included and if any of them embeds a non-compatible ASM version ? []s Edson _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
