论文部分内容阅读
【摘 要】JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。分布式计算环境通常使用命名和目录服务来获取共享的组件和资源。命名和目录服务将名称与位置、服务、信息和资源关联起来。命名服务提供名称—对象的映射。目录服务提供有关对象的信息,并提供定位这些对象所需的搜索工具。有许多命名和目录服务实现,并且到它们的接口是不同的。Java命名和目录接口或JNDI提供了一个用于访问不同的命名和目录服务的公共接口。因此,了解JNDI在开发一个EJB应用程序中是至关重要的。另外,JDBC可以用JNDI来访问一个关系数据库。
【关键词】JNDI;Java EE
中图分类号:TP18 文献标识码:A 文章编号:1009-8283(2009)03-0105-01
1 JNDI的由来
说到JNDI的由来就要先提下Java EE。Java EE是一种利用Java平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。Java EE最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。Java EE原名为J2EE,是Sun公司在1997年度Java One大会上发布的。其目的是未开发和部署企业级Web应用制定标准。通过Java EE,Java语言与工具得以延伸到那些复杂的、多层的电子商务和企业级应用当中。
由于Java EE应用的组件可以独立运行,而且经常是在不同设备上运行,因此客户端和应用服务器层代码必须以某种方式查找和参考其他代码和资源。而实现这点就需要JNDI的帮助了。JNDI可以用于当前各种类型的命名系统。JNDI也可以用于命名和引用位于一个特定的命名系统之外的对象。在一个命名服务可以被利用之前,客户需要获取初始JNDI上下文的句柄。名字现在可以绑定到对象,对象可以利用标准的JNDI接口相对于这个上下文进行查找。
2 JNDI程序包
javax.naming:命名操作;
javax.naming.directory:目录操作;
javax.naming.event:在命名目录服务器中请求事件通知;
javax.naming.ldap:提供LDAP支持;
javax.naming.spi:允许动态插入不同实现。
利用JNDI的命名与服务功能来满足企业级APIs对命名与服务的访问,诸如EJBs、JMS、JDBC 2.0以及IIOP上的RMI通过JNDI来使用CORBA的命名服务。
3 常用的JNDI操作
void bind(String sName,Object object);――绑定:把名称同对象关联的过程
void rebind(String sName,Object object);――重新绑定:用来把对象同一个已经存在的名称重新绑定
void unbind(String sName);――释放:用来把对象从目录中释放出来
void lookup(String sName,Object object);――查找:返回目录总的一个对象
void rename(String sOldName,String sNewName);――重命名:用来修改对象名称绑定的名称
NamingEnumeration listBinding(String sName);――清单:返回绑定在特定上下文中对象的清单列表
4 JNDI与JDBC
JNDI提供了一种统一的方式,可以用在网络上查找和访问服务。通过指定一个资源名称,该名称对应于数据库或命名服务中的一个纪录,同时返回数据库连接建立所必须的信息。
代码示例:
try{
Context cntxt = new InitialContext();
DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");
}
catch(NamingException ne){
...
}
5 JNDI与JMS
消息通信是软件组件或应用程序用来通信的一种方法。JMS就是一种允许应用程序创建、发送、接收、和读取消息的JAVA技术。
代码示例:
try{
Properties env = new Properties();
InitialContext inictxt = new InitialContext(env);
TopicConnectionFactory connFactory = (TopicConnectionFactory) inictxt.lookup("TTopicConnectionFactory");
...
}
catch(NamingException ne){
...
}
访问特定目录:举个例子,人是个对象,他有好几个属性,诸如这个人的姓名、电话号码、电子邮件地址、邮政编码等属性。通过getAttributes()方法
Attribute attr =directory.getAttributes(personName).get("email");
String email = (String)attr.get();
通过使用JNDI让客户使用对象的名称或属性来查找对象:
foxes = directory.search("o=Wiz,c=US","sn=Fox",controls);
通过使用JNDI来查找诸如打印机、数据库这样的对象,查找打印机的例子:
Printer printer = (Printer)namespace.lookup(printerName);
printer.print(document);
浏览命名空间:
NamingEnumeration list = namespace.list("o=Widget,c=US");
while (list.hasMore()) {
NameClassPair entry = (NameClassPair)list.next();
display(entry.getName(),entry.getClassName());
}
参考文献:
[1] http://java.sun.com/products/jndi/examples.html
[2] http://java.sun.com/products/jndi/serviceproviders.html
【关键词】JNDI;Java EE
中图分类号:TP18 文献标识码:A 文章编号:1009-8283(2009)03-0105-01
1 JNDI的由来
说到JNDI的由来就要先提下Java EE。Java EE是一种利用Java平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。Java EE最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。Java EE原名为J2EE,是Sun公司在1997年度Java One大会上发布的。其目的是未开发和部署企业级Web应用制定标准。通过Java EE,Java语言与工具得以延伸到那些复杂的、多层的电子商务和企业级应用当中。
由于Java EE应用的组件可以独立运行,而且经常是在不同设备上运行,因此客户端和应用服务器层代码必须以某种方式查找和参考其他代码和资源。而实现这点就需要JNDI的帮助了。JNDI可以用于当前各种类型的命名系统。JNDI也可以用于命名和引用位于一个特定的命名系统之外的对象。在一个命名服务可以被利用之前,客户需要获取初始JNDI上下文的句柄。名字现在可以绑定到对象,对象可以利用标准的JNDI接口相对于这个上下文进行查找。
2 JNDI程序包
javax.naming:命名操作;
javax.naming.directory:目录操作;
javax.naming.event:在命名目录服务器中请求事件通知;
javax.naming.ldap:提供LDAP支持;
javax.naming.spi:允许动态插入不同实现。
利用JNDI的命名与服务功能来满足企业级APIs对命名与服务的访问,诸如EJBs、JMS、JDBC 2.0以及IIOP上的RMI通过JNDI来使用CORBA的命名服务。
3 常用的JNDI操作
void bind(String sName,Object object);――绑定:把名称同对象关联的过程
void rebind(String sName,Object object);――重新绑定:用来把对象同一个已经存在的名称重新绑定
void unbind(String sName);――释放:用来把对象从目录中释放出来
void lookup(String sName,Object object);――查找:返回目录总的一个对象
void rename(String sOldName,String sNewName);――重命名:用来修改对象名称绑定的名称
NamingEnumeration listBinding(String sName);――清单:返回绑定在特定上下文中对象的清单列表
4 JNDI与JDBC
JNDI提供了一种统一的方式,可以用在网络上查找和访问服务。通过指定一个资源名称,该名称对应于数据库或命名服务中的一个纪录,同时返回数据库连接建立所必须的信息。
代码示例:
try{
Context cntxt = new InitialContext();
DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");
}
catch(NamingException ne){
...
}
5 JNDI与JMS
消息通信是软件组件或应用程序用来通信的一种方法。JMS就是一种允许应用程序创建、发送、接收、和读取消息的JAVA技术。
代码示例:
try{
Properties env = new Properties();
InitialContext inictxt = new InitialContext(env);
TopicConnectionFactory connFactory = (TopicConnectionFactory) inictxt.lookup("TTopicConnectionFactory");
...
}
catch(NamingException ne){
...
}
访问特定目录:举个例子,人是个对象,他有好几个属性,诸如这个人的姓名、电话号码、电子邮件地址、邮政编码等属性。通过getAttributes()方法
Attribute attr =directory.getAttributes(personName).get("email");
String email = (String)attr.get();
通过使用JNDI让客户使用对象的名称或属性来查找对象:
foxes = directory.search("o=Wiz,c=US","sn=Fox",controls);
通过使用JNDI来查找诸如打印机、数据库这样的对象,查找打印机的例子:
Printer printer = (Printer)namespace.lookup(printerName);
printer.print(document);
浏览命名空间:
NamingEnumeration list = namespace.list("o=Widget,c=US");
while (list.hasMore()) {
NameClassPair entry = (NameClassPair)list.next();
display(entry.getName(),entry.getClassName());
}
参考文献:
[1] http://java.sun.com/products/jndi/examples.html
[2] http://java.sun.com/products/jndi/serviceproviders.html