`
fengzl
  • 浏览: 216185 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

JNDI配置原理详解

阅读更多
最近写书,写到JNDI,到处查资料,发现所有的中文资料都对JNDI解释一通,配置代码也是copy的,调了半天也没调通,最后到SUN的网站参考了一下他的JNDI tutorial,终于基本上彻底明白了

和多数java服务一样,SUN对JNDI也只提供接口,使用JNDI只需要用到JNDI接口而不必关心具体实现:

private static Object jndiLookup() throws Exception {
  InitialContext ctx = new InitialContext();
  return ctx.lookup("java:comp/env/systemStartTime");
}


上述代码在J2EE服务器环境下工作得很好,但是在main()中就会报一个NoInitialContextException,许多文章会说你创建InitialContext的时候还要传一个Hashtable或者Properties,像这样:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL,"t3://localhost:7001");
InitialContext ctx = new InitialContext(env);

这个在WebLogic环境下是对的,但是换到JBoss呢?再用JBoss的例子?

其实之所以有NoInitialContextException是因为无法从System.properties中获得必要的JNDI参数,在服务器环境下,服务器启动时就把这些参数放到System.properties中了,于是直接new InitialContext()就搞定了,不要搞env那么麻烦,搞了env你的代码还无法移植,弄不好管理员设置服务器用的不是标准端口还照样抛异常。

但是在单机环境下,可没有JNDI服务在运行,那就手动启动一个JNDI服务。我在JDK 5的rt.jar中一共找到了4种SUN自带的JNDI实现:

LDAP,CORBA,RMI,DNS。

这4种JNDI要正常运行还需要底层的相应服务。一般我们没有LDAP或CORBA服务器,也就无法启动这两种JNDI服务,DNS用于查域名的,以后再研究,唯一可以在main()中启动的就是基于RMI的JNDI服务。

现在我们就在main()中启动基于RMI的JNDI服务并且绑一个Date对象到JNDI上:

LocateRegistry.createRegistry(1099);
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
InitialContext ctx = new InitialContext();
class RemoteDate extends Date implements Remote {};
ctx.bind("java:comp/env/systemStartTime", new RemoteDate());
ctx.close();


注意,我直接把JNDI的相关参数放入了System.properties中,这样,后面的代码如果要查JNDI,直接new InitialContext()就可以了,否则,你又得写Hashtable env = ...

在RMI中绑JNDI的限制是,绑定的对象必须是Remote类型,所以就自己扩展一个。

其实JNDI还有两个Context.SECURITY_PRINCIPAL和Context.SECURITY_CREDENTIAL,如果访问JNDI需要用户名和口令,这两个也要提供,不过一般用不上。

在后面的代码中查询就简单了:

InitialContext ctx = new InitialContext();
Date startTime = (Date) ctx.lookup("java:comp/env/systemStartTime");


在SUN 的JNDI tutorial中的例子用的com.sun.jndi.fscontext.RefFSContextFactory类,但是我死活在JDK 5中没有找到这个类,也就是NoClassDefFoundError,他也不说用的哪个扩展包,我也懒得找了。
分享到:
评论
2 楼 redsnow_fenglin 2010-09-11  
http://www.javaeedev.com/blog/article.jspx?articleId=ff808081129558b50112bd2ad54b000f
1 楼 zhuxiaoleiking 2010-04-30  

相关推荐

    J2EE JNDI配置原理详解 JBOSS安装配置 Maven入门 Ant使用入门

    1.1 Apache Tomcat各版本 1.2 Apache Tomcat Versions 1.3 Java事务处理总结 1.4 JavaBean中使用JDBC...1.22 JNDI配置原理详解 1.23 JSF+Seam框架学习心得 1.24 java jdbc驱动的四种类型 1.25 resource-ref元素

    JNDI配置原理详解.doc

    ### JNDI配置原理详解 #### 一、引言 JNDI(Java Naming and Directory Interface)是Java平台的一部分,它允许开发人员访问命名服务,从而可以存储和检索应用程序组件名称和服务之间的映射关系。本文将详细介绍...

    Tomcat中JNDI原理

    ### Tomcat中JNDI原理详解 #### 一、引言 Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录服务的API。它为开发者提供了访问各种命名和目录服务(如DNS、LDAP等)的统一接口。在Tomcat...

    jboss配置 jndi

    【JBoss配置JNDI详解】 在Java应用服务器中,JNDI(Java Naming and Directory Interface)是一个关键组件,用于查找...通过实践和研究,你可以更熟练地驾驭JBoss的JNDI配置,为你的企业级应用提供稳定、灵活的服务。

    Hibernate 课件_配置文件详解

    ### Hibernate配置文件详解 #### Hibernate概述 Hibernate是一个开源的对象关系映射(ORM)框架,它为Java应用程序提供了简化的方式去处理数据库操作。通过使用Hibernate,开发者可以将Java对象映射到数据库表,并...

    JNDI注入学习1

    **JNDI注入详解** Java Naming and Directory Interface (JNDI) 是Java应用程序用来查找和管理网络资源的接口。它不依赖于特定的目录服务,而是通过服务提供者接口(SPI)来支持多种不同的目录服务,如LDAP、DNS等...

    Tomcat与Java.Web开发技术详解(PDF)

    7. **JNDI与Context**:Java Naming and Directory Interface (JNDI)为Web应用提供了查找和绑定资源的能力。Tomcat的Context配置可以关联特定的Web应用和其对应的目录,方便管理和配置资源。 8. **错误处理与日志**...

    hibernate的详解、原理以及api

    2. **JNDI数据源**: 在WebLogic管理控制台中配置JDBC数据源,供Hibernate使用。 3. **Hibernate配置**: 配置`hibernate.cfg.xml`,指定数据源、方言、缓存等设置。 4. **WebLogic部署**: 在部署描述符(如web.xml)...

    Javaweb开发技术详解

    JavaWeb开发技术是现代互联网应用开发的重要组成部分,汪大乐所著的《Javaweb开发技术详解》一书深入浅出地介绍了这一领域的核心概念和技术。JavaWeb开发主要涉及Servlet、JSP、JSTL、过滤器、监听器、MVC设计模式...

    Tomcat与JavaWeb开发技术详解

    开发者需深入了解其工作原理,熟练掌握部署、配置、管理技巧,以及与JavaWeb开发的结合应用,才能在实际项目中游刃有余。同时,不断关注Tomcat的新特性和性能优化方法,以适应不断发展的Web技术需求。

    Tomcat与Java Web开发技术详解源代码

    《Tomcat与Java Web开发技术详解》是一本深入解析Tomcat服务器及Java Web开发的经典著作,作者孙卫琴以其丰富的经验和深入的理解,为读者呈现了Java Web应用在Tomcat上的实现过程。书中涵盖了大量的实践案例和详尽的...

    [Tomcat与Java.Web开发技术详解][第一版][孙卫琴][PDF清晰版]+APK

    最后,书中可能会涉及一些高级话题,如Tomcat的性能优化、集群配置,以及与其他Java EE组件(如JNDI、JMS等)的集成。 附带的APK文件“android2011-0.6.10.1206.apk”可能是某个基于Android的版本控制工具或相关的...

    Java Web开发详解.pdf

    3. **Java EE组件**:包括JNDI(Java Naming and Directory Interface)、JTA(Java Transaction API)和JMS(Java Message Service)等,这些都是Java企业版提供的服务,用于实现分布式环境下的应用功能,如资源...

    Tomcat与Java.Web开发技术详解源代码

    7. **JNDI和Context配置**:Tomcat支持Java Naming and Directory Interface (JNDI),可以用来查找和绑定资源。`context.xml`配置文件可以定义应用级别的JNDI资源。 8. **性能调优**:Tomcat可以通过调整线程池大小...

    tomcat工作原理深入详解——HowTomcatWorks中文版.pdf

    此外,书中还涵盖了如何配置和自定义Tomcat,这对于系统管理员和开发者来说是非常实用的部分。通过阅读本书,读者不仅可以了解Tomcat的内部工作流程,还能掌握如何优化Tomcat的性能,解决实际部署中遇到的问题。 ...

    EJB原理图:EJB工作原理

    ### EJB原理图详解 #### 一、EJB工作原理概览 EJB(Enterprise JavaBeans)是Java EE平台中的一个重要组成部分,它主要用于构建企业级应用。EJB提供了一种面向服务的方式,允许开发者专注于业务逻辑,而将复杂的...

    JNDIExploit.v1.4.zip

    《JNDIExploit.v1.4:Java Naming and Directory Interface(JNDI)漏洞利用工具详解》 在IT安全领域,了解并防范潜在的安全威胁至关重要。JNDIExploit.v1.4是一个针对Java Naming and Directory Interface (JNDI) ...

    JSPDemo

    综上所述,JSPDemo是一个基于Tomcat服务器的简单JSP应用示例,展示了如何通过JNDI配置来访问Oracle数据库。开发者可以借此学习JSP的动态页面生成、Tomcat服务器的使用以及JNDI在数据库连接管理中的作用。myTest可能...

    Spring boot外部配置(配置中心化)详解

    Spring Boot 外部配置(配置中心化)详解 Spring Boot 框架提供了多种方式来进行外部配置,其中配置中心化是其中一种重要的方式。本文将详细介绍 Spring Boot 外部配置(配置中心化)的实现方式和原理。 配置中心...

Global site tag (gtag.js) - Google Analytics