使用Spring的SimpleNamingContextBuilder的应用程序如何知道在其目录中搜索资源?

Der*_*har 7 java spring jndi

使用Spring SimpleNamingContextBuilder作为其JNDI提供程序的应用程序如何知道在其目录中搜索资源?什么将应用程序链接到Spring命名目录?例如,JndiObjectFactoryBean这个早期答案中的bean 如何知道my-db在Spring目录中查找资源?是否JndiObjectFactoryBean需要将属性java.naming.factory.initial设置为某些接口实现的上下文环境InitialContextFactoryjava.naming.factory.initialSimpleNamingContextBuilder用作JNDI提供者时,它的价值应该是多少?

sup*_*ova 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);
   }
Run Code Online (Sandbox Code Playgroud)


Der*_*har 9

Java运行时类NamingManager充当Java应用程序及其命名目录之间的链接.当SimpleNamingContextBuilder 激活时,它会将自身安装到静态成员InitialContextFactoryBuilderNamingManager.当应用程序创建一个InitialContext检索JNDI上下文时,类InitialContext委托给NamingManager,后者又要求IntialContextFactoryBuilder(在这种情况下SimpleNamingContextBuilder)创建一个IntialContextFactory最终创建的InitialContext.

JndiObjectFactoryBean因为不需要明确的上下文环境SimpleNamingContextBuilder提供InitialContextFactoryNamingManager,并JndiObjectFactoryBean使用NamingManager检索其资源.所以,在早期的回答中,JndiObjectFactoryBean"知道"在Spring命名目录中搜索资源,my-db因为它SimpleNamingContextBuilder已经将自己建立为了JNDI提供者NamingManager.