[rules-users] ClassCastException in SessionConfiguration.initProcessInstanceManagerFactory on JBoss 6.0

Massudi massudi at mail.ru
Mon Dec 27 23:09:34 EST 2010


I have solved the problem. The problem arises because of drool-core.jar 
files duplication – I’ve got one in jboss lib and another one in webapp 
lib.

> I’m trying to create StatefulKnowledgeSession:
>
> StatefulKnowledgeSession ksession =
> JPAKnowledgeService.newStatefulKnowledgeSession(
>                      kbase, null, env);
>
> Here is the problem as it seen in the log:
>
> 15:39:05,884 ERROR [STDERR] Caused by: java.lang.IllegalArgumentException:
> Unable to instantiate process instance manager factory
> 'org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory'
> 15:39:05,884 ERROR [STDERR] 	at
> org.drools.SessionConfiguration.initProcessInstanceManagerFactory(SessionConfiguration.java:317)
> 15:39:05,884 ERROR [STDERR] 	at
> org.drools.SessionConfiguration.getProcessInstanceManagerFactory(SessionConfiguration.java:291)
> 15:39:05,884 ERROR [STDERR] 	at
> org.drools.common.AbstractWorkingMemory.<init>(AbstractWorkingMemory.java:367)
> 15:39:05,884 ERROR [STDERR] 	at
> org.drools.common.AbstractWorkingMemory.<init>(AbstractWorkingMemory.java:295)
> 15:39:05,884 ERROR [STDERR] 	at
> org.drools.common.AbstractWorkingMemory.<init>(AbstractWorkingMemory.java:259)
> 15:39:05,884 ERROR [STDERR] 	at
> org.drools.reteoo.ReteooWorkingMemory.<init>(ReteooWorkingMemory.java:96)
> 15:39:05,885 ERROR [STDERR] 	at
> org.drools.reteoo.ReteooStatefulSession.<init>(ReteooStatefulSession.java:80)
> 15:39:05,885 ERROR [STDERR] 	at
> org.drools.reteoo.ReteooRuleBase.newStatefulSession(ReteooRuleBase.java:386)
> 15:39:05,885 ERROR [STDERR] 	at
> org.drools.reteoo.ReteooRuleBase.newStatefulSession(ReteooRuleBase.java:371)
> 15:39:05,885 ERROR [STDERR] 	at
> org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:97)
>
> Exception is thrown from here:
>
> private void initProcessInstanceManagerFactory() {
>
> ...
>
>          if ( clazz != null ) {
>              try {
>                  this.processInstanceManagerFactory = clazz.newInstance();
>              } catch ( Exception e ) {
>                  throw new IllegalArgumentException( "Unable to instantiate
> process instance manager factory '" + className + "'" );
>              }
>
> ...
>
>   }
>
> And the actual Exception type is ClassCastException
> java.lang.ClassCastException:
> org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory
> cannot be cast to org.drools.process.instance.ProcessInstanceManagerFactory
>
> I’ve created the following snippet to illustrate the problem:
>
> …running inside JTA transaction
>
> Class<ProcessInstanceManagerFactory>  cls =
> (Class<ProcessInstanceManagerFactory>)
> Class.forName("org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory");
>
> // this one is OK
>
> ProcessInstanceManagerFactory pimf =
> (ProcessInstanceManagerFactory)cls.newInstance();
>
> System.out.println(pimf.getClass().getCanonicalName());
>
> cls =
> (Class<ProcessInstanceManagerFactory>)Thread.currentThread().getContextClassLoader().loadClass("org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory"
> );
>
> // here will be ClassCastException
>
> pimf = (ProcessInstanceManagerFactory)cls.newInstance();
>
> System.out.println(pimf.getClass().getCanonicalName());
>
> It seems that ProcessInstanceManagerFactory interface and
> JPAProcessInstanceManagerFactory are loaded by different class loaders.
>
> How can I avoid that problem?
>
> I'm using Drool Flow 5.1.1, JBoss 6.0, Hibernate 3.6.0.
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20101228/b7b3a016/attachment.html 


More information about the rules-users mailing list