zoukankan      html  css  js  c++  java
  • 初步理解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

  • 相关阅读:
    青松云安全-WAF-1.0.655 (ubuntu 14.04 server)
    相似变换和仿射变换
    参数坐标系统变换
    城市测量坐标系统的建立
    工程测量坐标系
    大地测量控制点坐标转换技术规范
    为什么样本方差(sample variance)的分母是 n-1?
    似大地水准面
    typedef的用法
    同一椭球面经纬度坐标与空间直角坐标之间的相互转换
  • 原文地址:https://www.cnblogs.com/zh1164/p/6180499.html
Copyright © 2011-2022 走看看