我已经部署了企业应用程序A和B(在WLS 10.0中)。 A是“框架”,B是客户端应用程序。
客户端发出以下 call :
Object o = ctx.lookup(jndiName); // line 1
cf = (ConnectionFactory) o; // line 2
ConnectionFactory是一个接口(interface),定义为:
public interface ConnectionFactory
extends java.io.Serializable, javax.resource.Referenceable {
...
}
发生的是:
为什么会这样呢?我假设JNDI查找只返回一个存根到远程对象(我现在是对的吗?),那么如果接口(interface)类的类加载器不同,那为什么有关系呢?
我期望的答案是:
如果有人可以澄清JNDI和存根的工作方式,强制转换在哪里发生(在存根的客户端上还是在远程的原始对象上)等,也将是很好的。
谢谢你的帮助!
最佳答案
遗憾的是,答案是(1)。
JNDI并没有规定如何将对象存储在树上或如何将其交付给客户端的机制。它只是用于执行操作的API。
如果两个应用程序都在同一个JVM中(如此处所示),则Weblogic很可能只是将对象直接传递给客户端应用程序。没有存根,并且是“远程端”。由于该对象实现的类型对于客户端应用程序是不可见的(请记住,类型标识由类名称以及从其加载的类加载器定义)。
您可能会认为这是一件奇怪的事情,但是请记住,像这样相互交谈的应用程序并不是JavaEE开发中的规范-应该将这些应用程序彼此隔离,仅共享系统级资源。
关于jakarta-ee - 需要帮助来了解JNDI和J2EE中的特定ClassCastException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2153216/