我部署了企业应用程序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 {
...
}
会发生什么:
为什么这可能?我假设JNDI查找只返回一个存根到远程对象(我在这一点上是对的吗?),那么为什么接口类的类加载器是不同的呢?
我期待的那种答案:
如果有人能够澄清JNDI和存根如何工作,在哪里进行转换(在存根上的客户端?或者在远程端的原始对象上?)等等,也会很好。
感谢您的帮助!
答案 0 :(得分:2)
遗憾的是,答案是(1)。
JNDI没有规定对象在树上的存储方式或者如何将其传递给客户端的机制。它只是用于执行操作的API。
如果两个应用程序都在同一个JVM中,那么Weblogic很可能只是将对象直接交给客户端应用程序。没有存根和“远程端”。由于该对象实现的类型对客户端应用程序不可见(请记住,类型标识是由类名定义的,也是由它加载的类加载器)。
您可能认为这是一件非常奇怪的事情,但请记住,应用程序之间的谈话并不是JavaEE开发中的常态 - 应用程序应该彼此隔离,只共享系统级资源