J2EE教程第3章SessionBean.ppt_第1页
J2EE教程第3章SessionBean.ppt_第2页
J2EE教程第3章SessionBean.ppt_第3页
J2EE教程第3章SessionBean.ppt_第4页
J2EE教程第3章SessionBean.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

声明,本课件仅用于北京航空航天大学计算机学院的教学; 本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。,J2EE教程 第3章 Session Bean,分布式系统: 程序运行在不同的地址空间(通常是不同的主机上) 进程之间的通信是分布式系统的一个基本问题,程序A,程序B,内容提要,3.1 SOCKET 3.2 RPC 3.3 RMI 3.4 Session Bean 3.5 小结,3.1 SOCKET,Socket 是一个基本的通信机制 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。 Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。,优势: 功能强大 挑战: 过于底层,涉及一套复杂的流程,要求每个应用的客户端和服务器端都参与到一套复杂的应用层协议中; 程序代码量多,容易出错且难以调试。,3.2 RPC,最初由 Sun 微系统提出 RFC( 1984年Birrell和Nelson的一篇论文中提出?),并应用于Unix系统 IETF ONC 宪章重新修订了Sun版本,使得ONC RPC协议成为IETF标准协议 现在使用最普遍的模式和执行是The Open Group组织(前身为OSF,开放式软件基金)的分布式计算环境(DCE),RPC的基本想法 目的是允许程序(Client)调用驻留在其他机器上的过程(Server) 并且使远程的过程调用看起来和本地的过程调用没有区别 RPC的做法是引入存根(Stub)的概念,若服务端有某个函数fn(),为了能够被远程调用,需要通过编译器生成两个stub: 客户端的一个stub:c_fn() 服务器端的一个stub:s_fn(),RPC比LPC复杂,操作系统:运行调用和被调用进程的计算机可能有明显不同的体系结构和数据表示格式; 网络通信:调用进程和被调用进程间的网络比本地计算机有更复杂的特性。例如,它可能限制消息尺寸,并且有丢失和重排消息的可能,安全问题; 编程语言:跨语言之间的互操作问题;,Stub的对要发送的参数进行marshal(可理解成一种打包操作)和对接受到的参数(或返回值)进行unmarshal(解包)。 Marshal操作将要发送的数据制成一种标准的格式(在DCE RPC系统中,此格式称做Network Data Representation(NDR)格式) unmarshal再从NDR格式数据包中读出所需数据 该标准格式屏蔽了计算机体系结构和数据表示格式的差异,Client stub的功能: 收集调用远程函数需要的参数 将这些参数marshal成消息,即把消息转化成标准的网络数据表示(network data representation , NDR) 格式,用于在网络上传递 调用客户端的运行时系统(Client runtime system)将此消息发送给服务器端。 当服务器端将结果消息返回后,将结果消息unmarshal,把结果返回给应用进程。 Server stub的功能: 对发送给它的参数消息unmarshal,收集参数 调用位于本机上的过程 将此过程执行的结果marshal成消息,然后调用服务器端的运行时系统将结果消息发送给客户端,客户端的运行系统 将客户端stub产生的消息可靠的传送给server 利用TCP/UDP等协议,将消息发送到Server 服务端的运行时系统 侦听某个众所周知的socket端口,接受请求 调用Server Stub,处理接收到的消息 运行系统提供了可靠的数据传输,IDL,Interface definition file 是一个接口文件,它应该由用户利用IDL(interface definition language)语言编辑而成。 IDL是一种用来说明操作(过程或函数),操作的参数以及数据类型的语言,它在语法上继承于C语言,但形式上和C语言有很多不同。 IDL屏蔽了编程语言的差异,3.3 RMI,Remote Method Invocation(RMI) 出现于Jdk1.1 (1997.02),在Jdk1.2中改进 定位: Access to Remote Objects Client-Server Protocol High-level API Java-to-Java only Transparent Lightweight,从RPC到RMI,变化: 从过程面向对象 从函数调用对实例的操作 问题: 动态绑定问题取得实例的引用 接口,Client Send(),Server Echo(),Server_Stub Echo(),Server_Stub Echo(),obj,obj,Stub Object,Server,Remote Object,public interface Adder extends Remote public int add(int x, int y) throws RemoteException; ,Remote Interface,RMI Registry,3.4 Session Bean,RMI Stateless 远程对象总是存在,使用者通过naming取得远程对象的引用 由服务提供者控制Remote Object的创建和销毁 企业级应用要求“远程对象”: 会话, 管理(持久化, 生命周期) , 安全, 事务,Session Bean: 让remote service(即Session Bean)实现javax.ejb.SessionBean接口 由EJB容器利用SessionBean接口管理Session Bean的生命周期(初始化、销毁、钝化等) EJB容器截获远程调用请求,将请求转发给Session Bean EJB容器在这个过程中插入/实现安全、事务和持久化等处理,Session Bean and RMI,Server,Container,Remote Object,Client,EJB,(1) Call .Create(),(2) Call business methods,RMI,Naming and Diretory Service,(n),(1),(n),Home Stub,Remote Stub,Object,Remote Interface,Home Interface,javax.ejb.SessionBean,Client,EJB容器,在部署EJB时,容器会为每个EJB: 根据Home接口产生Home Object 生成stub和skeleton 根据部署描述符设置安全环境、事务环境 在JNDI名称空间中注册EJB包括Home接口、资源引用等,客户端在访问EJB时: 通过JNDI查找到Home Object的引用 通过Home Interface上的create方法创建一个Remote Object Home Object会创建并返回一个Remote Object 调用Remote Interface上的商业方法 Remote Object截取调用进行处理,然后委托Bean Class完成商业方法 Remote Object截取Bean Class的返回进行处理,然后将结果返回给客户端,Bean Class在执行商业方法时可以访问容器: 可以通过EJBContext对象(它是对容器的直接引用)请求关于环境的信息:如Client的身份、事务的状态以及自身的引用。 可以通过JNDI访问资源,如JDBC连接、其它的EJB等。,容器在管理EJB生命周期过程中,通过回调方法通知EJB状态的变化: Bean Class实现并响应这些回调方法,进行相应的处理。 不同类型的EJB回调方法各不相同,如Session Bean包括:ejbCreate;ejbRemove;ejbPassivate;ejbActivate 。,参考文献,揭开Socket编程的面纱, /archive/2005/12/10/294652.aspx Distributed Systems:Concepts and Design, George Coulouris, Jean Dollimore & Tim Kindberg, 1994 对分布计算系统的探究, wbright, 2002.02 /A/2002-02-19/14439.html Java Remote Method Invocation Specification, Sun Microsystems, 1997 Java Remote Method Invocation (RMI), Alexander Day Chaffee, 1997, Enterprise JavaBeansTM Specification, Version 2.0, Sun Microsystems, 2001.8 Mastering Enterprise JavaBeansTM, Ed.Roman, 2002 J2EE Course, (无法找到出处),The End!,Copyright ?1997 Alex Chaffee,1. 远程对象(Remote Objects),Remote Objects Live on server Accessed as if they were local,Copyright ?1997 Alex Chaffee,远程接口(Remote Interfaces) Declare exposed methods Implemented on client Like a proxy for the remote object,import java.rmi.*; public interface Adder extends Remote public int add(int x, int y) throws RemoteException; ,Copyright ?1997 Alex Chaffee,开发远程对象,Define a Remote Interface extends java.rmi.Remote Define a class that implements the Remote Interface extends java.rmi.RemoteObject or java.rmi.UnicastRemoteObject,Copyright ?1997 Alex Chaffee,Remote Class Example,import java.rmi.*; import java.rmi.server.*; public class AdderImpl extends UnicastRemoteObject implements Adder public AdderImpl() throws RemoteException public int add(int x, int y) throws RemoteException return x + y; ,Copyright ?1997 Alex Chaffee,2. Stubs and Skeletons,Stub lives on client pretends to be remote object,Skeleton lives on server receives requests from stub talks to true remote object delivers response to stub,Copyright ?1997 Alex Chaffee,Compiling Remote Classes (Diagram),Adder.java (interface),Adder.class (interface classfile),javac,AdderImpl.java (remote class),AdderImpl.class (classfile),javac,rmic,AdderImpl_Skel.class (skeleton classfile),AdderImpl_Stub.class (stub classfile),Stubs和skeletons 利用rmic编译器产生,Copyright ?1997 Alex Chaffee,Remote Interfaces and Stubs,Stub和skeleton类是在运行时确定,并动态加载的,Stub的职责:发起对远程对象的调用 (通过调用remote reference layer) Marshaling arguments to a marshal stream (employ a mechanism called object serialization) Informing the remote reference layer that the call should be invoked. Unmarshaling the return value or exception from a marshal stream. Informing the remote reference layer that the call is complete.,The skeleton is responsible for: Unmarshaling arguments from the marshal stream. Making the up-call to the actual remote object implementation. Marshaling the return value of the call or an exception (if one occurred) onto the marshal stream.,Copyright ?1997 Alex Chaffee,3. Remote Reference Layer,提供了RemoteRef对象,代表远程服务实现的链接 (指出引用了哪个远程对象) Stub对象利用 RemoteRef的invoke()方法传递方法调用 remote reference layer和底层的传输接口交互,Copyright ?1997 Alex Chaffee,4. Transport Layer,Deals with communications Connection management Dispatching messages between stub and skeleton Distributed Garbage Collection Sits on top of ,RMI系统传输层的职责: 设置到远程地址空间的连接 管理连接 监控连接状态(“liveness.”) 侦听调用请求 维护地址空间内的远程对象列表 设置调用请求的连接 定位远程调用目标对象的分配器(dispatcher),将连接传给该分配器,Copyright ?1997 Alex Chaffee,5. Registries,命名和查找远程对象 服务器可以注册它们的对象 客户端可以发现服务对象并且获取远程引用 注册器是运行在主机上的进程,RMI Registry,RMI包含了一个简单的目录服务,称为RMI Registry, 它 运行在每个有远程服务对象的主机上 接受服务查询请求,缺省端口是1099.(object servers will be dynamically assigned ports by the RMI runtime) 支持stub代码的动态下载,使用RMI Registry,Server-side 创建一个实现远程服务的本地对象 导出该对象给RMI (创建一个侦听服务,等待客户端的连接). 用一个公开的名称,将该对象注册到RMI Registry中,Client-side 通过java.rmi.Naming 静态类访问RMI Registry 使用方法lookup()查询注册器,参数是URL: rmi:/:/ 该方法返回服务对象的远程引用,Copyright ?1997 Alex Chaffee,RMI例子,RMI系统由以下几个部分组成: 远程服务的接口定义(Remote Interface) 远程服务的实现(Remote Service) Stub和Skeleton文件 RMI命名服务,使得客户端可以发现远程服务 运行远程服务的服务器 需要远程服务的客户端程序,RMI编程 编写并编译接口的Java代码(adder.java) 编写并编译实现类的Java代码 利用RMIC从实现类产生Stub和Skeleton类文件 启动注册服务 编写远程服务主机(host)程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论