`
weifly
  • 浏览: 238807 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jetty中的JNDI实现分析

阅读更多

本文主要探讨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。

分享到:
评论

相关推荐

    Jetty嵌入式服务器的JNDI快速配置指南

    在Jetty中,我们可以利用JNDI来管理资源,如数据源、邮件会话等,以便在Web应用中进行共享。 1. **JNDI的基本概念** - JNDI提供了一种标准的方式来查找和访问各种资源和服务,如数据库连接池、对象工厂等。 - 它...

    jetty相关的全部jar包

    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

    jetty-jndi-9.2.15.v20160210.jar

    java运行依赖jar包

    jetty-jndi-7.6.10.v20130312.jar

    java运行依赖jar包

    Jetty中文手册

    在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 在Jetty中部署应用 部署管理器 部署绑定 热部署 ...

    jetty9分拆的各个包下载

    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所需jar包

    9. **jetty-jndi.jar**:如果需要JNDI(Java Naming and Directory Interface)支持,例如在EJB环境中,这个jar包是必要的。 10. **jetty-plus.jar**:提供了额外的特性,如JNDI绑定、容器初始化bean(web.xml中的...

    Jetty权威指南.pdf

    在Jetty中,可以通过配置JNDI来提供数据源等资源。 **11.2 如何使用** 配置JNDI通常需要指定数据源的名称和实现类,例如: ```xml <New id="dataSource" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg>...

    jetty内嵌到java代码启动

    - **JNDI**:可以配置Jetty以提供JNDI服务,便于应用中的服务发现和注入。 - **静态资源**:可以通过`DefaultHandler`或`ResourceHandler`处理静态文件。 6. **调试与日志** - 在开发阶段,可以通过设置日志级别...

    jetty-document

    如果项目使用Maven构建,可以在项目的pom.xml文件中添加Jetty插件,以实现集成开发环境中的快速部署和调试。 #### 三、深入理解Jetty配置 ##### 3.1 Jetty配置概述 配置Jetty涉及到多个方面,包括但不限于连接器...

    jetty-distribution-9.4.28.v20200408.zip

    7. **JNDI支持**:Java Naming and Directory Interface (JNDI) 提供了查找和绑定资源的能力,Jetty支持JNDI,方便应用访问全局的配置和服务。 8. **JAAS集成**:Jetty可以与Java Authentication and Authorization...

    jetty 6 指南书

    15. **Embedding Jetty**:如何将Jetty嵌入到应用程序中,实现轻量级部署。 16. **JEE服务器整合**:指导如何与Java EE服务器集成。 17. **开发环境中的Jetty**:推荐的开发环境配置和使用方法。 18. **安全**:...

    jetty.jar,jetty-sslengine.jar,jetty-util.jar

    jetty-sslengine.jar包含了处理SSL/TLS连接的类和方法,使Jetty能够处理基于SSL的请求,支持数字证书,实现服务器与客户端之间的安全通信。这使得开发人员可以轻松地在Jetty上搭建安全的Web服务,满足诸如电子商务...

    jetty指导书

    在Jetty中,可以通过配置JNDI来管理数据库连接池等资源。 **11.2 如何使用** 通过配置`context.xml`文件中的`Resource`元素来定义JNDI资源。 #### 十二、会话与集群 **12.1 会话管理** Jetty支持会话管理,可以...

    jetty6 指南书

    7. **类加载器**、**Jetty Connector的SSL配置**、**虚拟主机**、**管理服务器**、**JNDI配置**、**会话与集群**、**性能优化**、**异步Servlet、Ajax和Comet**以及**嵌入Jetty**等内容,都是指南中详细阐述的主题,...

    eclipse中配置使用jetty调试web项目

    在Eclipse这个强大的Java开发...在实际开发中,根据项目需求,你可能还需要配置更多高级特性,如JNDI、连接池、SSL等,这些都是通过修改或扩展"jetty.xml"文件实现的。记住,理解和掌握配置文件的结构和语法是关键。

    jetty包2(lib目录)

    8. **依赖库**: `lib`目录还可能包含其他一些依赖库,如Apache Commons Logging、SLF4J等日志框架,以及Jetty对JNDI、JMX等Java标准服务的支持。 9. **工具类**: 一些工具类库,如`jetty-util.jar`,提供了通用的...

    jetty-9.4.6

    5. **jetty-jndi**:提供JNDI(Java Naming and Directory Interface)支持。 6. **jetty-alpn**:支持ALPN(Application-Layer Protocol Negotiation),用于HTTPS和HTTP/2协议。 7. **jetty-http2**:实现HTTP/2...

    jetty 插件

    8. **JNDI支持**:`jndilib`目录可能包含了JNDI(Java Naming and Directory Interface)相关的库,使得Jetty插件能够支持JNDI查找服务,这对于某些企业级应用来说是必需的。 9. **元数据信息**:`META-INF`目录...

    jetty指南书

    18. **嵌入Jetty**:展示了如何将Jetty直接集成到应用程序中,实现自定义的web服务。 19. **安全**:探讨了Jetty的安全配置,如身份验证和权限管理。 20. **FAQ**:提供了常见问题解答,帮助读者解决在使用Jetty...

Global site tag (gtag.js) - Google Analytics