天天看点

JavaEE规范学习(一)--- JNDI

   集群jndi实现了高可靠性jndi,通过服务器的集群,保证了jndi的负载平衡和错误恢复。在全局共享的方式下,集群中的一个应用服务器保证本地jndi树的独立性,并拥有全局的jndi树。每个应用服务器在把部署的服务对象绑定到自己本地的jndi树的同时,还绑定到一个共享的全局jndi树,实现全局jndi和自身jndi的联系。

   jndi(javanaming 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是一种查找服务,用于查找:

   web应用环境变量

   ejbs和他们的环境变量

   jms目标和连接工厂

   备注:不要讲jndi当做数据库使用,因为jdni对象存储在内存中,访问jdni对象与网络性能有关(网络好的时候查找性能高)。

JavaEE规范学习(一)--- JNDI
JavaEE规范学习(一)--- JNDI
JavaEE规范学习(一)--- JNDI

java.naming.factory.initial=org.jnp.interfaces.namingcontextfactory  

java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces  

java.naming.provider.url=localhost  

   备注:jndi.properties文件为所有的initialcontexts设置默认的属性,jndi.properties文件的搜索次序

·classpath

·$java_home/lib

   ·lookup()从jndi树获取对象

JavaEE规范学习(一)--- JNDI

//实例化一个initialcontext对象  

initialcontext ctx = new initialcontext();   

//在jndi树上查找“usermanagerbean对象  

usermanager usermanager =(usermanager)ctx.lookup("usermanagerbean/remote");  

user user = new user();  

user.setusername("cody");  

user.setpossword("0909");  

//使用查找到对象的方法  

usermanager.adduser(user);  

//连接完成之后关闭访问资源  

ctx.close();  

   ·绑定到远程命名服务的对象必须是序列化的

   ·访问命名服务时,对象是采用复制机制

JavaEE规范学习(一)--- JNDI

   ejb通过@remote注解将对象绑定到jndi树上

JavaEE规范学习(一)--- JNDI

@stateless  

@remote(usermanager.class)  

public classusermanagerbean implements usermanager {  

   @override  

   public void adduser(user user) {  

      system.out.println("user[username="+user.getusername()+"]已经被成功保存");  

      user.setid(10);  

   }  

}  

   jndi可能出现的异常

   ·authenticationexception

没有提供认证信息,或者提供的认证信息有误

   ·communicationexception

通信异常

   ·invalidnameexception

非法命名之类的异常

   ·namenotfoundexception

没有找到相应名称的资源

   ·noinitialcontextexception

没有初始化initialcontext对象

   j2ee规范要求所有 j2ee 容器都要提供 jndi 规范的实现。jndi 在 j2ee 中的角色就是“交换机” —— j2ee 组件在运行时间接地查找其他组件、资源或服务的通用机制。在多数情况下,提供 jndi 供应者的容器可以充当有限的数据存储,这样管理员就可以设置应用程序的执行属性,并让其他应用程序引用这些属性(java 管理扩展(java managementextensions,jmx)也可以用作这个目的)。jndi 在 j2ee 应用程序中的主要角色就是提供间接层,这样组件就可以发现所需要的资源,而不用了解这些间接性。

   在 j2ee 中,jndi 是把 j2ee 应用程序合在一起的粘合剂,jndi 提供的间接寻址允许跨企业交付可伸缩的、功能强大且很灵活的应用程序。这是 j2ee 的承诺,而且经过一些计划和预先考虑,这个承诺是完全可以实现的。