代码之家  ›  专栏  ›  技术社区  ›  ron

需要帮助理解JNDI和J2EE中的特定ClassCastException

  •  3
  • ron  · 技术社区  · 15 年前

    我部署了一个企业应用程序A和B(在WLS 10.0中)。A是“框架”,B是客户端应用。 客户机发出以下呼叫:

    Object o = ctx.lookup(jndiName); // line 1
    cf = (ConnectionFactory) o; // line 2
    

    ConnectionFactory是一个接口,定义为:

    public interface ConnectionFactory 
        extends java.io.Serializable, javax.resource.Referenceable {
        ...
    }
    

    发生的是:

    1. 如果包含接口类的JAR位于系统类路径上,则第2行执行良好
    2. 如果接口类不在系统类路径上,而是单独与应用程序打包在一起,那么第2行将抛出一个ClassCastException(它具有信息性文本,说明o是一个ConnectionFactoryImpl)

    为什么会这样?我假设JNDI查找只返回远程对象的存根(我在这一点上是否正确?)那么,如果接口类的类加载器不同又有什么关系呢?

    我期待的答案是:

    1. 是的,它应该以你体验的方式发生,因为…
    2. 不,不应该这样,因为如果…那么……,所以你的设置有点可疑
    3. 你描述的情况很奇怪,你确定你不会错过某个地方吗?
    4. …:)

    如果有人能澄清JNDI和存根是如何工作的,那么铸造在哪里(在存根的客户机端)也会很好。还是在远程的原始对象上?)等等。

    谢谢你的帮助!

    1 回复  |  直到 15 年前
        1
  •  2
  •   skaffman    15 年前