Thanks Marcus, We will include the patch in the next drools release! We do appreciate the contribution.
Edson 2008/5/22 Marcus Ilgner <[EMAIL PROTECTED]>: > Glad that I could actually contribute something back to this great project. > I put together a patch for this issue in the JIRA at > http://jira.jboss.org/jira/browse/JBRULES-1618 as promised. > > Best regards > Marcus > > On Tue, May 20, 2008 at 2:34 AM, Mike Dean <[EMAIL PROTECTED]> wrote: > > > > Sorry to ask question and then figure it out! I just substituted the > actual > > name of my suite class instead of saying this.class and it works > > beautifully. I am now testing Drools with JUnit 4 with no problems, > after > > nearly six months! THANK YOU. > > > > - Mike > > > > Mike Dean wrote: > >> > >> Thanks to both of you for pursuing this problem. I have worked around > it > >> by putting my business classes and rules in a separate Drools project, > >> testing everything there, and then copying them to my RCP. I look > forward > >> to a better solution! > >> > >> I must confess Java ignorance, but I use a test suite and try to > >> instantiate the engine once and then run a series of tests. My crash > >> occurs before I get to the individual tests. However, the setUp routine > >> is static, and your code work around cannot be executed in a static > >> context. Where exactly to you put the test for a null classloader? > >> > >> Thanks again. I thought this issue simply died. > >> > >> > >> Marcus Ilgner wrote: > >>> > >>> Hi Edson, > >>> > >>> thank you very much for testing this! Since I could not discern any > >>> differences between your approach and mine, I decided to resolve the > >>> issue manually by inserting a work-around in my test routine which > >>> sets the context class loader for the current thread before calling > >>> the method under test. > >>> > >>> if (Thread.currentThread().getContextClassLoader() == null) { > >>> > >>> > Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); > >>> } > >>> > >>> My guess is that the custom JUnit 4 class runner > >>> (SpringJUnit4ClassRunner) somehow is responsible for the faulty > >>> behaviour. > >>> > >>> Thanks again > >>> Marcus > >>> > >>> > >>> On Mon, May 19, 2008 at 3:09 PM, Edson Tirelli <[EMAIL PROTECTED]> > wrote: > >>>> > >>>> All, > >>>> > >>>> I see that the code in that spot is weak and could be improved. > >>>> Although, > >>>> using drools 4.0.7, I successfully created a junit 4 test that I paste > >>>> bellow. Also, the whole drools code is tested with junit 3 and we have > >>>> no > >>>> problems. For instance, look at our integration tests here: > >>>> > >>>> > http://anonsvn.labs.jboss.com/labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/ > >>>> > >>>> The code I used to create the junit 4 test is based on the default > >>>> example create by the drools plugin + the snippet you showed bellow: > >>>> > >>>> @Test > >>>> public void testRuleBase() { > >>>> try { > >>>> > >>>> //load up the rulebase > >>>> RuleBase ruleBase = readRule(); > >>>> StatefulSession workingMemory = > >>>> ruleBase.newStatefulSession(); > >>>> > >>>> //go ! > >>>> Message message = new Message(); > >>>> message.setMessage( "Hello World" ); > >>>> message.setStatus( Message.HELLO ); > >>>> workingMemory.insert( message ); > >>>> workingMemory.fireAllRules(); > >>>> workingMemory.dispose(); > >>>> > >>>> } catch (Throwable t) { > >>>> t.printStackTrace(); > >>>> Assert.fail("Something is wrong: "+t.getMessage()); > >>>> } > >>>> } > >>>> > >>>> /** > >>>> * Please note that this is the "low level" rule assembly API. > >>>> */ > >>>> private RuleBase readRule() throws Exception { > >>>> //read in the source > >>>> Reader source = new InputStreamReader( > >>>> DroolsTest.class.getResourceAsStream( "/Sample.drl" ) ); > >>>> > >>>> PackageBuilderConfiguration conf = new > >>>> PackageBuilderConfiguration(); > >>>> JavaDialectConfiguration javaConf = (JavaDialectConfiguration) > >>>> conf.getDialectConfiguration("java"); > >>>> javaConf.setCompiler(JavaDialectConfiguration.ECLIPSE); > >>>> javaConf.setJavaLanguageLevel("1.5"); > >>>> > >>>> PackageBuilder builder = new PackageBuilder( conf ); > >>>> builder.addPackageFromDrl( source ); > >>>> > >>>> RuleBase ruleBase = RuleBaseFactory.newRuleBase(); > >>>> ruleBase.addPackage( builder.getPackage() ); > >>>> return ruleBase; > >>>> } > >>>> > >>>> Hope it helps, > >>>> Edson > >>>> > >>>> > >>>> 2008/5/19 Marcus Ilgner <[EMAIL PROTECTED]>: > >>>>> > >>>>> Hi list, > >>>>> > >>>>> I'm reviving this thread because I happen to have the same problem. > >>>>> > >>>>> On Sun, Mar 23, 2008 at 7:34 PM, Mike Dean <[EMAIL PROTECTED]> > wrote: > >>>>> > > >>>>> > Thanks (months later!). I have cut down my code example below to > >>>>> show > >>>>> > this > >>>>> > issue more clearly: > >>>>> > > >>>>> > > >>>>> > John J. Franey wrote: > >>>>> >> > >>>>> >> NullPointerException on line 146 means classLoader is null. That > >>>>> is > >>>>> >> odd. > >>>>> >> I have no idea why the code that gets classLoader won't work in > >>>>> >> eclipse's > >>>>> >> junit runtime, but does when run in your eclipse plugin. > >>>>> > >>>>> It seems indeed like during JUnit tests, the context classloader of > >>>>> the thread gets not set (null). > >>>>> > >>>>> The code leading up to the problem is as follows: > >>>>> PackageBuilderConfiguration conf = new PackageBuilderConfiguration(); > >>>>> JavaDialectConfiguration javaConf = (JavaDialectConfiguration) > >>>>> conf.getDialectConfiguration("java"); > >>>>> javaConf.setCompiler(JavaDialectConfiguration.ECLIPSE); > >>>>> javaConf.setJavaLanguageLevel("1.5"); > >>>>> RuleBase ruleBase = RuleBaseFactory.newRuleBase(); > >>>>> > >>>>> The resulting stacktrace is: > >>>>> java.lang.NullPointerException > >>>>> at > >>>>> > org.drools.RuleBaseConfiguration.instantiateClass(RuleBaseConfiguration.java:569) > >>>>> at > >>>>> > org.drools.RuleBaseConfiguration.determineConsequenceExceptionHandler(RuleBaseConfiguration.java:561) > >>>>> at > >>>>> org.drools.RuleBaseConfiguration.init(RuleBaseConfiguration.java:220) > >>>>> at > >>>>> > org.drools.RuleBaseConfiguration.<init>(RuleBaseConfiguration.java:133) > >>>>> at > >>>>> org.drools.common.AbstractRuleBase.<init>(AbstractRuleBase.java:147) > >>>>> at > >>>>> org.drools.reteoo.ReteooRuleBase.<init>(ReteooRuleBase.java:124) > >>>>> at > >>>>> org.drools.reteoo.ReteooRuleBase.<init>(ReteooRuleBase.java:101) > >>>>> at > >>>>> org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:57) > >>>>> at > >>>>> org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:38) > >>>>> > >>>>> Has anyone set up Drools and JUnit successfully? Maybe we forgot to > >>>>> set up the environment properly? > >>>>> > >>>>> Best regards > >>>>> Marcus > >>> _______________________________________________ > >>> rules-users mailing list > >>> rules-users@lists.jboss.org > >>> https://lists.jboss.org/mailman/listinfo/rules-users > >>> > >>> > >> > >> > > > > -- > > View this message in context: > http://www.nabble.com/Re%3AJUnit-testing-tp14164710p17331006.html > > Sent from the drools - user mailing list archive at Nabble.com. > > > > _______________________________________________ > > rules-users mailing list > > rules-users@lists.jboss.org > > https://lists.jboss.org/mailman/listinfo/rules-users > > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > -- Edson Tirelli JBoss Drools Core Development Office: +55 11 3529-6000 Mobile: +55 11 9287-5646 JBoss, a division of Red Hat @ www.jboss.com
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users