当前位置: 代码迷 >> J2EE >> J2EE 13 轨范之解读JNDI
  详细解决方案

J2EE 13 轨范之解读JNDI

热度:366   发布时间:2016-04-17 23:25:09.0
J2EE 13 规范之解读JNDI

  对于我这样初次接触J2EE的菜鸟来说,J2EE的 13规范都显得那么神秘。

  今天先从JNDI说起,让我们一个一个的揭开13规范的神秘面纱。

 

   JNDI                                                           

  JNDI(Java Naming and Directory Interface)Java 命名与目录接口,JavaEE规范中重要的规范之一,是命名

服务的抽象机制。

 

  常用的JNDI操作:                                     

  bind(String sName,Object object),绑定:把名称同对象关联的过程。

  rebind(String sName,Object object),重新绑定:用来把对象同一个已经存在的名称重新绑定。一般使用

rebind()而不使用bind(),因为当有重名的时候rebind()不会出现异常,而bind()会报异常。

  unbind(String sName),释放:用来把对象从目录中释放出来。

  lookup(String sName),查找:返回目录总的一个对象。

  rename(String sOldName,String sNewName),重命名:用来修改对象名称绑定的名称。

  NamingEnumeration listBindings(String sName),清单:返回绑定在特定上下文中指定属性名对象的清单列

表,它返回名字、类和对象本身,它用于那些需要对对象进行实际操作的应用。具体使用如下:

  //得到初始目录环境的一个引用

  Context cntxt = new InitialContext();

 

  

       实例:                                                        

     Binding示例:

<span style="font-size:18px;">public static InitialContext getInitialContext() throws NamingException {    Hashtable env = new Hashtable();    env.put(Context.INITIAL_CONTEXT_FACTORY,         "weblogic.jndi.WLInitialContextFactory");    env.put(Context.PROVIDER_URL,"t3://localhost:7001");    InitialContext context = new InitialContext(env);    return context;}//获得 initial contextInitialContext initialContext = getInitialContext();//创建一个名为 Bank 的对象.Bank myBank = new Bank();//把Bind 对象绑定到JNDI树。initialContext.rebind("theBank",myBank);</span>


       Lookup示例:

public static InitialContext getInitialContext() throws NamingException {    Hashtable env = new Hashtable();    env.put(Context.INITIAL_CONTEXT_FACTORY,         "weblogic.jndi.WLInitialContextFactory");    env.put(Context.PROVIDER_URL,"t3://localhost:7001");    InitialContext context = new InitialContext(env);    return context;}//获得 initial contextInitialContext initialContext = getInitialContext();//找到绑定的Bank 对象.Bank myBank = (Bank) initialContext.lookup("theBank");

    

    JNDI作用                                                           

  为开发人员提供查找和访问各种命名和目录服务的通用、统一的接口

 

 

  我的理解:                                                 

 

  大家都用过HashTable和Dictionary。他们的工作原理是:以Key和Value的形式存储对象,每一个添加项都是由

一个值及其相关连的键组成。在使用的时候可以根据Key找到相应的对象。

 

  JNDI也可以这样理解。他利用bind和rebind操作同样以键值(Key和Value)的形式将对象绑定到JNDI树上,然

后以lookup操作根据Key查找到相应的Value(对象),进行操作。

 

  每一个规范都是对编程某一方面的抽象,JNDI主要提供查找服务。它为编程人员提供了一个统一的操作方式,不

管是LDAP、RMI、DNS、目录服务、文件服务、对象、配置文件等等,我们只需知道它们的名字就可以获取和操作

他们。

 

  J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。JNDI 在 J2EE 中的角色就是“交换机” —— J2EE 组

件在运行时间接地查找其他组件、资源或服务的通用机制。JNDI 在 J2EE 应用程序中的主要角色就是提供间接层,

这样组件就可以发现所需要的资源,而不用了解这些间接性。从这方面来看JNDI起到的作用类似于外观模式,这么做

也能够解除外部资源与应用程序之间的耦合。

 

  相关解决方案