【问题标题】:ClassCastException while call EJB over JNDI通过 JNDI 调用 EJB 时发生 ClassCastException
【发布时间】:2016-09-30 11:01:36
【问题描述】:

我在通过 JNDI 在 Pojo 中调用 EJB 时遇到 ClassCastException。我使用 Oracle Weblogic Server 10.3.6 (EJB 3.0)。

我的结构:

  • app.ear
      • 接口.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) 进行投射时,出现以下错误:

无法将“class mypackage.MyBeanInterface_whjkp6_MyBeanImpl(由 weblogic.utils.classloaders.GenericClassLoader(id=28136) 的实例加载)”的实例强制转换为“interface mypackage.MyBeanInterface(由 weblogic.utils 的实例加载。 classloaders.GenericClassLoader(id=28144))

我能做什么?

【问题讨论】:

    标签: ejb weblogic jndi ear


    【解决方案1】:

    似乎这些类是由不同的类加载器加载的。可能的选项是:

    1) 确保类由相同的类加载器加载

    2) 使用反射

    3) 序列化再反序列化

    参考:

    1) cast across classloader?

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

    3)ClassCastException because of classloaders?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      相关资源
      最近更新 更多