21秋西电软件构件与中间技术模拟试题三答案
1. (15分)现有分布式软件系统通常基于三层结构,请回答以下关于三层结构的问题:a) 简要说明三层结构的构成,并说明每层的主要工作。
b) 三层结构如何提高系统数据的安全性?
c) 三层结构如何提高系统的可移植性与可维护性?
答案要点:
a) 三层结构由客户层、中间层与数据层构成,其结构如下图所示:
其中客户层的主要工作是完成客户界面的展现,实现与用户的人机交互,将客户端请求发送到中间层,并将返回结果呈现给用户;
中间层的主要工作是实现系统的核心业务逻辑;
数据层的主要工作是实现系统业务存数的存储与访问。
b) 三层结构对数据安全性的提高体现在以下两个方面:
客户程序与数据库的连接被中间层屏蔽,客户程序只能通过中间层间接地访问数据库。
客户端不需安装数据库驱动,不需为客户端开放访问数据库的权限,非法用户无法在客户端上直接访问数据层的数据。
c) 要点如下:
可移植性改进:客户端只包括界面相关代码,容易实现,实现简单必然涉及较少的移植问题;客户端不需安装数据库驱动,而是通过中间层间接访问数据,从而提高可移植性。
可维护性:客户端与中间层分工明确,客户端只包括界面相关代码,而业务逻辑代码集中在中间层,界面逻辑与业务逻辑的修改相互独立,可维护性较好。
2. (15分)跨越网络的互操作是分布式系统需要解决的首要问题,通常将交互双方逻辑上划分为客户端与服务端两部分,请回答以下关于客户端与服务端跨越网络交互的问题:
a) 请给出至少三个软件系统中常见的客户机/服务器模型。
b) 基于现有中间件的支撑,客户端可以像调用本地服务那样方便实现远端服务的调用,这种远程调用通常基于的通信模型是什么?请详细给出该模型的基本结构。
c) 基于b)中给出的模型,说明在一次远程调用的完成过程中,模型中的机制如何帮助客户端与服务端实现远程调用与返回。
答案要点:
a) 常见的客户机/服务器模型:
Web浏览器与Web服务器
电子邮件客户程序与服务程序
FTP客户程序与服务程序
函数调用方与被调用函数的实现
b) 该通信模型为Stub/Skeleton,基结构如下图所示:
其中客户端通过客户端桩/Stub完成与服务端的交互,服务端通过服务端框架/Skeleton完成与客户端的交互,桩与框架相对客户端与服务端来说均是本地的。
c) 一次远程调用的过程如下:
①:客户程序将调用请求发送给客户端桩,对于客户程序来说,桩就是服务程序在客户端的代理。
②:客户端桩负责将远程调用请求进行编组并通过通信总线发送给服务端。
③:调用请求经通信总线传送到服务端框架。
④:服务端框架将调用请求解组并分派给真正的远程对象实现(服务程序)。
⑤:服务程序完成客户端的调用请求,将结果返回给服务端框架。
⑥:服务端框架将调用结果编组并通过通信总线发送给客户端桩。
⑦:客户端桩将调用结果解组并返回给客户程序。
⑧:客户程序得到调用结果。
在调用过程中,客户端仅与本进程内桩交互,从而避免自己处理请求的发起与结果的接收等底层通信工作;而服务端仅与本进程内的框架交互,从而避免自己处理接收请求与发送结果等底层通信工作。
3. (15分)对于互操作的良好支持是CORBA规范的优势,请回答以下相关问题:
a) 请说明CORBA规范对可互操作性支持具体情况,给出相应的互操作层次。
b) 针对a)中互操作性的每个层次,简要解释CORBA规范是如何做到的。
答案要点:
a) CORBA支持从跨语言、跨机器、跨ORB到跨体系结构等多层次的互操作,具体如下:
不同平台(如操作系统)与语言之间的可互操作性:构件及其使用者可运行在不同平台上,且可以使用不同的程序设计语言实现;
不同厂商ORB产品之间的可互操作性:构件及其使用者可以运行在不同厂商的ORB平台之上;
不同体系结构之间的可互操作性:其它体系结构下的构件可与CORBA构件实现交互。
b) CORBA规范对于互操作的支持手段如下:
不同平台(如操作系统)与语言之间的可互操作性:这是早期的CORBA版本强调解决的主要问题,解决方法包括制定IDL标准以及IDL到程序设计语言的映射。这使得使用同一供应商的ORB产品开发的客户程序与服务程序之间可以交互,但使用不同供应商的ORB产品开发的客户程序与服务程序则未必是可互操作的。
不同厂商ORB产品之间的可互操作性:CORBA 2.0版引入了GIOP和IIOP,从而实现了不同供应商的ORB产品之间的可互操作性,所有供应商的ORB产品如果与CORBA 2.0兼容则彼此之间可互操作。
不同体系结构之间的可互操作性:更完善的可互操作性还应包括不同体系结构之间的可互操作,例如一个CORBA对象可通过协议桥接操作一个DCOM对象,OMG通过引入ESIOP来解决这一问题。但ESIOP只能解决CORBA与特定体系结构(如DCOM)之间的互操作,并不能通过一套ESIOP解决所有的问题。
4. (15分)回答以下关于CORBA服务端POA体系结构的问题:
a) 简述在CORBA的POA体系结构下,客户端发出的请求如何一步步传递到最终提供服务的伺服对象。
b) 指明在上述请求传递的过程中,CORBA规范为了支持灵活的服务端模型,允许程序员在哪些环节添加自己的干预,以及可以添加怎样的干预?
答案要点:
a) 客户端请求在服务端的传递过程如下:
①:客户端请求到ORB:客户端将请求发给ORB;
②:ORB到POA管理器:ORB根据客户端发出请求中的目标机器和端口号等信息将请求转发给在对应机器/端口监听的POA管理器;
③:POA管理器到POA:POA根据请求中的POA名字信息将请求转发给特定的POA;
④:POA到伺服对象:POA根据请求中的CORBA对象标识信息及自身管理的伺服对象信息将请求转发给相应的伺服对象。
b) CORBA规范允许程序员添加干预的环节与相应干预手段如下:
在POA管理器将请求转发给POA的环节中:
i. 程序员可以利用POA管理器控制POA的行为;
ii. 程序员可以设置相应的适配器激活器,根据请求与服务端POA状态动态创建相应的POA来处理相应请求;
在POA将请求转发给特定伺服对象的环节中:
i. 可以为POA设置不同的POA策略,这些策略会影响POA寻找具体伺服对象的过程,如是否使用活动对象映射表,是否使用伺服对象管理器等;
ii. 可结合POA策略自己编写伺服对象管理器配合或取代活动对象映射表,以更灵活的策略定位特定的伺服对象。
5. (15分)回答以下关于EJB构件的问题:
a) 基本的EJB构件有哪几种?每种EJB构件的主要作用是什么?
b) 无状态会话构件与有状态会话构件的主要区别是什么?何时使用有状态会话构件?何时使用有状态会话构件?
c) 在EJB3.0之前,开发一个EJB构件需要编写哪三部分代码?
答案要点:
a) 基本的EJB构件及其主要作用如下:
会话构件:用于完成与客户端的会话交互,实现特定业务逻辑;
实体构件:用于封装数据库操作;
消息驱动构件:用于处理客户端发出的异步消息。
b) 无状态会话构件不需保存与特定客户端交互的中间状态,一个对象可以被多个客户端共享的使用;而有状态会话构件需要保存与特定客户端交互的中间状态,一个对象不可以被多个客户端共享的使用,而是被特定客户端所专用。
当需要保存与特定客户端交互的中间状态时,如在购物车构件中需保存特定客户端所选择的端口时,需要使用有状态会话构件;如不需要保存与特定客户端交互的中间状态,一个对象可被多个客户端共享使用,如某构件返回服务端当前时间时,可使用无状态会话构件
c) 需要编写以下三部分:
Remote接口:用于约定构件提供的服务;
Home接口:用于包含构件生命周期管理相关操作;
EnterpriseBean类:用于实现构件的业务逻辑功能。
6. (15分)现拟开发一个提供计数器功能的EJB构件,该构件应至少提供增加计数值、减少计数值、获取当前计数值等功能,要求该构件应能为每个使用者提供单独的计数功能,请回答以下相关问题:
a) 该构件应设计为会话构件(Session Bean)还是实体构件(Entity Bean)?为什么?
b) 若设计为会话构件,则应设计为有状态的还是无状态的?为什么?如何在实现的构件中保存使用者当前的计数值?
c) 请给出该EJB构件的Remote接口、Home接口以及EnterpriseBean类的代码框架。(给出接口中方法及类中的成员列表即可)
答案要点:
a) 该构件应设计为会话构件。因为该构件提供的是与客户端交互的会话功能,而不是用于封闭数据库操作的,因此应设计为会话构件。
b) 应设计为有状态会话构件。因为该构件需要保存与客户端交互的中间状态,即需要记录当前客户端相应的计数值,因此一个对象只能被一个客户端所专用,应设计为有状态会话构件。可在EJB类设置相应的属性(数据成员)来保存使用者当前的计数值,因为每个客户端专用一个对象,因此可用该对象的属性保存使用者相关的信息。
c) 代码框架如下:
Remote接口:
CounterRemote{
public void increaseValue(int step);
public void decreaseValue(int step);
public void getValue();
}
Home接口:
CounterHome{
public CounterRemote create(String userName);
}
EnterpriseBean类:
CounterBean{
public void increaseValue(int step){}
public void decreaseValue(int step){}
public void getValue(){}
public void ejbCreate(String userName){}
public void ejbRemove(){}
public void ejbPassivate(){}
public void ejbActivate(){}
public void setSessionContext(SessionContext Context){}
}
7. (10分)请综合论述软件构件与软件中间件在软件开发中的主要作用。
答案要点:
构件的主要作用是为软件重用提供支持,从而促进软件的工程化开发。从以下几个方面展开:
规范构件开发,将实现细节封装
规范构件使用,仅依赖于构件接口调用构件功能
中间件的主要作用是从应用软件中提取共性,从而降低高层应用软件开发的复杂性。从以下几个方面展开:
提供构件管理的功能:帮助程序员有效管理与组织构件;
提供互操作支持:帮助构件及其使用者自动实现跨越网络的交互;
提供各种公共服务:提供事务管理、安全性控制、数据库访问等应用系统中常用的功能,程序员可直接使用这些通用功能而不需自己实现。
页:
[1]