2010-03-02 32 views
2

我有一个jboss web服务,它获取了错误的初始上下文。我希望它使用服务根目录中的jndi.properties中的java.naming.factory.initial,而不是使用NamingContextFactory中的jboss jndi.properties中的那个。在ant构建文件中,我将jndi.properties放在类路径中,并确保将其复制到存档中,但该服务仍取而代之获得NamingContextFactory。我怎么知道哪个jndi.properties被使用,以便工厂正确设置?在类路径上排序多个jndi.properties

不幸的情况是,我有一个第三方的jar我必须使用预计其初始上下文工厂将在其包装jndi.properties文件中指定的,但是当我在JBoss中运行这个它得到NamingContextFactory。我无法更改jboss jndi.properties文件,没有任何问题。

+0

您可能需要执行一些JBoss类加载操作。 JAR是EAR还是WAR的一部分? – skaffman 2010-03-02 22:44:17

+1

它是EAR的一部分。 – insipid 2010-03-03 13:27:22

回答

2

如果在类路径的根目录中有多个jndi.properties文件,那么InitialContext会尝试合并这两个文件,但哪一个文件或多或少都是偶然事件。

如果你想确定,那么InitialContext有一个构造函数,需要一个Hashtable的属性,你可以明确地指定它们。在这种情况下,这比通过jndi.properties的隐式加载更可取。您始终可以将您的目标jndi.properties加载到Properties对象(它是Hashtable的子类)中,并将其传递给构造函数。

+0

编辑我的帖子,包括我不控制第三方库的初始上下文请求... :( – insipid 2010-03-02 22:26:36