1、经典Java EE课程,段鹏松,第5章 JNDI和远程方法调用,了解命名服务的意义和作用 了解JNDI的概念 会在Weblogic中配置JDNI 会在JBoss中配置JDNI 掌握开发RMI服务器端和客户端的方法,课程目标,目 录,JNDI的概念 JNDI编程入门 服务器提供的JNDI支持 RMI概述 RMI编程 同时作为客户端和服务器的RMI程序,JDNI的概念,JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。 命名服务将名称和对象联系起来,使得我们可以用名称访问对象。 目录服务是一种
2、命名服务,在这种服务里,对象不但有名称,还有属性。,JNDI架构图,JDNI的优点,可以使用相同API 调用访问任何命名或目录服务。 可以同时连接多个命名和目录服务。 允许把名称同JAVA 对象或资源关联起来,不必知道对象或资源的物理ID。 使用通用接口访问不同种类的目录服务, 使得开发人员能够集中使用和实现一种类型的命名或目录服务客户API 上。,命名服务,命名服务(Naming Service)提供了一种为对象命名的机制,可以定位任何通过网络可以访问的机器上的对象,使得用户可以在无需知道对象位置的情况下获取和使用对象。 使用命名服务,首先要将对象在命名服务器上注册,然后用户就可以通过命名服
3、务器的地址和该对象在命名服务器上注册的JNDI名找到该对象,获得其引用了。,目录服务,目录服务对于网络的作用就像白页对电话系统的作用一样。目录服务将有关现实世界中的事物(如人、计算机、打印机等等)的信息存储为具有描述性属性的对象。人们可以使用该服务按名称查找对象或者像使用黄页一样,可使用它们查找服务。 常用的目录服务系统 JNDI LDAP,目 录,JNDI的概念 JNDI编程入门 服务器提供的JNDI支持 RMI概述 RMI编程 同时作为客户端和服务器的RMI程序,JNDI的基本概念,Bindings:绑定。名称和对象的一个关联叫做绑定。 Context:上下文。一个上下文是一组 名称-对象
4、 的绑定。 Naming systems and Namespaces命名系统是一组相互关联的同一类型的上下文(具有相同的命名规范),并且提供一组通用的操作。一个命名系统中所有名称的集合称为一个命名空间(Namespace)。 Naming Service Directory Service,文件系统的命名服务,为了在程序中使用JNDI,至少需要3方面的支持: JNDI API(JDK已全部提供) JNDI SPI(JDK已提供部分) 命名、目录服务器 安装文件系统的SPI 主要是两个jar包 fscontext.jar providerutil.jar 实际操作演示,JNDI编程,通过JND
5、I访问被绑定对象的步骤 创建Context对象 调用Context的方法来执行绑定、查找等操作 关闭Context实际操作演示 文件系统,演示结果,目 录,JNDI的概念 JNDI编程入门 服务器提供的JNDI支持 RMI概述 RMI编程 同时作为客户端和服务器的RMI程序,Weblogic的JNDI支持,打开JNDI树,Weblogic的JNDI支持,实际操作演示,远程访问JNDI,运行结果和本地运行结果一样,Weblogic操作JNDI注意事项,对于JDK所属的基本类型,直接绑定调用即可; 对于java.swing.*下面的类型,在netbeans7.3下面有时会有编号为210的错误,可能
6、是netbeans版本的原因;可以手动在cmd下进行编译运行即可; 对于自定义类型,需要先把自定义的类型做成jar包,在JNDI绑定环节及测试环节进行调用。 以上三种,测试环节都必须导入Weblogic下的webservices.jar和wlclient.jar。,JBoss的JNDI支持,实际操作演示 和weblogic相比,问题较少注意:需要导入相应的jar包 jbossall-client.jar jboss-logging-spi.jar jnp-client.jar,目 录,JNDI的概念 JNDI编程入门 服务器提供的JNDI支持 RMI概述 RMI编程 同时作为客户端和服务器的R
7、MI程序,RMI概述,RMI是Java的一组用户开发分布式应用程序的API。 RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。 简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,由于J2EE是分布式程序平台,RMI机制实现程序组件在不同操作系统之间的通信。 比如,一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法。,远程访问的好处,远程访问可提供多个计算单元的协同服务 远程访问能提供更好的可靠性和可用性 远程访问能提供更好的透明性 远程访问能提
8、供更好的开放性和可伸缩性,RMI系统运行原理,RMI应用程序通常包括两个独立的程序:服务器程序和客户机程序。 典型的服务器应用程序将创建多个远程对象,使这些远程对象能够被引用,然后等待客户机调用这些远程对象的方法。 典型的客户机程序则从服务器中得到一个或多个远程对象的引用,然后调用远程对象的方法。RMI为服务器和客户机进行通信和信息传递提供了一种机制。,RMI的作用和意义,RMI是Java最早实现的远程访问技术,而且性能非常优秀,也是其他Java EE规范的实现基础。 RMI本质上是对Java Socket网络通讯的高度封装。 RMI解决原来Socket编程中的网络信息交换和多线程的问题。,目
9、 录,JNDI的概念 JNDI编程入门 服务器提供的JNDI支持 RMI概述 RMI编程 同时作为客户端和服务器的RMI程序,RMI编程之服务器端,远程接口必须继承java.rmi.Remote接口 远程服务提供类必须继承java.rmi.server.UnicastRemoteObject类 远程服务提供类的构造函数必须抛出Remote Exception 必须要在服务器上注册RMI服务 在程序中用代码注册 在命令行用rmiregistry命令注册 实际操作演示,RMI编程之客户端,开发步骤 通过JNDI查找提供远程RMI服务的对象,并对其执行强制类型转换 调用远程方法 调用远程方法必须抛出
10、Remote Exception 需要把服务器端接口编译后的class文件拷贝到客户端(即面向RMI的服务接口编程) 实际操作演示,运行结果,Server,Client,Client (重写Person的toString()方法),RMI的基本原理,RMI框架为远程对象分别生成了客户端代理和服务器端代理,位于客户端的代理类称为存根(Stub),位于服务器端的代理类称为骨架(Skeleton),RMI的基本原理,客户端的调用请求是发送给本地的Stub对象,再由Stub对象和Skeleton对象建立底层的网络通信、对线程处理等通信细节。RMI把这些细节封装起来。客户端和服务器端通讯的详细流程 参看
11、教材P221,目 录,JNDI的概念 JNDI编程入门 服务器提供的JNDI支持 RMI概述 RMI编程 同时作为客户端和服务器的RMI程序,概 述,实际项目中有时服务器端也要调用客户端程序的方法 服务器端的特点 服务器端有固定的IP地址 可以执行JNDI绑定,将远程服务暴露出来 总处于等待状态,随时准备接受远程调用 客户端的特点 无固定IP地址 不会执行JNDI绑定,不会主动暴露服务 通常不允许外界直接调用 回调(CallBack)的概念,同时作为客户端和服务器端的RMI程序,开发客户端程序 需要继承Remote接口 开发服务器端程序 需要继承Remote接口 优点 看不到复杂的网络通讯 不需要处理多线程问题 实际操作演示 注意:教材的代码需要重新编译 客户端的class文件一定要和服务器端一致,演示结果(客户端),本机客户端1,本机客户端2,演示结果(服务器端),从服务端可以看出, 有两个本机的客户端,一个非本机的客户端连接到服务器端,本章小结,学习了JNDI的基本概念学习了RMI 的基本概念和用法,