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

  • 相关阅读:
    js项目练习第二课
    js项目练习第一课
    进度条
    js基础
    反射
    递归函数与三级菜单
    mybatis 动态SQL
    java 面对对象(抽象 继承 接口 多态)
    java Eclipse debug技巧
    mybatis 调用存储过程
  • 原文地址:https://www.cnblogs.com/zh1164/p/6180499.html
Copyright © 2011-2022 走看看