0 Replies Latest reply on May 14, 2008 12:53 PM by marvin_

    ClassCastException when trying to cast object selected from

    marvin_

      Hello,

      I've got two EARs: one SEAM Project using jBPM and a second EJB Project (lets call it JBPMContextProvider) which should be able to connect to the database (Hypersonic) where all the task information of JBPM is stored.

      My problem is, when I retrieve a TaskInstance-Object in JBPMContextProvider from the database, I get a ClassCastException.

      The setup:
      - each of the EARs has a reference of the jbpm-jpdl.jar
      - the SEAM Project binds the SessionFactory to java:/projectSessionFactory
      - JBPMContextProvider makes an JNDI lookup to retrieve a SessionFactory object
      - to select the TaskInstances from the database, I use a named query set up in the original JBPM hibernate.cfg.xml-file and try to iterate through the result set - there the ClassCastException happens:

      InitialContext ctx;
      ctx = new InitialContext();
      SessionFactory sessionFactory = (SessionFactory) ctx.lookup(JNDI);
      sessionFactory.openSession();
      
      Session session = sessionFactory.getCurrentSession();
      Transaction tx = session.beginTransaction(); //works fine
      
      Query query2 = session.getNamedQuery("TaskMgmtSession.findTaskInstancesByActorId");
      query2.setString("actorId", actorId);
      result = query2.list();
      
      for (Iterator iter = result.iterator(); iter.hasNext();) {
       TaskInstance ti = (TaskInstance) iter.next(); //CastException
       System.out.println("*** ActorId is: "+ti.getActorId()+" ***");
      }
      


      ErrorTrace:

      18:31:42,132 ERROR [STDERR] java.lang.ClassCastException: org.jbpm.taskmgmt.exe.TaskInstance
      18:31:42,132 ERROR [STDERR] at org.project.context.ContextProviderBean.getUserHistory(ContextProviderBean.java:71)
      18:31:42,132 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      18:31:42,132 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      18:31:42,132 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      18:31:42,132 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
      18:31:42,132 ERROR [STDERR] at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:304)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:81)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
      18:31:42,132 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      18:31:42,132 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
      18:31:42,132 ERROR [STDERR] at $Proxy63.getUserHistory(Unknown Source)
      




      This brought me already to the idea to compare the ClassLoaders which might be a reason, but I don't know how to solve.

      System.out.println(result.get(0).getClass().toString());
      System.out.println(result.get(0).getClass().getClassLoader().toString());
      System.out.println(new TaskInstance().getClass().getClassLoader().toString());
      System.out.println(result.get(0).getClass().getClassLoader().equals(new TaskInstance().getClass().getClassLoader()));
      


      This code delivers to STDOUT:

      org.jboss.mx.loading.UnifiedClassLoader3@79b43f{ url=file:/C:/jboss-4.2.2.GA/server/default/tmp/deploy/tmp26274seam_project.ear ,addedOrder=45}
      org.jboss.mx.loading.UnifiedClassLoader3@3b5587{ url=file:/C:/jboss-4.2.2.GA/server/default/tmp/deploy/tmp26273JBPMContextProviderEAR.ear ,addedOrder=44}
      false
      


      Thanks for any hints!