使用Spring的SimpleNamingContextBuilder
作为其JNDI提供程序的应用程序如何知道在其目录中搜索资源?什么将应用程序链接到Spring命名目录?例如,早期JndiObjectFactoryBean
中的answer bean如何知道在Spring目录中查找资源my-db
? JndiObjectFactoryBean
是否需要将属性java.naming.factory.initial
设置为接口InitialContextFactory
的某些实现的上下文环境?使用java.naming.factory.initial
作为JNDI提供程序时,SimpleNamingContextBuilder
的值应该是多少?
答案 0 :(得分:13)
简而言之,如果想在单元测试中使用模拟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);
}
答案 1 :(得分:8)
Java运行时类NamingManager
充当Java应用程序及其命名目录之间的链接。在SimpleNamingContextBuilder
activates时,它会将自己安装到NamingManager
中的静态成员InitialContextFactoryBuilder
。当应用程序创建InitialContext
以检索JNDI上下文时,类InitialContext
委托给NamingManager,后者又要求IntialContextFactoryBuilder
(在本例中为SimpleNamingContextBuilder
)创建一个IntialContextFactory
,最终创建InitialContext
。
JndiObjectFactoryBean
不需要显式的上下文环境,因为SimpleNamingContextBuilder
向InitialContextFactory
提供NamingManager
而JndiObjectFactoryBean
使用NamingManager
检索其资源。因此,在前面的答案中,JndiObjectFactoryBean
“知道”在Spring命名目录中搜索资源my-db
,因为SimpleNamingContextBuilder
已将自己建立为NamingManager
中的JNDI提供者。 / p>