heh. I just remembered that Thread.currentThread().getContextClassLoader() can return null as well. :) A good thing to do is have a utility function like the attached class loading utility class. Rearrange the class loading order to suit your taste.
--- On Tue, 7/28/09, Greg Barton <greg_bar...@yahoo.com> wrote: > From: Greg Barton <greg_bar...@yahoo.com> > Subject: Re: [rules-users] Run Drool Application From Command Prompt > To: "Rules Users List" <rules-users@lists.jboss.org> > Date: Tuesday, July 28, 2009, 12:59 AM > > It's unclear from your post when you get the NPE: from the > command line, from eclipse, or when integrated with OFBiz. > (I assume you're referring to http://ofbiz.apache.org/) > > It's undoubtedly a classpath issue. Just peek at the > source a bit. I'm not sure what version you're using, > but if you look at the source in the svn repo you'll see > that line 92 of JavaDialectConfiguration is this: > > getClass().getClassLoader().loadClass( > "org.eclipse.jdt.internal.compiler.Compiler" ); > > See the javadoc for Class.getClassLoader() that says > "Returns the class loader for the class. Some > implementations may use null to represent the bootstrap > class loader. This method will return null in such > implementations if this class was loaded by the bootstrap > class loader." > > So, it looks probable that in the environment that's having > problems, the JavaDialectConfiguration class is loaded by > the bootstrap classloader. What is the VM > implementation you're using? > > It might be best if > Thread.currentThread().getContextClassLoader() was used > instead of getClass().getClassLoader() in > JavaDialectConfiguration and elsewhere. Devs, have an > opinion on that? > > --- On Mon, 7/27/09, pankaj.j...@lntinfotech.com > <pankaj.j...@lntinfotech.com> > wrote: > > > From: pankaj.j...@lntinfotech.com > <pankaj.j...@lntinfotech.com> > > Subject: Re: [rules-users] Run Drool Application From > Command Prompt > > To: rules-users@lists.jboss.org > > Date: Monday, July 27, 2009, 11:50 PM > > > > > > Hi > > > > > > > > I still have not got any > > solution > > of my problem that I posted previously. I have > included all > > required jar > > files and set proper class path .. Please do help ? > > > > > > > > problem: > > > > > > > > > > I am trying to > > integrate Drool with > > ofbiz and run application from command prompt. In one > way I > > have integrated > > it properly and I am able to run it > > successfully. > > > > > > > > > > Code : Which I was using initially > > > > > > > > KnowledgeBuilder kbuilder = > > KnowledgeBuilderFactory.newKnowledgeBuilder(); > > > > > > > > > > or > > > > > > > > PackageBuilderConfiguration cfg = new > > PackageBuilderConfiguration(); > > > > > > KnowledgeBuilder kbuilder = > > KnowledgeBuilderFactory.newKnowledgeBuilder(); > > > > > > > > > > Exception I got : > > > > > > > > org.drools.RuntimeDroolsException: Unable to load > dialect > > > 'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java > > > > > > > :org.drools.rule.builder.dialect.java.JavaDialectConfiguration' > > > > > > at > > > org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:274) > > at > > > org.drools.compiler.PackageBuilderConfiguration.buildDialectConfigurationMap(PackageBuilderConfiguration.java:259) > > > > > > > > > > at > > > org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:176) > > at > > > org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:153) > > at > > > org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:242) > > > > > > . > > > > . > > > > . > > > > Caused by: java.lang.NullPointerException > > > > at > > > org.drools.rule.builder.dialect.java.JavaDialectConfiguration.setCompiler(JavaDialectConfiguration.java:92) > > at > > > org.drools.rule.builder.dialect.java.JavaDialectConfiguration.init(JavaDialectConfiguration.java:55) > > at > > > org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:270 > > > > > > > > > > Problem I found : > > > > In the class JavaDialectConfiguration in jar file > > drools-compiler.jar there > > is a method named "setCompliler", in this > > method Null Pointer > > Exception was coming. > > > > > > > > Solution I provided : > > > > > > In my application I created my custom class > > CustomJavaDialectConfiguration > > by extending to class JavaDialectConfiguration, In > this > > class I overrided > > the method setCompiler. My method was exactly same as > that > > of method setCompiler > > in JavaDialectConfiguration . To call my dialect class > I > > also overrided > > the method "addDialect" of > > PackageBuilderConfiguration class > > . For that I created class > > CustomPackageBuilderConfiguration by extending > > to PackageBuilderConfiguration. > > > > after that I wrote the code: > > > > > > > > PackageBuilderConfiguration cfg = new > > CustomPackageBuilderConfiguration(); > > > > > > KnowledgeBuilder kbuilder = > > KnowledgeBuilderFactory.newKnowledgeBuilder(cfg); > > > > > > > > > > > > > > Now application is running perfectly fine from both > eclipse > > and command > > prompt without any exception. > > > > > > > > I want to know as my overrided method > > "setCompiler" was exactly > > same then why I had to override method, and In > original > > code (ie in drools-compiler.jar > > file) why it was giving exception ??? Was that > > due to class > > lader or something else ?? Please do help in this > > regard .... > > > > > > > > > > > > > > > > > > Thanks & Regards: > > > > > > > > Pankaj Jain | L&T infotech |Navi Mumbai > > > > Mobile: +91 9920218945 > > > > Email : pankaj.j...@lntinfotech.com > > > > www.Lntinfotech.com > > > > > > > > "Whatever the mind of man can conceive & believe, > > it can achieve." > > > > > > > > Larsen & Toubro Infotech Ltd. > > > > www.Lntinfotech.com > > > > > > > > This Document is classified as: > > > > > > > > L&T > > Infotech Proprietary L&T > > Infotech Confidential L&T > > Infotech Internal Use Only L&T > > Infotech General Business > > > > > > > > This Email may contain confidential or privileged > > information for the intended > > recipient (s) If you are not the intended recipient, > please > > do not use > > or disseminate the information, notify the sender and > > delete it from your > > system. > > > > > > > > > ______________________________________________________________________ > > > > > > -----Inline Attachment Follows----- > > > > _______________________________________________ > > 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 >
public class ClassLoaderFu { public static Class<?> loadClass(String className, Class<?> callingClass) throws ClassNotFoundException { ClassLoader loader0 = Thread.currentThread().getContextClassLoader(); if(loader0 == null) { ClassLoader loader1 = ClassLoaderFu.class.getClassLoader(); if(loader1 == null) { ClassLoader loader2 = callingClass.getClassLoader(); if(loader2 == null) { return ClassLoader.getSystemClassLoader().loadClass(className); } else { loader2.loadClass(className); } } else { return loader1.loadClass(className); } return Class.forName(className); } else { return loader0.loadClass(className); } } }
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users