J2EE教程第3章SessionBean课件_第1页
J2EE教程第3章SessionBean课件_第2页
J2EE教程第3章SessionBean课件_第3页
J2EE教程第3章SessionBean课件_第4页
J2EE教程第3章SessionBean课件_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

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

文档简介

声明本课件仅用于北京航空航天大学计算机学院的教学;本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。声明本课件仅用于北京航空航天大学计算机学院的教学;1J2EE教程

第3章SessionBeanJ2EE教程

第3章SessionBean2分布式系统:程序运行在不同的地址空间(通常是不同的主机上)进程之间的通信是分布式系统的一个基本问题程序A程序B分布式系统:程序A程序B3内容提要3.1SOCKET3.2RPC3.3RMI3.4SessionBean3.5小结内容提要3.1SOCKET43.1SOCKETSocket是一个基本的通信机制Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。3.1SOCKETSocket是一个基本的通信机制5J2EE教程第3章SessionBean课件6J2EE教程第3章SessionBean课件7优势:功能强大挑战:过于底层,涉及一套复杂的流程,要求每个应用的客户端和服务器端都参与到一套复杂的应用层协议中;程序代码量多,容易出错且难以调试。优势:83.2RPC最初由Sun微系统提出RFC(1984年Birrell和Nelson的一篇论文中提出?),并应用于Unix系统IETFONC宪章重新修订了Sun版本,使得ONCRPC协议成为IETF标准协议现在使用最普遍的模式和执行是TheOpenGroup组织(前身为OSF,开放式软件基金)的分布式计算环境(DCE)3.2RPC最初由Sun微系统提出RFC(19849RPC的基本想法目的是允许程序(Client)调用驻留在其他机器上的过程(Server)并且使远程的过程调用看起来和本地的过程调用没有区别RPC的做法是引入存根(Stub)的概念RPC的基本想法10若服务端有某个函数fn(),为了能够被远程调用,需要通过编译器生成两个stub:客户端的一个stub:c_fn()服务器端的一个stub:s_fn()若服务端有某个函数fn(),为了能够被远程调用,需要通过编译11RPC比LPC复杂操作系统:运行调用和被调用进程的计算机可能有明显不同的体系结构和数据表示格式;网络通信:调用进程和被调用进程间的网络比本地计算机有更复杂的特性。例如,它可能限制消息尺寸,并且有丢失和重排消息的可能,安全问题;编程语言:跨语言之间的互操作问题;RPC比LPC复杂12J2EE教程第3章SessionBean课件13Stub的对要发送的参数进行marshal(可理解成一种打包操作)和对接受到的参数(或返回值)进行unmarshal(解包)。Marshal操作将要发送的数据制成一种标准的格式(在DCERPC系统中,此格式称做NetworkDataRepresentation(NDR)格式)unmarshal再从NDR格式数据包中读出所需数据该标准格式屏蔽了计算机体系结构和数据表示格式的差异Stub的对要发送的参数进行marshal(可理解成一种打包14Clientstub的功能:收集调用远程函数需要的参数将这些参数marshal成消息,即把消息转化成标准的网络数据表示(networkdatarepresentation,NDR)格式,用于在网络上传递调用客户端的运行时系统(Clientruntimesystem)将此消息发送给服务器端。当服务器端将结果消息返回后,将结果消息unmarshal,把结果返回给应用进程。Serverstub的功能:对发送给它的参数消息unmarshal,收集参数调用位于本机上的过程将此过程执行的结果marshal成消息,然后调用服务器端的运行时系统将结果消息发送给客户端Clientstub的功能:15J2EE教程第3章SessionBean课件16客户端的运行系统将客户端stub产生的消息可靠的传送给server利用TCP/UDP等协议,将消息发送到Server服务端的运行时系统侦听某个众所周知的socket端口,接受请求调用ServerStub,处理接收到的消息运行系统提供了可靠的数据传输客户端的运行系统17IDLIDL18Interfacedefinitionfile是一个接口文件,它应该由用户利用IDL(interfacedefinitionlanguage)语言编辑而成。IDL是一种用来说明操作(过程或函数),操作的参数以及数据类型的语言,它在语法上继承于C语言,但形式上和C语言有很多不同。IDL屏蔽了编程语言的差异Interfacedefinitionfile是一个接19J2EE教程第3章SessionBean课件203.3RMIRemoteMethodInvocation(RMI)出现于Jdk1.1(2019.02),在Jdk1.2中改进定位:AccesstoRemoteObjectsClient-ServerProtocolHigh-levelAPIJava-to-JavaonlyTransparentLightweight3.3RMIRemoteMethodInvocatio21从RPC到RMI变化:从过程面向对象从函数调用对实例的操作问题:动态绑定问题——取得实例的引用接口ClientSend()ServerEcho()Server_StubEcho()

Server_StubEcho()

objobj从RPC到RMI变化:ClientServerServer_22StubObjectServerRemoteObjectpublicinterfaceAdderextendsRemote{publicintadd(intx,inty)throwsRemoteException;}RemoteInterfaceRMIRegistryStubObjectServerRemotepublic233.4SessionBeanRMIStateless远程对象总是存在,使用者通过naming取得远程对象的引用由服务提供者控制RemoteObject的创建和销毁企业级应用要求“远程对象”:会话,管理(持久化,生命周期),安全,事务3.4SessionBeanRMI24SessionBean:让remoteservice(即SessionBean)实现javax.ejb.SessionBean接口由EJB容器利用SessionBean接口管理SessionBean的生命周期(初始化、销毁、钝化等)EJB容器截获远程调用请求,将请求转发给SessionBeanEJB容器在这个过程中插入/实现安全、事务和持久化等处理SessionBean:25SessionBean

andRMIServerContainerRemoteObjectClientEJB(1)Call<HomeObject>.Create()(2)CallbusinessmethodsRMINamingandDiretoryService(n)(1)(n)HomeStubRemoteStubObjectRemoteInterfaceHomeInterfacejavax.ejb.SessionBeanHomeObjectJNDIClientJNDIlookupSessionBeanandRMIServerCont26EJB容器EJB容器27在部署EJB时,容器会为每个EJB:根据Home接口产生HomeObject生成stub和skeleton根据部署描述符设置安全环境、事务环境在JNDI名称空间中注册EJB—包括Home接口、资源引用等在部署EJB时,容器会为每个EJB:28客户端在访问EJB时:通过JNDI查找到HomeObject的引用通过HomeInterface上的create方法创建一个RemoteObjectHomeObject会创建并返回一个RemoteObject调用RemoteInterface上的商业方法RemoteObject截取调用进行处理,然后委托BeanClass完成商业方法RemoteObject截取BeanClass的返回进行处理,然后将结果返回给客户端客户端在访问EJB时:29BeanClass在执行商业方法时可以访问容器:可以通过EJBContext对象(它是对容器的直接引用)请求关于环境的信息:如Client的身份、事务的状态以及自身的引用。可以通过JNDI访问资源,如JDBC连接、其它的EJB等。BeanClass在执行商业方法时可以访问容器:30容器在管理EJB生命周期过程中,通过回调方法通知EJB状态的变化:BeanClass实现并响应这些回调方法,进行相应的处理。不同类型的EJB回调方法各不相同,如SessionBean包括:ejbCreate;ejbRemove;ejbPassivate;ejbActivate

。容器在管理EJB生命周期过程中,通过回调方法通知EJB状态的31参考文献揭开Socket编程的面纱,goodcandles/archive/2019/12/10/294652.aspx

DistributedSystems:ConceptsandDesign,GeorgeCoulouris,JeanDollimore&TimKindberg,1994对分布计算系统的探究,wbright,2019.02chinaitpower/A/2019-02-19/14439.html

Java™RemoteMethodInvocationSpecification,SunMicrosystems,2019JavaRemoteMethodInvocation(RMI),AlexanderDayChaffee,2019,alexcpurpletech

EnterpriseJavaBeansTMSpecification,Version2.0,SunMicrosystems,2019.8MasteringEnterpriseJavaBeansTM,Ed.Roman,2019J2EECourse,(无法找到出处)参考文献揭开Socket编程的面纱,goodcandles32TheEnd!TheEnd!33Copyright?2019AlexChaffee1.远程对象(RemoteObjects)RemoteObjectsLiveonserverAccessedasiftheywerelocalRemoteReferenceLayerTransportLayerJVMClientObjectRemoteReferenceLayerTransportLayerJVMStubRemoteObjectSkeletonCopyright?2019AlexChaffee1.34Copyright?2019AlexChaffee远程接口(RemoteInterfaces)DeclareexposedmethodsImplementedonclientLikeaproxyfortheremoteobjectimportjava.rmi.*;publicinterfaceAdderextendsRemote{ publicintadd(intx,inty) throwsRemoteException;}Copyright?2019AlexChaffee远程35Copyright?2019AlexChaffee开发远程对象DefineaRemoteInterfaceextendsjava.rmi.RemoteDefineaclassthatimplementstheRemoteInterfaceextendsjava.rmi.RemoteObject orjava.rmi.UnicastRemoteObjectCopyright?2019AlexChaffee开发36Copyright?2019AlexChaffeeRemoteClassExampleimportjava.rmi.*;importjava.rmi.server.*;publicclassAdderImplextendsUnicastRemoteObjectimplementsAdder{publicAdderImpl()throwsRemoteException{}publicintadd(intx,inty) throwsRemoteException{returnx+y;}}Copyright?2019AlexChaffeeRe37Copyright?2019AlexChaffee2.StubsandSkeletonsStublivesonclientpretendstoberemoteobjectRemoteReferenceLayerTransportLayerJVMClientObjectRemoteReferenceLayerTransportLayerJVMStubRemoteObjectSkeletonSkeletonlivesonserverreceivesrequestsfromstubtalkstotrueremoteobjectdeliversresponsetostubCopyright?2019AlexChaffee2.38Copyright?2019AlexChaffeeCompilingRemoteClasses(Diagram)Adder.java(interface)Adder.class(interfaceclassfile)javacAdderImpl.java(remoteclass)AdderImpl.class(classfile)javacrmicAdderImpl_Skel.class(skeletonclassfile)AdderImpl_Stub.class(stubclassfile)Stubs和skeletons利用rmic编译器产生Copyright?2019AlexChaffeeCo39Copyright?2019AlexChaffeeRemoteInterfacesandStubsRemoteInterfaceStubRemoteObject(Server)ClientSkeletonimplementsimplementsStub和skeleton类是在运行时确定,并动态加载的Copyright?2019AlexChaffeeRe40Stub的职责:发起对远程对象的调用(通过调用remotereferencelayer)Marshalingargumentstoamarshalstream(employamechanismcalledobjectserialization)Informingtheremotereferencelayerthatthecallshouldbeinvoked.Unmarshalingthereturnvalueorexceptionfromamarshalstream.Informingtheremotereferencelayerthatthecalliscomplete.Stub的职责:发起对远程对象的调用(通过调用remote41Theskeletonisresponsiblefor:Unmarshalingargumentsfromthemarshalstream.Makingtheup-calltotheactualremoteobjectimplementation.Marshalingthereturnvalueofthecalloranexception(ifoneoccurred)ontothemarshalstream.Theskeletonisresponsiblefo42Copyright?2019AlexChaffee3.RemoteReferenceLayer提供了RemoteRef对象,代表远程服务实现的链接(指出引用了哪个远程对象)Stub对象利用RemoteRef的invoke()方法传递方法调用remotereferencelayer和底层的传输接口交互RemoteReferenceLayerTransportLayerJVMClientObjectRemoteReferenceLayerTransportLayerJVMStubRemoteObjectSkeletonCopyright?2019AlexChaffee3.43Copyright?2019AlexChaffee4.TransportLayerDealswithcommunicationsConnectionmanagementDispatchingmessagesbetweenstubandskeletonDistributedGarbageCollectionSitsontopofjavaRemoteReferenceLayerTransportLayerJVMClientObjectRemoteReferenceLayerTransportLayerJVMStubRemoteObjectSkeletonCopyright?2019AlexChaffee4.44RMI系统传输层的职责:设置到远程地址空间的连接管理连接监控连接状态(“liveness.”)侦听调用请求维护地址空间内的远程对象列表设置调用请求的连接定位远程调用目标对象的分配器(dispatcher),将连接传给该分配器RMI系统传输层的职责:45Copyright?2019AlexChaffee5.Registries命名和查找远程对象服务器可以注册它们的对象客户端可以发现服务对象并且获取远程引用注册器是运行在主机上的进程Copyright?2019AlexChaffee5.46RMIRegistryRMI包含了一个简单的目录服务,称为RMIRegistry,它运行在每个有远程服务对象的主机上接受服务查询请求,缺省端口是1099.(objectserverswillbedynamicallyassignedportsbytheRMIruntime)支持stub代码的动态下载RMIRegistryRMI包含了一个简单的目录服务,称为47使用RMIRegistryServer-side创建一个实现远程服务的本地对象导出该对象给RMI(创建一个侦听服务,等待客户端的连接).用一个公开的名称,将该对象注册到RMIRegistry中使用RMIRegistryServer-side48Client-side通过java.rmi.Naming静态类访问RMIRegistry使用方法lookup()查询注册器,参数是URL:

rmi://<host_name>[:<name_service_port>]/<service_name>

该方法返回服务对象的远程引用Client-side49Copyright?2019AlexChaffeeRMI例子RMI系统由以下几个部分组成:远程服务的接口定义(RemoteInterface)远程服务的实现(RemoteService)Stub和Skeleton文件RMI命名服务,使得客户端可以发现远程服务运行远程服务的服务器需要远程服务的客户端程序Copyright?2019AlexChaffeeRM50RMI编程编写并编译接口的Java代码(adder.java)编写并编译实现类的Java代码利用RMIC从实现类产生Stub和Skeleton类文件启动注册服务编写远程服务主机(host)程序的Java代码,运行之开发RMI客户端程序的Java代码,运行之RMI编程51小结从RPC到RMI增加了Interface,对应于DCERPC中的IDL编译之后得到的是stub+skeleton增加了对象的创建(服务器)增加了:注册和检索小结从RPC到RMI52J2EE教程第3章SessionBean课件53SessionBean和Container的契约Bean提供者在EJB类中实现业务方法容器提供者将客户端的函数调用委派给EJB的函数Bean提供者ejbCreate<METHOD>,ejbPostCreate<METHOD>和ejbRemove<METHOD>容器提供者在EJB对象创建、移除和查找的时候调用这些方法SessionBean和Container的契约Bean提54Bean提供者定义EJBhome和业务接口容器提供者提供实现这些接口的类Bean提供者实现javax.ejb.SessionBean(以及可选的javax.ejb.SessionSynchronization)接口中定义的容器回调函数容器应该在合适的时间调用这些回调函数。Bean提供者定义EJBhome和业务接口55容器提供者提供javax.ejb.SessionContext接口给会话Bean实例。该接口使得实例能够从容器得到上下文信息TherequirementfortheContainertoprovidetothebeaninstancestheJNDIcontextthatcontainstheenterprisebean’senvironment.容器为EJB实例管理事务、安全、异常。Bean提供者在编程时应该避免破坏容器对EJB实例的运行时管理。容器提供者提供javax.ejb.SessionContex56EJB的特征通常包含业务逻辑,处理业务数据.EJB的实例由容器在运行时创建和管理EJB可以在部署时定制不同的服务信息(例如安全、事务)与EJB类是分开的。这使得可以在应用装配和部署的时候通过工具管理服务信息客户端的访问由部署了EJB的容器间接传递给该EJB。EJB的特征通常包含业务逻辑,处理业务数据.57谢谢谢谢58声明本课件仅用于北京航空航天大学计算机学院的教学;本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。声明本课件仅用于北京航空航天大学计算机学院的教学;59J2EE教程

第3章SessionBeanJ2EE教程

第3章SessionBean60分布式系统:程序运行在不同的地址空间(通常是不同的主机上)进程之间的通信是分布式系统的一个基本问题程序A程序B分布式系统:程序A程序B61内容提要3.1SOCKET3.2RPC3.3RMI3.4SessionBean3.5小结内容提要3.1SOCKET623.1SOCKETSocket是一个基本的通信机制Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。3.1SOCKETSocket是一个基本的通信机制63J2EE教程第3章SessionBean课件64J2EE教程第3章SessionBean课件65优势:功能强大挑战:过于底层,涉及一套复杂的流程,要求每个应用的客户端和服务器端都参与到一套复杂的应用层协议中;程序代码量多,容易出错且难以调试。优势:663.2RPC最初由Sun微系统提出RFC(1984年Birrell和Nelson的一篇论文中提出?),并应用于Unix系统IETFONC宪章重新修订了Sun版本,使得ONCRPC协议成为IETF标准协议现在使用最普遍的模式和执行是TheOpenGroup组织(前身为OSF,开放式软件基金)的分布式计算环境(DCE)3.2RPC最初由Sun微系统提出RFC(198467RPC的基本想法目的是允许程序(Client)调用驻留在其他机器上的过程(Server)并且使远程的过程调用看起来和本地的过程调用没有区别RPC的做法是引入存根(Stub)的概念RPC的基本想法68若服务端有某个函数fn(),为了能够被远程调用,需要通过编译器生成两个stub:客户端的一个stub:c_fn()服务器端的一个stub:s_fn()若服务端有某个函数fn(),为了能够被远程调用,需要通过编译69RPC比LPC复杂操作系统:运行调用和被调用进程的计算机可能有明显不同的体系结构和数据表示格式;网络通信:调用进程和被调用进程间的网络比本地计算机有更复杂的特性。例如,它可能限制消息尺寸,并且有丢失和重排消息的可能,安全问题;编程语言:跨语言之间的互操作问题;RPC比LPC复杂70J2EE教程第3章SessionBean课件71Stub的对要发送的参数进行marshal(可理解成一种打包操作)和对接受到的参数(或返回值)进行unmarshal(解包)。Marshal操作将要发送的数据制成一种标准的格式(在DCERPC系统中,此格式称做NetworkDataRepresentation(NDR)格式)unmarshal再从NDR格式数据包中读出所需数据该标准格式屏蔽了计算机体系结构和数据表示格式的差异Stub的对要发送的参数进行marshal(可理解成一种打包72Clientstub的功能:收集调用远程函数需要的参数将这些参数marshal成消息,即把消息转化成标准的网络数据表示(networkdatarepresentation,NDR)格式,用于在网络上传递调用客户端的运行时系统(Clientruntimesystem)将此消息发送给服务器端。当服务器端将结果消息返回后,将结果消息unmarshal,把结果返回给应用进程。Serverstub的功能:对发送给它的参数消息unmarshal,收集参数调用位于本机上的过程将此过程执行的结果marshal成消息,然后调用服务器端的运行时系统将结果消息发送给客户端Clientstub的功能:73J2EE教程第3章SessionBean课件74客户端的运行系统将客户端stub产生的消息可靠的传送给server利用TCP/UDP等协议,将消息发送到Server服务端的运行时系统侦听某个众所周知的socket端口,接受请求调用ServerStub,处理接收到的消息运行系统提供了可靠的数据传输客户端的运行系统75IDLIDL76Interfacedefinitionfile是一个接口文件,它应该由用户利用IDL(interfacedefinitionlanguage)语言编辑而成。IDL是一种用来说明操作(过程或函数),操作的参数以及数据类型的语言,它在语法上继承于C语言,但形式上和C语言有很多不同。IDL屏蔽了编程语言的差异Interfacedefinitionfile是一个接77J2EE教程第3章SessionBean课件783.3RMIRemoteMethodInvocation(RMI)出现于Jdk1.1(2019.02),在Jdk1.2中改进定位:AccesstoRemoteObjectsClient-ServerProtocolHigh-levelAPIJava-to-JavaonlyTransparentLightweight3.3RMIRemoteMethodInvocatio79从RPC到RMI变化:从过程面向对象从函数调用对实例的操作问题:动态绑定问题——取得实例的引用接口ClientSend()ServerEcho()Server_StubEcho()

Server_StubEcho()

objobj从RPC到RMI变化:ClientServerServer_80StubObjectServerRemoteObjectpublicinterfaceAdderextendsRemote{publicintadd(intx,inty)throwsRemoteException;}RemoteInterfaceRMIRegistryStubObjectServerRemotepublic813.4SessionBeanRMIStateless远程对象总是存在,使用者通过naming取得远程对象的引用由服务提供者控制RemoteObject的创建和销毁企业级应用要求“远程对象”:会话,管理(持久化,生命周期),安全,事务3.4SessionBeanRMI82SessionBean:让remoteservice(即SessionBean)实现javax.ejb.SessionBean接口由EJB容器利用SessionBean接口管理SessionBean的生命周期(初始化、销毁、钝化等)EJB容器截获远程调用请求,将请求转发给SessionBeanEJB容器在这个过程中插入/实现安全、事务和持久化等处理SessionBean:83SessionBean

andRMIServerContainerRemoteObjectClientEJB(1)Call<HomeObject>.Create()(2)CallbusinessmethodsRMINamingandDiretoryService(n)(1)(n)HomeStubRemoteStubObjectRemoteInterfaceHomeInterfacejavax.ejb.SessionBeanHomeObjectJNDIClientJNDIlookupSessionBeanandRMIServerCont84EJB容器EJB容器85在部署EJB时,容器会为每个EJB:根据Home接口产生HomeObject生成stub和skeleton根据部署描述符设置安全环境、事务环境在JNDI名称空间中注册EJB—包括Home接口、资源引用等在部署EJB时,容器会为每个EJB:86客户端在访问EJB时:通过JNDI查找到HomeObject的引用通过HomeInterface上的create方法创建一个RemoteObjectHomeObject会创建并返回一个RemoteObject调用RemoteInterface上的商业方法RemoteObject截取调用进行处理,然后委托BeanClass完成商业方法RemoteObject截取BeanClass的返回进行处理,然后将结果返回给客户端客户端在访问EJB时:87BeanClass在执行商业方法时可以访问容器:可以通过EJBContext对象(它是对容器的直接引用)请求关于环境的信息:如Client的身份、事务的状态以及自身的引用。可以通过JNDI访问资源,如JDBC连接、其它的EJB等。BeanClass在执行商业方法时可以访问容器:88容器在管理EJB生命周期过程中,通过回调方法通知EJB状态的变化:BeanClass实现并响应这些回调方法,进行相应的处理。不同类型的EJB回调方法各不相同,如SessionBean包括:ejbCreate;ejbRemove;ejbPassivate;ejbActivate

。容器在管理EJB生命周期过程中,通过回调方法通知EJB状态的89参考文献揭开Socket编程的面纱,goodcandles/archive/2019/12/10/294652.aspx

DistributedSystems:ConceptsandDesign,GeorgeCoulouris,JeanDollimore&TimKindberg,1994对分布计算系统的探究,wbright,2019.02chinaitpower/A/2019-02-19/14439.html

Java™RemoteMethodInvocationSpecification,SunMicrosystems,2019JavaRemoteMethodInvocation(RMI),AlexanderDayChaffee,2019,alexcpurpletech

EnterpriseJavaBeansTMSpecification,Version2.0,SunMicrosystems,2019.8MasteringEnterpriseJavaBeansTM,Ed.Roman,2019J2EECourse,(无法找到出处)参考文献揭开Socket编程的面纱,goodcandles90TheEnd!TheEnd!91Copyright?2019AlexChaffee1.远程对象(RemoteObjects)RemoteObjectsLiveonserverAccessedasiftheywerelocalRemoteReferenceLayerTransportLayerJVMClientObjectRemoteReferenceLayerTransportLayerJVMStubRemoteObjectSkeletonCopyright?2019AlexChaffee1.92Copyright?2019AlexChaffee远程接口(RemoteInterfaces)DeclareexposedmethodsImplementedonclientLikeaproxyfortheremoteobjectimportjava.rmi.*;publicinterfaceAdderextendsRemote{ publicintadd(intx,inty) throwsRemoteException;}Copyright?2019AlexChaffee远程93Copyright?2019AlexChaffee开发远程对象DefineaRemoteInterfaceextendsjava.rmi.RemoteDefineaclassthatimplementstheRemoteInterfaceextendsjava.rmi.RemoteObject orjava.rmi.UnicastRemoteObjectCopyright?2019AlexChaffee开发94Copyright?2019AlexChaffeeRemoteClassExampleimportjava.rmi.*;importjava.rmi.server.*;publicclassAdderImplextendsUnicastRemoteObjectimplementsAdder{publicAdderImpl()throwsRemoteException{}publicintadd(intx,inty) throwsRemoteException{returnx+y;}}Copyright?2019AlexChaffeeRe95Copyright?2019AlexChaffee2.StubsandSkeletonsStublivesonclientpretendstoberemoteobjectRemoteReferenceLayerTransportLayerJVMClientObjectRemoteReferenceLayerTransportLayerJVMStubRemoteObjectSkeletonSkeletonlivesonserverreceivesrequestsfromstubtalkstotrueremoteobjectdeliversresponsetostubCopyright?2019AlexChaffee2.96Copyright?2019AlexChaffeeCompilingRemoteClasses(Diagram)Adder.java(interface)Adder.class(interfaceclassfile)javacAdderImpl.java(remoteclass)AdderImpl.class(classfile)javacrmicAdderImpl_Skel.class(skeletonclassfile)AdderImpl_Stub.class(stubclassfile)Stubs和skeletons利用rmic编译器产生Copyright?2019AlexChaffeeCo97Copyright?2019AlexChaffeeRemoteInterfacesandStubsRemoteInterfaceStubRemoteObject(Server)ClientSkeletonimplementsimplementsStub和skeleton类是在运行时确定,并动态加载的Copyright?2019AlexChaffeeRe98Stub的职责:发起对远程对象的调用(通过调用remotereferencelayer)Marshalingargumentstoamarshalstream(employamechanismcalledobjectserialization)Informingtheremotereferencelayerthatthecallshouldbeinvoked.Unmarshalingthereturnvalueorexceptionfromamarshalstream.Informingtheremotereferencelayerthatthecalliscomplete.Stub的职责:发起对远程对象的调用(通过调用remote99Theskeletonisresponsiblefor:Unmarshalingargumentsfromthemarshalstream.Makingtheup-calltotheactualremoteobjectimplementation.Marshalingthereturnvalueofthecalloranexception(ifoneoccurred)ontothemarshalstream.Theskeletonisresponsiblefo100Copyright?2019AlexChaffee3.RemoteReferenceLayer提供了RemoteRef对象,代表远程服务实现的链接(指出引用了哪个远程对象)Stub对象利用RemoteRef的invoke()方法传递方法调用remotereferencelayer和底层的传输接口交互RemoteReferenceLayerTransportLayerJVMClientObjectRemoteReferenceLayerTransportLayerJVMStubRemoteObjectSkeletonCopyright?2019AlexChaffee3.101Copyright?2019AlexChaffee4.TransportLayerDealswithcommunicationsConnectionmanagementDispatchingmessagesbetweenstubandskeletonDistributedGarbageCollectionSitsontopofjavaRemoteReferenceLayerTransportLayerJVMClientObjectRemoteReferenceLayerTransportLayerJVMStubRemoteObjectSkeletonCopyright?2019AlexChaffee4.102RMI系统传输层的职责:设置到远程地址空间的连接管理连接监控连接状态(“liveness.”)侦听调用请求维护地址空间内的远

温馨提示

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

评论

0/150

提交评论