13:30 14:45 15:30 16:00 17:00 分析体系结构方法(第8步) 准备汇报结果/休息 描述结果(第9步) 进一步的分析/角色的分配 休会 二、论述题:(30分) 选取目前构件模型中OMG的CORBA、Sun的EJB、Microsoft的DCOM之一,论述模型的结构、特点以及使用该技术开发构件的过程,并举一示例。 答:Sun的EJB构件模型
EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。提供了让客户端使用的分布式对象的框架。简化了企业级软件的开发。EJB容器提供了目录服务,事务管理,安全等。 EJB的类型:
(1)。会话Bean:与所在客户会话的生存周期一样长,即在客户交互期间有效。 1*无状态会话Bean:一次对一个客户提供业务逻辑而不在方法调用之间 保存客户状态,即调用完后,无状态会话Bean就被释放到缓冲池中。 2*状态会话Bean:可以维持调用客户的状态并在方法调用之间维护客户状态。 (2)。实体Bean:代表了某个持久对象,用于映射基础数据库表格,生成数据库的对象视图。
1*容器管理的持久性:负责同步bean状态与基础数据库。
2*Bean管理的持久性:编程人员要在beande实现类中编码所有需要的SQL 语句与JDBC调用。
(3)。消息驱动的bean:一些业务逻辑的消息使用者。 EJB的特点:
1*清晰的体系结构:支持多层应用体系结构和基于构件开发。
2*简化的编程模型:只需要关注服务的实现,其余事务有EJB容器完成。 3*通用的编程模型。
4*易移植性:可以部署到任何兼容的EJB容器中。 5*支持事务处理:可以通过代码外的描述定义事务处理。
6*可扩展性:可随应用的增长而扩展,并提供了负载平衡。 7*安全性:由EJB服务器提供资源的访问权限控制。
EJB至少包括四个元素:主接口,组件接口(Remote或Local接口),Bean实现类和部署描述项。
开发EJB组件的设计过程:Online--BookStore 1.目标规划:
(1)系统的用户登录及身份验证要求。 1*系统用户注册。 2*验证用户的注册信息。
3*系统用户进入系统时的身份验证。
(2)在线图书销售系统要求 1*允许用户浏览所有图书。
2*允许登录用户购买自己喜欢的图书。 3*允许用户对购物车进行管理。 4*系统实现订单的处理。 5*系统完成整个的购物流程。 2.系统规划
(1)系统结构层次
1*客户层:使用Web浏览器。 2*表示层:使用JSP+JavaBean。 3*业务层:使用EJB中的会话Bean。
4*集成层:通过EJB中的实体Bean连接到数据库。 5*资源层:J2EE中提供的各种资源。
(2)数据模型:产品(Book)模型,账户(Account)模型,订单(AccountOrder) 模型。
AccountOrder Account OrderItem ShoppingCart Book Supplier Category 3.EJB的设计
(1)体系结构分层的设计:Online--BookStore的系统层次结构 客户层:面向用户 表示层:处理客户层 业务层:封装业务逻辑 集成层:连接外部 资源层:组件引用的系统 4.层次模式的选择 (1)表示层模式:
1*截取过滤器:促进请求的预先处理和后处理。 2*前端控制器:提供请求处理的集中控制器。 (2)商业层模式:
1*值对象:通过减少网络对话,以加速层之间的数据交换。 2*会话外观;隐藏业务对象复杂性,集中化工作处理。
3*服务器定位:封装业务服务查找和创建的复杂性,定位业务服务工场。 5.实体Bean(数据)和会话Bean(业务过程)的合理分配 6.状态会话Bean和无状态会话Bean的选择
(1)状态会话Bean:在Online--BookStore的购物车中,客户被分配到一个购物车,整个会话期间,客户独占使用这个购物车,购物过程中可能从购物车中拿出一些商品,最后查询购物车中的所有内容并结帐,然后离开商店。这些不同方法之间的状态数据都需要保留下来,所以适合使用状态会话Bean实现。 (2)无状态会话Bean:在Online--BookStore的账户模块中,因生成一个新的注册用户和判断用户是否登录,都是一次性的业务处理,可以使用无状态会话Bean 7.Bean管理持久性和容器管理持久性的选择
在Online--BookStore的实体中Bean使用的都是CMP管理持久性。 8.远程接口和本地接口的选择
在Online--BookStore的实体中Bean使用的都是本地接口,让会话Bean来访问实体Bean,隐藏了实体Bean的各个细节。而所有的会话Bean,采用远程接口,是客户可以访问会话Bean。
浏览器 小服务 EJB JDBC 数据库 三、应用题:(30分)
选取自己熟悉的领域,根据客户提出的功能需求应用MVC模式设计一应用系统的软件体系结构。要求必须说明清楚每层的接口、服务类。
MVC模式能使界面(View)和数据(Model)能有效的分开,由控制器(Controller)去控制。
电子时钟的例子
1.
首先我们来看一下Model,Model按照我的理解是数据,就是所有的共用数据都是存储在Model里面的,时钟里有这样的数据,小时,分钟,秒;现在我们来建立一个Model,ModelLocator.as: package net.smilecn.clock.model{ import flash.events.EventDispatcher; import flash.events.Event;
public class ModelLocator extends EventDispatcher{ private var _hour:String; private var _minutes:String; private var _second:String;
public function ModelLocator():void{ }
public function get hour():String{ return _hour; }
public function set hour(value:String):void{ _hour = value;
dispatchEvent(new Event(\changeHour\)); }
public function get minutes():String{ return _minutes; }
public function set minutes(value:String):void{ _minutes = value;
dispatchEvent(new Event(\changeMinutes\)); }
public function get second():String{ return _second;
public function set second(value:String):void{ _ second = value;
dispatchEvent(new Event(\changeSecond\)); } } }
这个代码应该会好懂,这里ModelLocator继承了EventDispatcher这个类,继承这个类的原因是ModelLocator需要用dispatchEvent发消息出去。再来看一下Controller.as这个类: package net.smilecn.clock.control{ import flash.utils.Timer; import flash.events.TimerEvent;
import net.smilecn.clock.model.ModelLocator; public class Controller{
private var _model:ModelLocator; private var _timer:Timer;
public function Controller(model:ModelLocator):void{ _model = model; }
public function startTime():void{ _timer = new Timer(1000,0);