美文网首页
JNDI知识摘要

JNDI知识摘要

作者: 南乡清水 | 来源:发表于2018-06-25 19:59 被阅读75次

1 什么是JNDI?

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互

通过JNDI可以实现对象的创建与托管,和对象的使用过程完全解耦

比如:在application的底层创建对象,并将对象bind到特定的context中,对象的创建过程或者"查找"方式只有此底层模块支持,外部程序不可见.对于对象的使用者(调用者)只能通过JNDI的方式获取对象,对象使用者无法直接创建对象等

2 JNDI架构

架构

关于JNDI要注意的重要一点是,它提供了应用编程接口(application programming interface,API)和服务提供者接口(service provider interface,SPI)。这一点的真正含义是,要让应用与命名服务或目录服务交互,必须有这个服务的JNDI服务提供者,这正是JNDI SPI发挥作用的地方。服务提供者基本上是一组类,这些类为各种具体的命名和目录服务实现了JNDI接口—很像JDBC驱动为各种具体的数据库系统实现了JDBC接口一样。作为一个应用开发者,我们不必操心JNDI SPI的具体实现。只需要确认要使用的某一个命名或目录服务都有服务提供者。

JNDI提供了如下几个程序包:

Javax.naming:包含了访问命名服务的类和接口。例如,它定义了Context接口,这是命名服务执行查询的入口。
Javax.naming.directory:对命名包的扩充,提供了访问目录服务的类和接口。例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。
Javax.naming.event:提供了对访问命名和目录服务时的事件通知的支持。例如,定义了NamingEvent类,这个类用来表示命名/目录服务产生的事件,定义了侦听NamingEvents的NamingListener接口。
Javax.naming.ldap:这个包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。
Javax.naming.spi:这个包提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。这个包是为有兴趣创建服务提供者的开发者提供的。

3 案例

引入依赖


        <dependency>
            <groupId>com.sun.messaging.mq</groupId>
            <artifactId>fscontext</artifactId>
            <version>4.4</version>
        </dependency>

        <dependency>
            <groupId>com.sun.jndi</groupId>
            <artifactId>providerutil</artifactId>
            <version>1.2</version>
            <type>pom</type>
        </dependency>

文件操作实例

   public static void main(String[] args) throws NamingException {
        Hashtable<String,String> env = new Hashtable<>();
        //指明初始化的factory是我们下载的jar包中的RefFSContextFactory
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
        //指明Context的初始URL,这里我们的是d盘
        env.put(Context.PROVIDER_URL,"file:///d:/");

        Context ctx = new InitialContext(env);

        //在C盘下创建要给文件夹
        ctx.createSubcontext("testDir");

        //在C盘下定位myFile文件
        File f =  (File) ctx.lookup("test01.py");
        System.out.println(f);

        //列出当前context下的所有元素的名称和类型(包括文件夹和文件)
        NamingEnumeration list = ctx.list("/");
        while (list.hasMore()) {
            NameClassPair nc = (NameClassPair)list.next();
            System.out.println(nc);
        }
    }

Reference

具体使用方式可参考:JNDI简介与SPI实现

相关文章

  • JNDI知识摘要

    1 什么是JNDI? JNDI(Java Naming and Directory Interface,Java...

  • JNDI

    JNDI 是什么 JNDI ( Java Naming and Directory Interface, Java...

  • tomcat jdbc数据源的jndi配置

    jndi是什么? JNDI(Java Naming and Directory Interface,Java命名和...

  • JNDI - Java 名称目录接口

    1.什么是JNDI? 中文:java名称目录接口 一种技术 2.JNDI做什么? JNDI可以把java应用程序访...

  • tomcat--web项目连接到数据库

    1. JNDI JNDI是一套用于java 目录服务的API。Java应用可以通过JNDI按照命名来查找数据和对象...

  • JNDI

    之前做了一个properties文件内容加密的东西,因为很多时候,系统正式上线都是改用成JNDI配置数据源,所以正...

  • JNDI

    NDI 是什么JNDI是 Java 命名与目录接口(Java Naming and Directory Inter...

  • JNDI

    在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据...

  • Java基础知识之JNDI

    说起来,可能很多人对于JNDI这个名词感到十分陌生,实际上JNDI是一种广泛存在于各种J2EE容器的技术,而且也是...

  • springboot内置tomcat集成jndi多数据源

    一,什么是JNDI数据源? 我们看下百度百科的描述JNDI(Java Naming and Directory I...

网友评论

      本文标题:JNDI知识摘要

      本文链接:https://www.haomeiwen.com/subject/ilgdyftx.html