帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE体系结构设计(2)
作者:佚名 发布时间:2005-04-02 来源:不详
 
  当底层的数据存储可能
对象;抽象代理的方法会创
理,每种对象对应一种持久
要使用的数据访问对象。
会变化的时候,开发人员可以采
建一些虚拟的数据访问对象代理
性存储介质的实现,一旦组件得

用抽象代理的方法来实现数据访问
和各种类型的实际数据访问对象代
到这些代理,就可以利用来创建需


  图11给出了这种情况的
类,被其他一些实际的数据
实际的数据访问对象,并利
数据访问对象都负责建立对
类图。该类图表示了一个基础的
访问对象代理继承以支持特定的
用它来创建需要的数据访问对象
于数据源的连接,并得到和管理
数据访问对象代理,它是一个抽象
数据访问函数;用户可以得到一个
而访问相关的数据,每一个实际的
所支持的业务数据。
  

  
图11 抽象代理使用DAO


  下图12是这种情况下的序列图。                                                
  

  
图12抽象代理使用DAO序列图


  这种设计模式的优势:                                                          

  透明性好。业务对象可
细节被数据访问对象所隐藏
以在不知道数据源实现细节的情
,所以这种访问过程是透明的。
况下访问数据。由于一切数据访问

  可移植性好。在应用系统中添加数据
种数据库实现上。业务对象与数据实现是
行一些变化即可。
访问对象,可以使得前者能够很方便地移植到另外一
隔离的,所以在移植过程中,仅仅对数据访问对象进

  减少业务对象的代码复杂度。由于数
就简化了业务模块和其他数据客户的代码
据访问对象可以管理所有的数据访问复杂细节,这也
。同时也提高了应用系统的整体可读性和开发率。
  集中处理所有数据访问
其他部分就与数据访问实现
得相关操作更加容易被维护
。由于所有的数据访问操作都移
隔离开来,而全部相关操作都与
和管理。
交给数据访问对象,这样应用系统
数据访问对象集中处理,这样也使

  这种设计模式的缺陷:                                                          

  对于容器管理的持久性不能利用。如
性数据存储的管理都由容器负责。这样的
务将透明地提供这一功能。
果EJB容器采取容器管理的方式,那么所有对于持久
话应用系统就无需实现数据访问对象了,因为应用服

  添加了额外的层面。数
一些额外的设计和实现的负
据访问对象在数据用户和数据源
担。当然,我们认为它是物有所
之间添加了一个层面,也就增加了
值的。
  总之,在开发人员选择
比如说,与视图和显示相关
是与EJB层次相关的。另外
不同模式的时候,应该注意,一
的模式就是在Web层应用的。而
一些关于读取数据和分派操作的
定的模式对应于一定的应用层次。
一些与业务逻辑控制相关的模式则
模式则适用于不同的层次之间。

  7、值对象或传输对象                                                          

  值对象(value object)
的通信是在Web层和EJB层之
关数据并提供给客户。
模式通过减少分布式通信的消息
间。在一个远程调用中,一个单

而促进数据的交换,通常这里所指
一值对象可以被用来取出一系列相


  这种设计模式的出现是基于客户需要
台中,应用系统通常将服务器端的程序组
法则需要将数据返回给客户;这种情况下
到相关信息,应该注意的是,多数情况这
户名或者用户地址等。
与ejb大量地交换数据的情况。具体来说,在J2EE平
件实现为会话bean和实体bean,而这些组件的部分方
,通常一个用户会重复调用相关方法多次,直到它得
些方法调用的目的都是为了取得单一的信息,例如用


  显而易见,在J2EE平台上,这种调用
应的方法会给Web带来极大的负担,即使
EJB程序,由于方法调用被缺省地认为是
基本上都是来自远程的。也就是说,用户多次调用相
用户和EJB容器加载相同的JVM、OS和计算机上运行
远程任务,所以这种问题依然存在。

  由于以上所提到的问题
很大的下降,因此利用多次
究人员建议使用传输对象来
象;当用户向EJB发出对于
相关的数值,并将整个对象
,在远程方法的调用次数增加的
方法调用而取得单一的信息是非
包含所有的程序数据,即每次方
程序数据的请求时,EJB会创建
传送给用户。
时候,相关的应用程序性能将会有
常低效的;在这种情况,J2EE的研
法调用可以发送和接收这个传输对
这个传输对象,将它的各个域赋以


  当EJB使用传输对象的
用多次方法调用以得到对象
以所有对于该传输对象的调
,这个传输对象必须具有对
时候,用户可以通过仅仅一次方
中每个域的数值;由于传输对象
用或取值都是本地调用,而不是
应于每个属性的访问方法,或者
法调用来取得整个对象,而不是使
是通过值传递而交送给用户的,所
远程方法调用。不过需要注意的是
将所有属性都设为公共的。

  类图13表示了传输对象模式的体系结构。                                        
  

  
图13 传输对象类图


  在图13中,传输对象首先在EJB中创
据需要融合其他的设计模式。
建,然后返回给远程客户;当然,传输对象也可以根


  图14显示了传输对象模式中的参与模块和它们之间的交互。                        
  

  
图14 传输对象序列图


  下面我们说明一下传输对象模式的各个参与模块:                                  

  (1)客户(Client)。客
程序。
户代表了EJB所提供服务的使用

者,通常是运行于用户终端的应用


  (2)业务对象。业务对
Access Object)实现的角色
用户;业务对象也可以从用
新。
象表示在一个模式中由会话bean
。业务对象通常负责创建传输对
户中取得一个传输对象格式的数

、实体bean或数据访问对象(Data
象,并根据请求将其传送到相关的
据,并应用这些数据来执行一些更


  (3)传输对象。传输对象是一个可序
包含所有域的构造函数,用来创建这个传
列化的Java对象。在这个对象的类中,通常会有一个
输对象。

  这个传输对象中的成员
当然如果存在一定安全的需
方法。由此可见,传输对象
变量设为公共,或提供一定
变量基本都被定义为公共,从而
要,相关的成员变量也可以设为
的设计是随着应用系统的需要不
的访问方法,将是一个很重要的
无需为它们提供相关的访问方法。
保护或私有,并且给定各自的访问
同而改变的,是否将对象中的成员
设计问题。

  通常在实现这个模式时,最多采取的
可更新的传输对象策略中,传输对象不仅
,还可以从业务对象中得到用户对于数据
是可更新的传输对象策略和多传输对象策略。  在
可以从服务于用户的业务对象中取得相关信息和数据
所需要进行的改变。

  图15以类图表的形式表明了业务对象和传输对象之间的关系。                      
  

  
图15 可更新传输对象类图


  业务对象创建了传输对
据做出了一定的修改;为了
一定的变值方法,而出于对
相应地,这些方法可以去调
;同时在传输对象的方法中
务对象的方法得到传输对象
种本地数据访问不会影响到
象。而用户通过访问业务对象,
能够使得用户可以修改业务对象
Web负担的考虑,业务对象所提
用传输对象所提供的方法,来设
,我们也可以植入数据验证和完
时,可以直接调用传输对象的成
业务对象。
既得到了所需的信息,也对相关数
各个域的取值,这个对象必须提供
供的方法最好以传输对象为参数。
置传输对象的各个成员变量的取值
整性检查的逻辑,这样在用户从业
员方法进行本地数据访问,当然这


  当用户调用业务对象的
业务对象;业务对象接收到
这里需要说明的是,上面提
我们需要在传输对象中另设
模式的设计相对复杂,开发
变值方法时,该方法会将用户端
更新的传输对象,便将这些更新
到的写回只是涉及到被更新的变
置一个变量,来指定哪些成员变
人员需要考虑同步化和版本控制
的传输对象序列化,再将它发送给
写回到自己的对象拷贝中去;  
量,而不是全部变量的写回,因此
量被用户更新过,这也就使得这种
的问题。

  图16显示了这个更新过程的序列图。                                            
  

  
图16 可更新传输对象序列图


  多传输对象的方法是指一个单一的业
也就是说,业务对象和它所创建的传输对
各个参与模块以及它们之间的调用关系。
务对象可以根据用户请求制造多个不同的传输对象。
象保持一对多的关系。类图17表示了这种实现方法的

  

  
图17 多传输对象类图


  当一个用户需要A类型
象A;当他需要B类型的传输
序列图18表示了这一过程。
的传输对象时,他会激活相关EJ
对象时,他会激活getDataB()方

B的getDataA()方法来取得传输对
法来获取传输对象B;依此类推。

  

  
图18 多传输对象序列图


  使用这种设计模式,应用系统的实体
再为每一个成员变量都实现一个set()和g
需再进行多次的方法调用来取得信息和数
。当然这里需要考虑Web负担和大量数据
择不同的实现方法。
bean及其远程接口会变得十分简单。实体bean中无需
et()方法,并在远程接口中实现相应的定义。用户无
据,所需要的只是一次方法调用以获得整个传输对象
一次传输的权衡。开发人员可以根据不同的需要来选


  如上所述,用户和实体bean之间可以
据,也就是说传输对象作为数据载体工作
担。通过使用传输对象的方法,我们也将
过在使用可更新的传输对象方法时,用户
对象中,后者将所需的更新整合到自己一
不同的客户可能在同时修改相同类型的传
,可能就会造成一些用户的数据没有得到
在系统设计中必须考虑这个问题。
通过在一次方法调用中使用传输对象而交换所有的数
,并减少了远程的方法调用,从而大大减轻了Web负
有可能减少实体bean和其传输对象间的代码重复。不
可以修改其本地的传输对象,之后再将其传送回业务
端;但是这样一来,就会存在一个版本控制的问题,
输对象,而如果相关的业务对象没有发现这一点的话
及时更新,而另外一些用户的数据又被覆盖的情况;


  8、截取过滤器                                                                

  截取过滤器(intercept
是说它对于客户的请求使用
求并提供一个核心的认证机
ing filter)主要用于对于用户
了额外的操作。比如说,servle
制。
请求的之前处理和之后处理,也就
t可以处理一个网站的所有客户请


  这种模式主要工作于表
。在这些请求中,有一些请
解释或补充内容,之后才能
和系统响应都需要一定的预
等。通常这些处理的结果都
来表示。
示层,负责处理不同类型的请求
求会直接传送给后端模块处理,
传送给后端模块。这种模式的提
处理和后处理,例如用户身份、
会决定用户的请求是否能够进行

,同时也需要进行多种不同的处理
而另外一些请求则先会在过滤器里
出主要是由于一个客户的Web访问
用户环境信息、用户请求的合法性
,或是系统的响应应该用什么格式


  对于这种预处理和后处理问题,传统
就是一整套if/else语句,并且指定如果
显然,这种方法是存在很大弊端的,即代
工作融于一般的程序模块,使得整个程序
上,开发人员会设计一系列额外的检测程序模块,也
其中任何一个检测失败,所有的处理工作都会退出。
码的可读性、可维护性都会被大大降低,同时将检测
的模块性难以保证。

  解决这种问题的关键在于,设计一种
这些模块通常都能够完成一定的检测和过
模式----截取过滤器作为解决方案,这种
入的过滤器来执行一般的处理功能。
简单的技术,以能够添加或移除额外处理的模块,而
滤功能。根据以上的讨论,J2EE研究人员提出了设计
模式可以在不影响核心处理模块的情况下,实现可插


  从理论上来说,这种过
;同时开发人员也可以随时
滤器可以截取客户请求和系统响
根据需要移除这些过滤器,并不
应,并进行相应的预处理和后处理
用担心会改变任何其他模块。

  我们这里所说的预处理
统调试等。执行这些功能的
变化,这些模块随时可能被
和后处理功能,通常是指一些基
过滤器通常是需要与核心模块分
添加或删除。
本的系统服务,如安全、登录,系
开的,并且由于系统职能或规则的


  下面提供一些关于截取
以运用。图19表示了截取过
之间的联系。
过滤器的图示,以帮助大家更好
滤器模式的整体结构,图19显示

地理解这种设计模式,并合理地加
了截取过滤器中的参与模块和相互

  

  
图19 截取过滤器模式

  

  
图20 截取过滤器序列图


  下面我们分别来说明图20中的各个模块:                                        

  (1)过滤管理器(Filter
器链对象以及相应的过滤器
Manager)。过滤管理器负责过
组建,并初始化整个处理过程。
滤器的主要处理工作,即创建过滤


  (2)过滤器链(Filter C
hain)。过滤器链是一组互不依
赖的过滤器有序集合。

  (3)过滤器1,过滤器2,过滤器3(Fil
不同服务的过滤器,而过滤器链则负责它
terOne,FilterTwo,FilterThree)。这些都是提供
们的协调工作。

  通过采用这种设计模式
处理多种请求的中心模块,
更好地与处理模块所提供的
并提供相当灵活的服务组合
时根据需要从其他程序模块
使用一组类似的过滤器,并
,应用系统可以取得更方便的中
并能根据后端的处理模块而解释
功能匹配。另外,过滤器通常可
,应用系统可以通过使用截取过
中插入或移除,并且由于它们通
在不同的情况下进行全组的重用
心控制,这是由于过滤器可以提供
和润色用户的请求,使得该请求能
以将不同种类的服务聚集在一起,
滤器提高其重用性,过滤器可以随
常具有标准的接口,开发人员可以


  采用这种设计模式也会
由于根据其定义和需求,每
需要共享信息的话,其代价
带来一定的问题,即在过滤器之
个过滤器的设计和开发都大相径
将是非常昂贵的。
间共享信息将变得非常困难,这是
庭。因而如果在不同的过滤器之间

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·.NET真的战胜了J2EE吗?  (2005-04-02)
 ·J2EE应用中与Oracle数据库的连接  (2005-04-02)
 ·构建高性能J2EE应用的10个技巧  (2005-04-02)
 ·J2EE的13种核心技术  (2005-04-02)
 ·11本入门到精通J2EE书籍推荐  (2005-04-02)
 ·小心进行 J2EE Web Services 的测  (2005-04-02)
 ·AOP如何与J2EE实行高效的无缝结合  (2005-04-02)
 ·配置J2EE(v1.4.02)和Cloudscap  (2005-04-02)
 ·J2EE 1.4 的新特性完全展播  (2005-04-02)
 ·我眼中的J2EE  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统