[rules-users] Classloader issues with webapp : No ClassLoaders found, Circular dependencies...

Edson Tirelli tirelli at post.com
Thu Nov 15 10:48:37 EST 2007


   Julien,

   Thanks for reporting back!

   Edson

2007/11/15, Julien Cassignol <julien.cassignol at imelios.com>:
>
> Hello,
>
> Following Mark's advice, I decided to mail about a problem I experienced
> and managed to fix, with Mark's and Edson Tirelli's help.
>
> I was trying to build a RuleBase with the following code :
>
>                 final SpreadsheetCompiler converter = new
> SpreadsheetCompiler();
>                 FileInputStream file = new FileInputStream(decTable);
>                 final String drl = converter.compile(file, InputType.XLS);
>                 System.out.println(drl);
>                 Properties properties = new Properties();
>                 properties.setProperty( "drools.dialect.default",
>                                         "java" );
>                 properties.setProperty("drools.compiler","JANINO");
>                 PackageBuilderConfiguration conf = new
> PackageBuilderConfiguration(properties);
>                 PackageBuilder builder = new PackageBuilder( conf );
>                 builder.addPackageFromDrl(new StringReader(drl));
>                 Package pkg = builder.getPackage();
>                 RuleBase ruleBase = RuleBaseFactory.newRuleBase();
>                 ruleBase.addPackage(pkg);
>
> Nothing difficult, but it was failing on the construction of
> PackageBuilderConfiguration :
>
>                 No ClassLoaders found for:
> org.drools.rule.builder.dialect.java.JavaDialect
>
> Followed by an unhelpful stack.
>
> Debugging my webapp (which sources I didn't have), I noticed that my
> class ClassLoader was different from the thread one. The thread
> classloader was the JBoss ClassLoader, and my class classloader was the
> one of the webapp.
>
> Setting the classloader of the thread manually to the classloader of my
> webapp failed to cope with the problem, as the drools jars were
> installed on Jboss, and drools instantiated object couldn't find core
> objects within the classpath with the classloader of the webapp. To fix
> the problem, I had to use the following code :
>
>                 PackageBuilderConfiguration conf = new
> PackageBuilderConfiguration(
>                                 properties);
>                 conf.setClassLoader(MyClass.class.getClassLoader());
>                 RuleBaseConfiguration ruleBaseConf = new
> RuleBaseConfiguration();
>                 ruleBaseConf.setClassLoader(MyClass.class.getClassLoader
> ());
>
> Setting the classloader property of the drools configuration objects
> allowed me to use imports of local classes (I mean local to the webapp)
> within rule packages, and solved my problem (or so it seems).
>
> I hope this short explanation will help someone !
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20071115/c2a083fe/attachment.html 


More information about the rules-users mailing list