问题描述
|
使用Spring的ѭ0作为其JNDI提供程序的应用程序如何知道在其目录中搜索资源?是什么将应用程序链接到Spring命名目录?例如,这个较早答案中的
JndiObjectFactoryBean
bean如何知道如何在Spring目录中找到资源my-db
? JndiObjectFactoryBean
是否不需要将属性java.naming.factory.initial
设置为接口InitialContextFactory
的某些实现的上下文环境?使用SimpleNamingContextBuilder
作为JNDI提供程序时,java.naming.factory.initial
的值应该是什么?
解决方法
简而言之,如果要在单元测试中使用模拟InitialContext模拟JNDI树,则可以使用SimpleNamingContextBuilder。我在测试的启动方法中实例化了SimpleNamingContextBuildeit并成功创建了内存中的InitialContext。
例如在春季考试课上..
@BeforeClass
public static void setupJndi() throws Exception {
SimpleNamingContextBuilder.emptyActivatedContextBuilder();
Context context = new InitialContext();
context.bind(\"java:comp/env/jms/ConnectionFactory\",myJmsConnectionFactory);
}
,Java运行时类“ 9”充当Java应用程序与其命名目录之间的链接。激活“ 0”时,它将自身安装到“ 9”中的静态成员“ 11”。当应用程序创建InitialContext
来检索JNDI上下文时,类InitialContext
委托NamingManager,后者又要求IntialContextFactoryBuilder
(在这种情况下为SimpleNamingContextBuilder
)创建IntialContextFactory
,最终创建了InitialContext
。
JndiObjectFactoryBean
不需要显式的上下文环境,因为SimpleNamingContextBuilder
为NamingManager
提供InitialContextFactory
,而JndiObjectFactoryBean
使用NamingManager
检索其资源。因此,在较早的答案中,JndiObjectFactoryBean
\“ knows \”在Spring命名目录中搜索资源my-db
,因为SimpleNamingContextBuilder
已在as9ѭ中确立为JNDI提供者。