初步理解JNDI

今天初步学习了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的更多相关文章
- javascript 原型及原型链的初步理解
最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...
- Spring学习笔记--环境搭建和初步理解IOC
Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...
- Graph Cuts初步理解
一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...
- 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感
关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...
- springBoot(1)---springboot初步理解
springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...
- Mysql加锁过程详解(7)-初步理解MySQL的gap锁
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- 关于THINKPHP5模型关联的初步理解
初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表 和文章分类表 一个文章分类可以有多个文章 所以 文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...
- spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解
题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...
- Android-自定义控件-继承View与ViewGroup的初步理解
继承View需要走的流程是: 1.构造实例化, public ChildView(Context context, @Nullable AttributeSet attrs) 2.测量自身的高和宽on ...
随机推荐
- vrrp
https://zhidao.baidu.com/question/1498182981731748379.html
- C#创建DBF自由库 [转]
先看段代码: string ole_connstring = @"Provider=VFPOLEDB.1;Data Source=D:\;";System.Data.OleDb.O ...
- oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
起因: 在oracle测试过程中,不小心执行了delete user$ 命令,导致oracle当前实例所有的用户信息丢失,包括sys用户. 第一次使用DUL工具数据恢复:失败 下载ParnassusD ...
- GCC的gcc和g++区别
看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g+ ...
- core python applications
第三章: 3.4 电子邮件 SMTP, POP 和 IMAP 协议 第五章: 5.1~5.3 tkinter 各种控件简介 Listbox
- tracert-命令小结
前言:今天在阅读“Web性能权威指南”这本书的时候,发现 tracert 这个命令挺有意思的,在分析网络性能瓶颈的时候也能使用的到,在此就小记一笔以备后用. 1:作用 tracert 是一 ...
- jsp Request获取url信息的各种方法比较
从Request对象中可以获取各种路径信息,以下例子: 假设请求的页面是index.jsp,项目是WebDemo,则在index.jsp中获取有关request对象的各种路径信息如下 String p ...
- OAuth认证
OAuth简介 OAuth是在不提供用户名和密码的情况之下,授权第三方应用访问Web资源的安全协议. OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定 ...
- Swagger-API测试工具实战
初次通过swagger不知道这是一个什么东东. 一.拿到一个项目需要测试,打开地址一看有个大写的swagger,于是各种脑补: 我所理解的就是,swagger是一个API开发工具或者来说是一个框架,开 ...
- 火币网api的nodejs实现
var request = require('request'); var crypto = require('crypto'); var config = { api_url: 'https://a ...