`

关于JNDI

阅读更多
刚才跟“今年是龙年”讨论之后,对JNDI的有关概念清楚了一些,整理总结如下

1、JNDI规范的归属

JNDI本身是java se最早的一批规范,但是似乎不像JDBC等,有专门的JSR编号,在jsr.org上,找不到专门描述JNDI的规范
http://jcp.org/en/jsr/all

另外在JAVA EE规范中第5章,也专门提到了JNDI
http://java.chinaitlab.com/Special/java_ee/Chapter5.html

关于JNDI的资料,还有以下2个官方链接:
http://docs.oracle.com/cd/E17802_01/products/products/jndi/javadoc/
http://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index.html

可以这么理解,JNDI规范虽然本身不是JAVA EE规范的一部分,但是JAVA EE规范要求,所有的JAVA EE容器,都需要实现JNDI规范

但是,就算脱离了JAVA EE环境,只要有专门的JNDI实现,应用程序一样可以使用JNDI的服务,比如SUN公司的遗产,fscontext
http://docstore.mik.ua/orelly/java-ent/jenut/ch06_02.htm#ch06-pgfid-982058

2、JNDI规范的价值

在EJB2是企业应用开发主流技术的时候,JNDI很有用
http://blog.csdn.net/zhaosg198312/article/details/3979435

但是现在,java ee without EJB的风潮已经兴起很久了,特别是以spring为代表的IOC容器大行其道,通过IOC容器已经可以实现组件注入的功能,JNDI规范的应用已经比以前少得多了

很多近年才接触JAVA EE的开发者,甚至都没有听过JNDI的概念;大量的简单应用,也没有涉及到JNDI

以下几个介绍JNDI的链接,似乎也不错
http://blog.csdn.net/zhaosg198312/article/details/3979435
http://stackoverflow.com/questions/1350816/what-is-the-purpose-of-jndi

我个人有2个理解:

第一,JAVA EE对一个端到端开发过程中,涉及到的角色进行了划分,一种是写应用的人,叫Developer;另一种是部署应用的人,叫Deployer。JAVA EE规范认为,作为developer,无需关心数据源来自哪里,这是deployer的职责。所以developer只需要写:
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("Database");

但是,实际上现在的开发过程中,这2者似乎都是程序员的事,并没有这么明确的分工,所以JNDI的这层意义被削弱了。但是,将资源获取,和资源配置分离开的思想,依然是正确的,也是主流的做法

第二,JNDI起到了很好的抽象层的作用。还是上面的那段代码,就算不考虑角色分工,代码本身也是非常简洁和优雅的。现在我们一般通过spring管理数据源,将DataSource定义为一个bean,然后注入到DAO对象,或者DAO代理对象中,这种做法其实起源于JNDI,历史远远早于IOC容器之前

3、其他

对于JNDI,Java Naming and Directory Interface中,“命名”和“目录”的理解

命名:JNDI的本质,就是为了容易地获取应用外部的种种资源。相当于有一个外部服务,托管了应用将会用到的所有资源。而应用要获取资源,就需要传递一个唯一的标识。就像使用Map数据结构,需要传递一个key,才能获取value。对JNDI也一样,资源的唯一标识,就是资源的命名,这是JNDI里Naming的含义

目录:设想JNDI服务管理了大量的资源,当然就希望有一个方式对资源进行分类,就像硬盘里的文件多了,也会建立子目录来管理是一个道理。Context接口也提供了createSubcontext()、destroySubcontext()等方法,来创建目录。这是JNDI里Directory的含义

上面也是我看了一堆资料,然后猜测的,不一定对,但是基本能自圆其说

另外,JNDI可以跨应用地获取资源,以实现分布式,这个也是比Spring这样的普通IOC容器强的地方,当然是否用得到,则是另一回事。“跨应用获取资源”的范围可大可小,部署在同一个容器中的不同应用,获取global resource也是跨应用;获取不同服务器上的资源,也是跨应用,但是到目前为止,我还没有见过这种用法
分享到:
评论

相关推荐

    关于JNDI测试项目

    JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试...

    jndi-1_2_1.zip_jndi_jndi-1.2.1.jar

    标题中的"jndi-1_2_1.zip_jndi_jndi-1.2.1.jar"表明这是一个关于JNDI的版本1.2.1的开源软件包,其中包含了一个名为"jndi-1.2.1.jar"的JAR文件。这个JAR文件包含了JNDI库的所有实现,使得开发者可以在他们的Java项目...

    JNDI-Injection-Exploit-1.0-SNAPSHOT-all.zip

    标题"JNDI-Injection-Exploit-1.0-SNAPSHOT-all.zip"暗示了这是一个关于JNDI注入漏洞的exploit工具包,版本为1.0 SNAPSHOT,可能包含了多个利用示例或攻击代码。"all"可能表示该压缩包包含了所有相关的组件或测试...

    java JNDI总结

    在进行Java开发时,经常会遇到关于JNDI配置的相关问题。下面将详细介绍JNDI的基本概念、配置方法以及如何在实际开发中应用它来管理数据库连接等资源。 ##### 1. JNDI的基本概念 JNDI是一种用于访问命名和目录服务...

    JNDI支持包

    - `README.txt` 可能提供了关于JNDI库的基本介绍、使用指南或者注意事项,帮助开发者快速了解和开始使用。 - `examples` 目录可能包含了一些使用JNDI的示例代码,这对于学习和理解JNDI的工作原理非常有帮助。 - `doc...

    jndi指南.zip

    7. **beyond** - 这个目录可能包含了关于JNDI高级话题的信息,如扩展和优化。 8. **getStarted** - 对于初学者来说,这可能是一个入门指南,介绍了如何开始使用JNDI。 9. **objects** - 可能讨论了如何在JNDI中...

    kettler连接oracle 12c数据库(目前只能用JNDI)

    - 使用文本编辑器打开 Kettler 的配置文件,找到关于 JNDI 的配置部分。 - 如果 Kettler 配置文件中已有 JNDI 配置,则根据上述步骤进行相应的修改;如果没有,则需要新增配置项。 #### 四、验证连接 完成以上...

    JNDI介绍和学习资料

    关于JNDI的介绍和个人总结 还请多多指教 大家来分享学习 共同进步 谢谢

    jndi-tool JNDI服务利用工具

    "jndi-tool"是一个专门针对JNDI服务的利用工具,它可以被用来测试和利用JNDI相关的安全漏洞。此工具特别关注RMI和LDAP服务,这两种服务是JNDI常用的两种协议。RMI允许Java对象在不同的Java虚拟机之间进行远程调用,...

    Tomcat中JNDI原理

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

    027-JNDI之初探 LDAP.pdf

    本文档提供了一个关于JNDI和LDAP的入门指南,涵盖了JNDI References的基础知识,LDAP协议的核心概念,包括命名模型、功能模型和安全模型,以及如何搭建和配置LDAP服务器。文档中的实例代码展示了如何利用Java技术栈...

    Hibernate 3.1+Tomcat 5.5.X(配置JNDI篇)

    【描述】:文章介绍了在Tomcat 5.5.X版本中如何配置Hibernate 3.1,特别是关于JNDI(Java Naming and Directory Interface)的设置方法。 【标签】:“hibernate”,“tomcat” 【内容】: 在Hibernate 3.1和...

    JNDIDemo 以及相关文档

    2. **目录服务**:目录服务是命名服务的扩展,它不仅存储对象的名称,还存储关于对象的属性信息。例如,用户可能会在目录服务中查找一个邮件服务器,并获取其主机名、端口等详细信息。 3. **上下文(Context)**:...

    jndi所依赖的jar包

    Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录服务的API,它为各种不同的命名和目录服务提供了统一的接口。在Java应用程序中,JNDI允许开发者查找和绑定对象,这些对象可以是数据源、...

    JNDI示例整合SSH

    **标题:“JNDI示例整合SSH”** 在IT领域,`JNDI`(Java Naming and Directory Interface)是Java平台提供的一种标准接口,用于访问命名和目录服务。它允许应用程序查找和操作不同类型的网络资源,如数据源、EJB等...

    用JNDI绑定DataSource

    在Java应用中,JNDI(Java Naming and Directory Interface)是一种标准的接口,它允许应用程序查找和使用资源,如数据源(DataSource),而无需直接在代码中硬编码这些资源的位置或配置信息。JNDI的核心理念是将...

    JNDI-Injection-Exploit-1.0-SNAPSHOT-all

    《深入解析JNDI注入攻击与防御》 Java Naming and Directory Interface (JNDI) 是Java平台中用于访问各种命名和目录服务的API,它提供了一种统一的方式来查找和访问不同类型的网络资源,如数据库、对象、服务器等。...

    jndi数据库查询例子

    **JNDI(Java Naming and Directory Interface)数据库查询例子** JNDI是Java平台中用于查找和绑定资源的接口,它允许程序通过名称查找数据源、对象服务等。在Java应用中,特别是企业级Java应用中,JNDI被广泛用于...

Global site tag (gtag.js) - Google Analytics