2016-06-01 4 views
0

JNDIでPojoでEJBを呼び出すときにClassCastExceptionが発生します。 Oracle Weblogic Server 10.3.6(EJB 3.0)を使用します。JNDIでEJBを呼び出すときのClassCastException

マイ構造:

  • ここで、app.ear
    • libに
      • Interfaces.jar
        • MyBeanInterface.java
    • ejb.jarなど
      • MyBeanImpl.java
    • たwebapp.war
      • Client.java
      • WEB-INF
        • のweb.xml

私のローカルインタフェース:

package mypackage; 

@Local 
public Interface MyBeanInterface {} 

私のEJBクラス:

package mypackage; 

@Stateless(name = "MyBean") 
public class MyBeanImpl implements MyBeanInterface {} 

私のクライアント(ないEJB):

MyBeanInterface bean = (MyBeanInterface) new InitialContext().lookup("java:comp/env/ejb/MyBean"); 

私のweb.xml

<ejb-local-ref> 
    <ejb-ref-name>ejb/MyBean</ejb-ref-name> 
    <ejb-ref-type>Session</ejb-ref-type> 
    <local>mypackage.MyBeanInterface</local> 
</ejb-local-ref> 

マイ例外:

検索自体は動作します。私は参照を得る。私は(MyBeanInterface)でキャストしたい場合しかし、私は次のエラーを取得する:

はに「クラスmypackage.MyBeanInterface_whjkp6_MyBeanImpl(weblogic.utils.classloaders.GenericClassLoader = 28136(ID)のインスタンスによってロードされた)」のインスタンスをキャストすることはできません私は何ができるのインタフェースmypackage.MyBeanInterface(weblogic.utils.classloaders.GenericClassLoader(ID = 28144)のインスタンスによってロードされた)

」のインスタンス?

答えて

0

クラスが別のクラスローダによってロードされているようです。可能なオプションは以下のとおりです。

1)クラスが同じクラスローダ

2)を使用し反射

3)シリアル化した後、デシリアライズによってロードされていることを確認し

参照してください:

1)cast across classloader?

2)https://community.oracle.com/thread/757133

3)ClassCastException because of classloaders?

関連する問題