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

时间:2011-04-15 21:55:00

标签: java spring jndi

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

2 个答案:

答案 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不需要显式的上下文环境,因为SimpleNamingContextBuilderInitialContextFactory提供NamingManagerJndiObjectFactoryBean使用NamingManager检索其资源。因此,在前面的答案中,JndiObjectFactoryBean“知道”在Spring命名目录中搜索资源my-db,因为SimpleNamingContextBuilder已将自己建立为NamingManager中的JNDI提供者。 / p>