本文主要探讨jetty中的JNDI实现。
JNDI的入口类是javax.naming.InitialContext,其中的getURLOrDefaultInitCtx方法用于查找特定提供商的初始上下文对象,代码:
protected Context getURLOrDefaultInitCtx(String name)
throws NamingException {
if (NamingManager.hasInitialContextFactoryBuilder()) {
return getDefaultInitCtx();
}
String scheme = getURLScheme(name);
if (scheme != null) {
Context ctx = NamingManager.getURLContext(scheme, myProps);
if (ctx != null) {
return ctx;
}
}
return getDefaultInitCtx();
}
如果name字符串是一个URL,则使用NamingManager.getURLContext方法获得指定的上下文,否则使用默认上下文。例如 java:comp/env就是一个URL形式的name,jdbc/mysql1就不是URL形式,必定会通过默认上下文查找。
如何确定上下文工厂?
InitialContext的javadoc中已经描述的很清除了
1. 构造方法的环境参数、(适当属性的)applet 参数,以及系统属性中最先出现的属性。
2. 应用程序资源文件 (jndi.properties)。
Jetty中是通过jndi.properties资源文件来配置JNDI上下文工厂的,文件存放在jetty-jndi-7.4.0.v20110414.jar中,文件内容是:
java.naming.factory.url.pkgs=org.eclipse.jetty.jndi
java.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory
对于java:comp开头的name,使用org.eclipse.jetty.jndi.java.javaURLContextFactory来初始化上下文,对于其他类型的name,使用org.eclipse.jetty.jndi.InitialContextFactory。这两种初始化方法有不同的上下文根节点,是两颗上下文树。
默认根上下文存储在org.eclipse.jetty.jndi.local.localContextRoot类中,是一个静态变量。
java:开头的根上下文存储在org.eclipse.jetty.jndi.java.javaRootURLContext类中,是一个静态变量。
如何做到每个应用有私有的java:comp/env命名空间?
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。
分享到:
相关推荐
NULL 博文链接:https://seraph115.iteye.com/blog/436300
jar包版本9.4.8.v20171121,包含jetty-server-9.4.8.v20171121.jar,jetty-servlet-9.4.8.v20171121.jar,...jetty-annotations-9.4.8.v20171121.jarjetty-deploy-9.4.8.v20171121.jar,jetty-jndi-9.4.8.v20171121.jar
java运行依赖jar包
java运行依赖jar包
在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 在Jetty中部署应用 部署管理器 部署绑定 热部署 ...
jetty-jndi-9.2.26.v20180806.jar jetty-plus-9.2.26.v20180806.jar jetty-proxy-9.2.26.v20180806.jar jetty-quickstart-9.2.26.v20180806.jar jetty-rewrite-9.2.26.v20180806.jar jetty-schemas-3.1.jar。。。。
配置Jetty的JNDI资源 19 Eclipse首选项 20 代码格式化 21 代码模板 22 文本编辑器 22 编译器 23 OWS服务 24 OWS服务概览 24 实现一个简单的OWS服务 24 建立 25 创建插件 27 试一试 30 REST服务 34 简介 34 RESTful...
Jetty提供了Web服务器和servlet容器的功能,还支持HTTP/2, WebSocket, OSGi, JMX, JNDI, JAAS 和很多其他模块。
Eclipse Jetty provides a Web server and javax.servlet container, plus support for HTTP/2, WebSocket, OSGi, JMX, JNDI, JAAS and many other integrations. These components are open source and available ...
org.eclipse.jetty.jndi.source_9.1.1.v20140108.jar org.eclipse.jetty.osgi.boot_9.1.1.v20140108.jar org.eclipse.jetty.osgi.boot.jsp_9.1.1.v20140108.jar org.eclipse.jetty.osgi.boot.jsp.source_9.1.1.v...
Geoserver安装方法的话,我是把 war 包放到到Tomcat目录下的webapp路径下,这里跨域设置针对war包的设置方式。
来救援Jetty 提供了一个 Web 服务器和 javax.servlet 容器,此外还支持 SPDY、Web Sockets、OSGi、JMX、JNDI、JASPI、AJP 和许多其他集成。 这些组件是开源的,可用于商业用途和分发。 Jetty 用于各种项目和产品。 ...
Application local JNDI context 219 resource-ref 221 resource-env-ref 222 ejb-ref 222 ejb-local-ref 223 service-ref 224 message-destination-ref 225 persistence-context-ref 226 persistence-unit-...
在Spring环境中使用YAML暴露属性 iii. 23.6.3. Multi-profile YAML文档 iv. 23.6.4. YAML缺点 vii. 23.7. 类型安全的配置属性 i. 23.7.1. 第三方配置 ii. 23.7.2. 松散的绑定(Relaxed binding) iii. 23.7.3. @...
Connection to a JNDI DataSource 29.2. Using JdbcTemplate 29.3. JPA and “Spring Data” 29.3.1. Entity Classes 29.3.2. Spring Data JPA Repositories 29.3.3. Creating and Dropping JPA Databases 29.3.4. ...
目录 ..........................................................................................................................I 译者声明..................................................................