今天初步学习了jndi的基本原理,主要是 学习了收藏中的一篇博文,讲的很好,现在记录一下自己的理解。

其实jndi就和jdbc很相似, 我们希望通过相同的jdbc api来访问不同的数据库,就必须提供数据库相关的驱动程序(driver)。 来类比一下jndi, 首先不同的目录服务(LDAP, RMI ...)就好比不同的数据库(H2 , MYSQL, POSTGRESQL...),我们访问目录服务所使用的同一接口jndi api 就好比 jdbc api, 而连接两者的 驱动程序在 jndi中就是 SPI(服务提供接口)。

所以一句话就是:我们通过 不同的SPI (驱动程序) 来使用同一的 jndi api来访问不同的目录服务

下面是一个最简单的使用jndi来访问文件系统服务的例子。

package com.massclouds.jndi;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Hashtable; import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException; public class JNDITest {
public static void main(String[] args) throws NamingException, IOException {
Hashtable<String, String> env = new Hashtable<>();
//通过注册 INITIAL_CONTEXT_FACTORY 来初始化JNDI上下文,其实就是为其提供了一个SPI(驱动程序)
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); Context context = new InitialContext(env); //这里使用同样的 JNDI API 来查找目录服务中的资源
File o = (File)context.lookup("C:/accounts.xml");
BufferedReader br = new BufferedReader(new FileReader(o));
String temp = null;
while((temp = br.readLine()) != null){
System.out.println(temp);
} br.close();
}
}

这个例子很简单,也没有什么具体用处,但是很好的说明了jndi的基本使用。

例子中用到的一个jndi spi

http://files.cnblogs.com/files/zh1164/fscontext.jar.zip

初步理解JNDI的更多相关文章

  1. javascript 原型及原型链的初步理解

    最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...

  2. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  3. Graph Cuts初步理解

    一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...

  4. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  5. springBoot(1)---springboot初步理解

    springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...

  6. Mysql加锁过程详解(7)-初步理解MySQL的gap锁

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  7. 关于THINKPHP5模型关联的初步理解

    初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表  和文章分类表 一个文章分类可以有多个文章  所以  文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...

  8. spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解

    题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...

  9. Android-自定义控件-继承View与ViewGroup的初步理解

    继承View需要走的流程是: 1.构造实例化, public ChildView(Context context, @Nullable AttributeSet attrs) 2.测量自身的高和宽on ...

随机推荐

  1. selenium 关于富文本的处理

    http://www.cnblogs.com/xiaobaichuangtianxia/p/5889999.html

  2. 利用sp_addlinkedserver实现远程数据库链接

    --查看当前链接情况: select * from sys.servers; --使用 sp_helpserver 来显示可用的服务器 Exec sp_helpserver --删除已经存在的某个链接 ...

  3. mklink

    $ mklink /D 参数:创建目录类型链接

  4. 安装boost库(Windows)

    1. 下载 官网:http://www.boost.org/ 主页:https://sourceforge.net/projects/boost/ 当前最新版:V1.61.0 2. 编译 首先,生成b ...

  5. xampp下创建多个虚拟网站目录

    大家知道,伟大的IIS下面增加多个网站就1分钟搞定.现在换XAMPP下运行多个PHP目录,那我们需要有点探索精神.那么进入正题 首先,下载安装官方最新版本的xampp,地址:点击.记得如果电脑安装有I ...

  6. jQuery-表单流程导航

    前言:以前做过一个项目,里面牵涉到流程相关的业务,需要用到流程页面导航的效果,完整的工作流相关的项目以前也做过,需要用到第三方插件,当然这里记录的业务需求没这个麻烦,仅仅需要能有一个页面导航的标题栏, ...

  7. django--模型元选项(八)

    1.db_table Options.db_table该模型所用的数据表的名称:db_table = 'test'为节省你的时间,Django 会根据模型类的名称和包含它的应用的名称自动指定数据库表名 ...

  8. SVN服务器的搭建和使用

    VisualSVN Server和TortoiseSVN的下载,安装,汉化:SVN服务器搭建和使用(一) 如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使用:SVN服 ...

  9. 完全卸载Oracle11G

    要特别注意删除注册表的这块,如果删错了会导致系统出现问题,而且oracle的安装卸载真的很烦,一旦装错了,卸载不干净就会导致种种的问题无法再次安装,个人建议用360卸载,360卸载完成后会自动检测到无 ...

  10. Excel 执行Sql 将查询结果输出到EXCEL指定位置

    Dim cnn,strSql Set cnn = CreateObject("adodb.connection") cnn.Open "driver={sql serve ...