Thanks Marcus,

  We will include the patch in the next drools release! We do appreciate the contribution.

   Edson

2008/5/22 Marcus Ilgner <marcus.ilgner@gmail.com>:
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 <mdean77@comcast.net> 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 <tirelli@post.com> 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 <marcus.ilgner@gmail.com>:
>>>>>
>>>>> 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 <mdean77@comcast.net> 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