[原创]我对JNDI的理解_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3035 | 回复: 1   主题: [原创]我对JNDI的理解        下一篇 
lijun.fang
注册用户
等级:上尉
经验:751
发帖:29
精华:0
注册:1970-1-1
状态:离线
发送短消息息给lijun.fang 加好友    发送短消息息给lijun.fang 发消息
发表于: IP:您无权察看 2015-3-26 11:24:06 | [全部帖] [楼主帖] 楼主

     相关介绍

    JNDI就是java   naming   and   directory   interface,就是把一个对象指定一个名字,然后通过这个名字拿这个对象,而且需要在配置的时候指定对象的名字就可以了。在client端,你根本不需要知道你要的对象在什么地方,它的目的就是为了透明。

JNDI能提供访问远程的资源,比如到连接池中去查找连接,可以提高性能。比如在TOMCAT中配置一个数据源后,可以在应用程序中通过JNDI查找获得数据源:

示例代码:

Context context=new InitialContext();
DataSource datasource=(DataSource)context.lookup("datasource");


你可以把它简单地理解为它是一种将对象和名字绑定的技术,对象工厂负责生产出对象,每个对象都和它的唯一的名字绑定,外部程序可以通过名字来获得这些对象的引用。像JDBC中的“DataSource”类就是这样。   

命名或目录服务允许可以集中管理共享信息的存储,使用JNDI可以使相关的应用程序更加一致和易于管理。例如,可以将数据源存储在目录服务中,这样所有与数据源相关的应用程序都能够使用它。其实我们每天都在不自知的情况下使用命名服务。例如,当您在浏览器中输入http://www.landingbj.com/ 时,域名系统(Domain Name System ,DNS)将这个以符号表示的URL转换为一个通信标识符(IP地址)。

JNDI综述

目录服务是命名服务的自然扩展。二者的关键区别在于,目录服务允许属性(比如用户的电子邮件地址)与对象相关联,而命名服务则不然。这样,使用目录服务时,您可以基于对象的属性来搜索它们。JNDI允许您访问文件系统中的文件,定位远程RMI注册表中的对象,访问诸如LDAP这样的目录服务,并定位网络上的EJB。 

JNDI架构(如下图所示)

北京联动北方科技有限公司

JNDI的架构与JDBC的架构非常类似.JNDI架构提供了一组标准命名系统的API,这个基础API是构建在与SPI之上。这个API提供如下五个包

· javax.naming
· javax.naming.directory
· javax.naming.event
· javax.naming.ldap
· javax.naming.spi


   在应用程序中,我们实际上只使到用以上几个包的中类.具体调用类及通信过程对用户来说是透明的.JNDI API提供了访问不同JNDI服务的一个标准的统一的实现(最下层为JNDI 服务的具体实现),第一层JNDI API层,中间层为命名管理层。

     服务端是由SPI对应的公司/厂商来实现的,我们只需将服务端的相关参数传给JNDI API就可以了,具体调用过程由SPI来完成.

JNDI 服务的具体实现:

l LDAP(Lightweight Directory Access Protocol)服务提供者

l CORBA COS(Common Object Request Broker Architecture Common Object Services)命名服务提供者 

l RMI(Java Remote Method Invocation)注册服务提供者

l DNS(Domain Name System)服务提供者.

l FSSP(File System Service Provider)文件系统服务提供者

l 其它服务提供者  

示例代码(以FSSP为例):

package org.demo;
import java.util.Properties;
import javax.naming.*;
/**

    * 示例代码

    * 

    * @author JUN

    */
public class FileStstemTest {
      public static void main(String[] args) {
            try {
                  Properties env = new Properties();
                  // 制定文件系统服务的提供者
                  env.put(Context.INITIAL_CONTEXT_FACTORY,
                  "com.sun.jndi.fscontext.RefFSContextFactory");
                  // 绑定上下文
                  env.put(Context.PROVIDER_URL, "file:///c:/");
                  // 初始化上下文
                  Context ctx = new InitialContext(env);
                  // 循环遍历
                  NamingEnumeration list = ctx.list("/");
                  while (list.hasMore()) {
                        NameClassPair nc = (NameClassPair) list.next();
                        System.out.println(nc);
                  }
            } catch (Exception e) {
                  e.printStackTrace();
            }
      }
}


运行结果:

$360Section: javax.naming.Context
$Recycle.Bin: javax.naming.Context
360SANDBOX: javax.naming.Context
6d15bb1a234ee2a68937b676ba24: javax.naming.Context
alipay: javax.naming.Context
autoexec.bat: java.io.File
bdkv_install.log: java.io.File
bea: javax.naming.Context
config.sys: java.io.File
Documents and Settings: javax.naming.Context
drivers: javax.naming.Context
e63b0f855d3443cc2b2d3a7c432a29: javax.naming.Context
f9dae541b4d9c591464c: javax.naming.Context
fileSystemService.properties: java.io.File
Foxmail 7.2: javax.naming.Context
hiberfil.sys: java.io.File
hrIntegrity: javax.naming.Context
inetpub: javax.naming.Context
jbossJndi.properties: java.io.File
MSOCache: javax.naming.Context
pagefile.sys: java.io.File
PerfLogs: javax.naming.Context
Program Files: javax.naming.Context
Program Files (x86): javax.naming.Context
ProgramData: javax.naming.Context
Recovery: javax.naming.Context
System Volume Information: javax.naming.Context
temp: javax.naming.Context
Users: javax.naming.Context
Windows: javax.naming.Context
Windows.old: javax.naming.Context
ZZ: javax.naming.Context


注意,使用FSSP需要导入两个jar包

该贴被lijun.fang编辑于2015-3-26 11:27:29

该贴被lijun.fang编辑于2015-3-26 11:29:05
  fscontext-1_2-beta3.rar (2015-03-26 11:29,  0.088 M)
该附件被下载的次数 1




赞(0)    操作        顶端 
wei.yang
注册用户
等级:少校
经验:1172
发帖:26
精华:0
注册:1970-1-1
状态:离线
发送短消息息给wei.yang 加好友    发送短消息息给wei.yang 发消息
发表于: IP:您无权察看 2015-3-30 15:43:16 | [全部帖] [楼主帖] 2  楼

感谢分享!!!!!!!



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论