设计模式在EJB中的应用

什么是设计模式

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

GoF的“设计模式”是第一次将设计模式提升到理论高度,并将之规范化,本书提出了23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。

设计模式和框架

现在,可复用面向对象软件系统现在一般划分为三大类:应用程序 工具箱和框架(Framework),我们平时开发的具体软件都是应用程序;Java的API属于工具箱;而框架是构成一类特定软件可复用设计的一组相互协作的类。EJB(Enterprise JavaBeans)是Java应用于企业计算的框架.

框架通常定义了应用体系的整体结构 类和对象的关系等等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节。框架主要记录软件应用中共同的设计决策,框架强调设计复用,因此框架设计中必然要使用设计模式.

另外,设计模式有助于对框架结构的理解,成熟的框架通常使用了多种设计模式,如果你熟悉这些设计模式,毫无疑问,你将迅速掌握框架的结构,我们一般开发者如果突然接触EJB J2EE等框架,会觉得特别难学,难掌握,那么转而先掌握设计模式,无疑是给了你剖析EJB或J2EE系统的一把利器。

EJB中的设计模式

下面我们从设计模式的角度看看EJB的框架是怎样的?在这之前假设你已经大概了解了设计模式。专门的设计模式阐述请见我的设计模式之系列.

EJB是采取多层结构,原先我们数据库开发基本是应用程序(商业逻辑运算)直接调用数据库驱动,在EJB中,为将商业逻辑计算和数据库截然分开,使用多个结构式模式:Adapter模式和Bridge模式等.这样做的好处显然有三个:

1.分离了商业逻辑层和数据访问层;

2.能同时支持多个数据库;

3.但数据库类型更换时,不会设计到商业逻辑代码的大量修改.

EJB中将对数据库进行调用(如发出select等语句)称为会话bean(Sessionbean),而将对应数据库一个个记录的bean称为实体bean(Entity bean);由这两种类型的bean完成对数据库的访问.

会话bean一般和客户端应用是一一对应,而和数据库端联系紧密的是实体bean,EJB在实体bean(或直接在会话bean)和数据库之间使用了Adapter模式和Bridge模式,无意在实体bean和数据库之间又多了一层,称之为DAO(Data Access Object ),DAO实际就是设计模式的混合体.

我们以Java的宠物店中的Catalog为例,这是专门处理宠物店中的宠物类别,在对数据库访问中,有两个主要程序:CatalogEJB和CatalogDAO,我们从具体代码中看看设计模式是怎么应用的.

Bridge模式和Adapter模式

我们首先看看CatalogEJB代码:

public class CatalogEJB implements SessionBean {
   protected CatalogDAO dao;
//从DAO工厂中获取一个DAO 这是调用工厂(factory)模式的一个实例
   public void ejbCreate() {
     try {
       dao = CatalogDAOFactory.getDAO();
     }
     catch (CatalogDAOSysException se) {
       Debug.println("Exception getting dao " + se);
       throw new EJBException(se.getMessage());
     }
   }
....
}

时间: 2024-11-02 15:24:55

设计模式在EJB中的应用的相关文章

EJB中使用Hibernate的方法以及常见问题

EJB中使用Hibernate的方法应该大家都会,不过许多人可能没注意下面几个问题,首先我们来看下面这段代码. public class HibernateTestBean implements SessionBean ...{ SessionContext sessionContext; SessionFactory sf; public void setSessionContext(SessionContext sessionContext) ...{ this.sessionContext

[Head First设计模式]抢票中的设计模式——代理模式

原文:[Head First设计模式]抢票中的设计模式--代理模式  系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 引言 闲着没事,终于又拿起Head First设计模式 翻了翻,脑海里也一直在想抢票

实例详解EJB中的六大事务传播属性

要弄清楚这些问题,就要牵涉到事务传播属性的问题,EJB 中针对不同的情况提供了六种不同的事物传播属性 事务 (Transaction) 是访问并可能更新数据库中各种数据项的一个程序执行单元 (unit).在http://www.aliyun.com/zixun/aggregation/22.html">关系数据库中,一个事务可以是一条或一组 SQL 语句,甚至整个程序.它有通常被称为 ACID 的原子性(Atomicity).一致性(Consistency).隔离性(Isolation).

[Head First设计模式]山西面馆中的设计模式——观察者模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在我身边. 为什么观察者模式会出现呢? 为了建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应.在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统

ejb中什么是远程客户端调用,什么是本地客户端调用

问题描述 刚刚接触ejb,看了尚学堂的视频,里面介绍远程客户端调用.本地客户端调用.其中,远程客户端他就用了一个javaproject来调用ejb类,而本地客户端则是用一个webproject(包括jsp页面)来调用ejb类.那么ejb中什么是远程客户端调用,什么是本地客户端调用.希望各位最好举例说明,这方面我刚刚接触,比较弱.谢谢. 解决方案 解决方案二:远程调用就是A主机里的web应用程序调用B主机里的EJB,本地调用就是A主机调的Web应用调用本机(即A主机)里的EJB我以代码举个例子:i

[Head First设计模式]山西面馆中的设计模式——建造者模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感觉到累.一个感觉:很好玩!挺开心的...... 为什么会出现建造者模式? 在软件系统中,有时面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成. 这个复杂的对象的各个部分经常面临剧烈变化,但是将它们组合在一起的算法却相对稳定. 比如:建一所房子,建房子的过程基本不变

EJB中的@Local和@LocalBean的区别与用法

Ejb中的@Local和@LocalBean的区别 1 .在ejb3.1之后引入了@LocalBean的注解,我们之前(ejb3.0)使用的@Local,在javax.ejb包下,这个包是javaEE 7api的,在java7 seapi中是找不到的, 2 .@LocalBean的用途:当你开发一个ejb会话Bean没有实现任何接口,但你又想暴露给其他对象访问的时候,那么你就可以使用@LocalBean,当然你如果不喜欢写很多接口的话,你也可以使用这种方式代替你原有的@Local标注的接口,然后

两种设计模式在EJB开发中的应用

摘要:本文介绍了J2EE的分层结构,深入研究了如何使用Session Facade模式和ValueObject 模式设计EJB,并对其开发过程做了较详细的说明. 关键字:EJB ;值对象模式;会话外观模式 一.概述 与传统的二层体系结构相比,J2EE有两个特点: 1.定义了一套标准化组件,通过为这些组件提供完整的服务. 2.使用多层分布式的应用程序模型.应用程序的逻辑根据其实现的不同功能被封装到不同的组件中.如图1所示. 这种多层结构使企业级应用具有很强的伸缩性,允许各层专注于某种特定的角色:

深入探讨EJB中新的消息驱动组件

提要:我们可以使用MessageDrivenBean(消息驱动组件),在企业级的应用程序中进行异步的消息传送. 引言:Enterprise JavaBeans(EJB)1.1版本中定义了两种组件类型-session组件和entity组件.客户端对象可以同步调用EJB1.1的这两种组件的方法,然而,为了继承Message Oriented Middleware(MOM,面向对象的中间件)和Java Message Service(JMS,Java消息服务)的优点的需要,EJB框架中也相应的应当加入