jndi学习笔记(一)——JAVA SE中使用JNDI

       JNDI,JAvA 命名和目录服务,简而言之,就是通过名称寻找对象或者服务的技术,特别在分布式技术中使用广泛。JNDI在服务器容器中使用得比较多,因为容器提供了相应的JDNI服务,向我们屏蔽了很多细节东西,本文将尝试在SE中使用JNDI,因为没有类似容器提供的JNDI服务,所以我们必须自己提供服务——SUN的文件系统服务提供者File System Service Provider,下载地址:http://download.csdn.net/detail/jiangqingqingqing/4900348。其中有两个jar文件:fscontext.jar,providerutil.jar,把这两个文件导入项目。

    先搭建好JNDI服务:

       public static Context getContext() throws NamingException {
Hashtable env = new Hashtable();
     //指定服务提供者  
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");
     //指定根目录,JNDI就是以这个目录作为根目录查找
     env.put(Context.PROVIDER_URL,"file:/F:/jqq");
     //根据要求创建上下文实例
     ctx = new InitialContext(env);
     return ctx;
  }

至此前期准备工作已经做好。

    一、JNDI查找命名系统内对象

      首先,在刚才建立的F:/jqq目录下创建jqq.htm文件,以作为JNDI查找的对象,然后,编码实现:

        ctx = getContext();

        //在F:/jqq目录下查找 jqq.htm文件,获取File对象

        File file =(Fiile)ctx.lookup("jqq.htm");

       System.out.println(file.getAbsolutePath());

        .....

 

  二、JNDI查找命名系统外部的对象

        例子1是在实际目录中查找实际的对象但有时我们的对象并不一定要放在指定的物理目录里,而是可以在逻辑上存在,换句话说,就是把我们的对象映射到Context上,使得我们可以通过Context,像查找实际对象一样查找绑定到这个Context上的我们的对象,但要注意,这个可以绑定到Context的对象,必须实现了Referenceable接口,并实现Reference方法:

    public class DBService implements DBServiceImp,Referenceable{
    private String driver;
    private String url;

@Override
public Reference getReference() throws NamingException {
//Reference是对象的引用,Context中存放的是Reference,为了从Reference中还原出对象实例,
               //我们需要添加RefAddr,它们是创建对象实例的属性。在我们的DBService中,driver和url是这样两个属性。

               //Reference构造函数有点复杂,其中DBServiceFactor是工厂类,用于创建建议大家去看看API
Reference  ref = new Reference(getClass().getName(),DBServiceFactor.class.getName(),null);
ref.add(new StringRefAddr("driver", driver));
ref.add(new StringRefAddr("url",url));
return ref;
}


public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值