4 Replies Latest reply on Mar 4, 2009 8:12 AM by robert.geisler

    ClassCastException on Stateless Session Bean

    robert.geisler Newbie

      hello everybody,

      currently we are migrating our EJB 2.1 (about 850 EJBs) to EJB 3.0. till now there have not been too many problems, but today i meet a special challeng when i migrated a Stateful Session Bean.

      the SFSB, lets call it MyStatefulSessionBean implements a Remote Business Interface (MyStatefulSession) and gets deployed in a EAR (MyEAR.ear). from a standalone client i can lookup, cast and use the SFSB successfully.
      otherwise we deploy a WAR, too. from there i can lookup the SFSB, but cannot use it, because casting results in ClassCastException:

      Context context = ContextFactory.getInstance().getContext();
      MyStatefulSession session = (MyStatefulSession) context.lookup("MyEAR/MyStatefulSession/remote");

      $Proxy123 cannot be cast to xzy.MyStatefulSession

      the MyStatefulSession.class is packaged in server/MyServer/lib/MyLibrary.jar and in our EAR, too.
      i tried to remove all duplicate interfaces and classes from the EAR, but than i get java.lang.VerifyError -that i cannot understand- in arbitrary implementation classes (even in EJB 2.1 SLSB).
      2009-03-04 11:48:41,837 WARN [org.jboss.ejb.EJBDeployer] Verify failed; continuing
      java.lang.VerifyError: (class: a/b/c/ArbitraryBean, method: getSomething signature: (Ljava/lang/String;ILx/y/z/SomeDTO;)Ljava/util/ArrayList;) Incompatible argument to function
       at java.lang.Class.getDeclaredMethods0(Native Method)
       at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
       at java.lang.Class.privateGetPublicMethods(Unknown Source)
       at java.lang.Class.getMethods(Unknown Source)
       at org.jboss.verifier.strategy.AbstractVerifier.hasEJBCreateMethod(AbstractVerifier.java:687)
       at org.jboss.verifier.strategy.EJBVerifier21.verifySessionBean(EJBVerifier21.java:858)

      my idea is that all classes and interfaces that will be used from EAR and WAR, should go to server/MyServer/lib/, implementation classes should remain in EAR, servlets should go into WAR.
      is that right? if so, we have to refactor our ANT builds, i guess ; )

      anyway... i wonder why our packaging strategy do not show any conflicts for Stateless Session Beans. maybe someone can help me with this...?

      thanks in advance