对于我这样初次接触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起到的作用类似于外观模式,这么做
也能够解除外部资源与应用程序之间的耦合。