我有一个企业应用程序的A和B部署的(在乘法10.0).一个是"框架",B为一个客户的应用程序。客户问题的下列呼吁:

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

连接工厂是一个接口,定义为:

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

发生什么事情是:

  1. 如果将罐中含有的界面类系统上与类路径2行是执行的现
  2. 如果接口类是不是在系统类路径,但包装用的应用程序分开,第2行抛出ClassCastException(其具有翔实的文本,是ConnectionFactoryImpl)

为什么这是可能的?我认为JNDI查找回返的唯一根遥目(我就在这点?), 那么为什么这很重要,如果这类装入器的接口类是不同的?

这种答案,我期望:

  1. 是的,这应该发生的方式,你的经验,因为...
  2. 不,这不应该发生这种方式,因为如果...然后...,所以有一些腥在安装
  3. 你的情况的描述是很奇怪,你确定你不会错过一些点的地方吗?
  4. ... :)

它也会很好如果有人能澄清如何JNDI和残余部分的工作,并铸件的发生(在客户边上的存根?或者在原来的目的远程端?), 等等。

谢谢你的帮助!

有帮助吗?

解决方案

答案,可悲的是,是(1)条。

JNDI并没有规定一个机构为对象如何储存在树上,或者它是如何被传递给客户。它只是一个API用于执行的行动。

如果这两个应用程序在相同的JVM,因为它们是在这里,然后任何非常有可能就移交对象直接向客户应用程序。没有存根,以及"远程"。因为类型的实施,对象是不可见的客户应用程序(记得,一种身份的定义是通过这类名称,也类装入器装)。

你可能会认为这是一个奇怪的事情发生,但铭记,应在谈论他们之间一样,这是不规范在java ee发展的应用程序都应该是彼此隔离,共享系统唯一级的资源。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top