JNDI

1.什么是JNDI?

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JBDI服务和目录之间进行接口(SPI)的实现,有管理者将JNDI API映射为特定的命名入伍和目录系统,是的Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是命名服务的一种自然扩展。两者之间的关键差别是目录服务中对象不但可以有名称还可以有属性(例如:用户有email地址),而服务中对象没有属性。

集群JNDI实现了高可靠性JNDI,通过服务器的集群,保证了JNDI的负载平衡和错误恢复。在全局共享的方式下,集群中的一个应用服务器保证本地JNDI树的独立性,并拥有全局的JNDI树。每个应用服务器在把部署的服务对象绑定到自己本地的JNDI树的同时,还绑定到一个共享的全局JNDI树,实现全局JNDI和自身JNDI的联系。
JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。

JNDI可访问的现有的目录及服务有:
DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。

简而言之:JNDI就是一个容器,是一组在Java应用中访问命名和目录服务的API,通过名称将资源与服务进行服务进行关联。


2.Tocat JDNI

配置及使用(将对象写入到Tomcat  JNDI)

参考Tomcat文档学习


3.Window JDNI

<1>获取Window某一个文件  context.list();

<2>读取某一个文件   context.looup("fileName");

代码实现:

public class TestWindowsJNDI {
    public static void main(String[] args) {
        Hashtable<String,String> environment=new Hashtable<String, String>();
        //1.windows 中有一个工厂
        environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
        //2.执行目录(细节:加协议 file:///)
        environment.put(Context.PROVIDER_URL, "file:///C:\\Windows");
        //获取某个文件夹下所有的文件和文件夹
        try {
            Context context=new InitialContext(environment);
            NamingEnumeration<NameClassPair>  namingEnumeration=context.list("");
            int i=0;
            while(namingEnumeration.hasMore()){
                i++;
                NameClassPair nameClassPair=namingEnumeration.next();
                System.out.println(nameClassPair.getName()+":"+nameClassPair.getClassName());
            }
            System.out.println(i);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



4.自定义JNDI

<1>将对象写入到自定义的JNDI中   context.bind();

<2>在自定义的JNDI中,删除某一个对象   context.unbind();

<3>从自定义的JNDI中获取某一个对象    context.lookup();

<4>从自定义的JNDI中获取所有对象   context.list();

代码实现:

public class TestDIY {
    public static void main(String[] args) {
        Hashtable<String,String> environment=new Hashtable<String, String>();
        environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
        try {
            Context context=new InitialContext(environment);
            //绑定值
            context.bind("a", "aa");
            context.bind("b", "bb");
            context.bind("person", new Person(1, "亮亮", 16));
            
            //移除
            context.unbind("b");
            
            //遍历
            NamingEnumeration<NameClassPair> namingEnumeration=context.list("");
            while(namingEnumeration.hasMore()){
                NameClassPair nameClassPair=namingEnumeration.next();
                Object o=context.lookup(nameClassPair.getName());
                System.out.println(nameClassPair.getName()+" "+o);
            }
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值