读书人

jetty中的JNDI兑现分析

发布时间: 2012-09-09 09:27:54 作者: rapoo

jetty中的JNDI实现分析

本文主要探讨jetty中的JNDI实现。

?

JNDI的入口类是javax.naming.InitialContext,其中的getURLOrDefaultInitCtx方法用于查找特定提供商的初始上下文对象,代码:

static{try{__javaNameParser = new javaNameParser();       __nameRoot = new NamingContext();__nameRoot.setNameParser(__javaNameParser);StringRefAddr parserAddr = new StringRefAddr("parser", __javaNameParser.getClass().getName());            Reference ref = new Reference ("javax.naming.Context",                                           parserAddr,                                           ContextFactory.class.getName(),                                           (String)null);//bind special object factory at comp__nameRoot.bind ("comp", ref);}catch (Exception e){__log.warn(e);}}

?jetty在__nameRoot中绑定了一个名为comp的Reference类型的变量,这是一个引用。这个变量的工厂类是:org.eclipse.jetty.jndi.ContextFactory,这个类中基于classloader来创建上下文对象。因此在应用程序内部,使用InitialContext的lookup方法查找类似java:comp/env名称的对象时,将基于调用环境返回应用程序相关的上下文,也就是应用程序私有的上下文。

?

从localContextRoot类的名字也可以看出,jetty中的JNDI实现是本机JNDI实现,不支持跨JVM的远程对象查找。

IBM的websphere和Oracle的weblogic等服务器都支持远程对象查找,资源对象可以存放在一个JVM中,并在多个其他的JVM中使用这个资源。开源的JBoss服务器也支持远程对象查找。

我感觉远程JNDI的用处不多,主要查找的都是一些轻量级的服务对象,如:JMSContextProvider。

读书人网 >软件架构设计

热点推荐