首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux相关>企业应用>正文

Java进阶:优化Entity Beans的七条守则

http://www.oklinux.cn  2008-01-20  来源: ccidnet baocl  会员收藏  游客收藏  【 】 

Entity beans提供了一个清楚的模型以描述应用程序中持久稳固的事务对象以及它们的设计。在面向对象的模型中,简单的Java对象通常被直接地描述,但是并不包括事务处理的功能,这通常需要使用事务对象来完成。Entity beans不仅仅考虑到模型中的简单类型,它也考虑到面向对象模型中的事务模型,它将所有的复杂的工作都交给了bean和容器服务。这使得应用程序可以象使用通常的Java对象那样来应用它。在保持存储数据的公开性和灵活性的同时,容器会对entity beans进行优化,而我们只需要考虑如何部署它。
基于Enterprise JavaBeans的开发方案,导致了面向对象的方法的广泛使用和对entity beans的大量使用。Sun的工程师对entity beans的实际使用作了大量的实践和研究。这篇文章是对开发中的一些经验的总结:
探索各种优化方案
对达到最佳的性能和适应性提供规则和建议
讨论如何避免一些已知的问题

一、尽可能地使用容器持久化治理
容器持久化治理(CMP)不仅仅可以大量减少编程的工作,而且在容器和容器生成的数据库访问代码中存在许多优化的可能。容器可以访问内存中的bean的缓冲,这使得它可以监控缓冲中的任何改变。假如缓冲没有被改变,这可以在提交事务前避免将缓冲存储到数据库中。这减少了不必要的调用数据库的开销。
另外一个优化的实例是对find方法的调用。根据对一个entity的参考搜寻一个entity,而接下去最可能的情况是使用这个entity。这通常包括两个数据库访问:
在数据库中寻找记录并得到主键
将记录的数据读入到内存中
CMP会进行这样的优化,只要它认为可以这样做,它会使用一个数据库访问来代替这两个数据库访问,它会在一个数据库访问中同时得到主键和记录的数据。

二、编写同时支持Bean持久化治理和容器持久化治理的代码
在许多情况下,EJB的作者无法控制EJB将如何被部署,也无法预知部署使用的容器是否支持CMP。同样的,部署者在目标容器可能会使用bean持久化治理(BMP)。你必须寻找一个方法以执行这个bean以答应BMP部署而不用破坏对更多的CMP机制优化的破坏。一个简单的方法是将商业逻辑和持久化机制分离开来。在你的CMP类中执行商业逻辑,假如选择了CMP,它可以被单独部署。实现持久化的代码被写入到BMP类中,它继续自CMP类。在CMP的超类中保持了所有的商业逻辑,并在BMP子类中增加了数据库访问的代码。这样的结构如图1所示。
图1: 将CMP和BMP分离

这个模型听起来很轻易实现,但是事实上存在一些问题:
对执行类的继续是不可能的。
这样做意味着子类必须同时继续CMP超类和BMP超类。此外,BMP子类还必须继续它的直接的CMP执行。这导致了多重的类的继续,就象在图2中所示的那样,而这样的继续是不被Java程序所答应的。
图2:Java所不支持的多重继续

没有简单的方法支持改变的持久化执行
这可能是很有用的,例如,可能要执行不同的数据库提供商或是不同类型的数据库(例如关系型、对象型或其它类型)所特定的数据库定义代码。
要解决这些问题,你可以对目前的模型作一些改变。对所有BMP类抽象出一个辅助类以执行基本的持久化代码。这样的辅助类被称之为数据访问对象(DAO)。你可以通过对DAO接口的实现产生多个DAO子类,然后在实际应用时选择合适的DAO子类进行实例化。这就如图3所求。有许多方法可以选择合适的DAO子类进行实例化,例如,通过读取环境变量或是判定DB类型。
图3:代表并答应改变的DAO执行

使用这个模型,CMP执行和包含这个执行的DAO可以很方便地被继续;除了BMP类外,所有的东西都可以被执行。因为这些BMP类包含了一些具有代表性的代码的框架,对于第一个entity bean它看上去都是差不多的,你可以很轻易地将一个bean拷贝到另一个而只需作很小的改动。而最终,你甚至可以使用工具来自动完成这项工作。
尽管你可能需要扩充一个entity bean以重新使用另一个entity bean所提供的逻辑,但是在EJB 1.1的说明书中不答应对一个继续自home接口的entity类型进行扩充。对一个调用的定位及建立在理论上总是被认为是一种远程调用。虽然在很多时候你可能需要使用这种子类型(例如,将它们作为一个factory方法),但是不幸地是,这样的子类型并没有被提供。这阻碍了对许多遵守EJB 1.1说明书的执行EJB的有用的设计平台的使用。

三、在ejbStores中尽量减少对数据库的访问
在使用CMP时,bean完全不受ejbStore的控制,所有的优化工件都是由容器来完成的。容器所提供的CMP优化成了区别容器性能的主要指标之一。
然而在使用BMP来部署bean时,为缓冲区维持一个dirty标志是一种很有效的做法。对缓冲区的所有改变都会对dirty标志进行设置,ejbStore将会对这个标志进行检查。假如dirty标志未被设置,这意味着缓冲区没有被改变,ejbStore将不执行所有的开销巨大的对数据库的访问。这个决窍对于那些经常对数据库进行查询而不是作真正的改变的bean尤为有效。而这通常组成了一个应用程序中的绝大部分(例如,查找一个表)。
对于这种技术,有一点需要注重。因为dirty是为了数据库的访问而设立的,因此它对于BMP的代码会更适合,也就是说,它并不太适合在CMP代码中使用。当使用我们前面介绍的执行平台时,它既可以在BMP代码中进行设置也可以在DAO中进行设置。 因为DAO不会调用任何的商业逻辑,因此它不是设置dirty标志的最合适的地方,最好你还是在BMP代码中对这个标志进行设置。这可能会使得BMP代码变得更加复杂,因为你不能在商业逻辑中考虑对超类的授权。
完全从一种科学的观点来看,EJB的作者并不需要处理系统级的问题,包括对缓冲区的处理。但是不幸的是,使用BMP的EJB 1.1并不提供这种系统优化的选择,因此bean的作者还是不得不手工对dirty标志进行设置。

共2页: 上一页 1 [2] 下一页

上一篇:Red Hat虚拟化策略下一步从合作伙伴着手   下一篇:Linux系统中 两种替代“花生壳”的办法


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux系统中 两种替代“花生壳”的办法
·Linux系统下DHCP中继代理的实现方法
·使用简单的五个步骤 设置Web服务器集群
·介绍在Linux系统下安装Tomcat的方法
·Linux系统攻略 Samba服务器的搭建与配置
·UNIX的分支 服务器上的FreeBSD操作系统
·Linux系统下 Apache安装
·Samba服务器多系统用户共享目录设计方法
·使用Yum自动更新Linux系统服务器的方法
·Ubuntu 7.10 Linux上构建全功能的服务器
·手动配置Ubuntu Linux指定DNS服务器地址
·Fedora Core6下apache mysql perl开发平台
·DR配置:Linux Virtual Server负载均衡
·把SUSE Linux 10.0系统配置成代理服务器
·Linux系统攻略:Apache与Tomcat整合技巧
·Linux系统下Web服务器配置详细介绍
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux服务器ADSL下利用NAT实现上网共享
·RHEL5系统下配置YUM源的方法
·OpenSUSE系统下使用SAMBA建立文件服务
·Linux服务器维护 统计连接数查看外部IP
·Linux系统邮件服务器的搭建过程解析
·详细解析:在CentOS下安装配置VNC的过
·系统管理:基于Linux的负载均衡技术介
·SUSE Linux系统下用SAMBA建立文件服务
·Linux系统服务器的存储空间巧妙管理
·RedHat Linux 5系统下使用远程桌面环境
·Linux系统下搭建SNORT入侵检测系统
·将Linux设置成Cisco路由器的日志服务器
  阅读排行
·在Linux世界驰骋系列之三——结构和算
·Linux世界驰骋四——文件系统和设备管
·邮件系统的选型与架构专题(上篇)
·在Linux世界驰骋系列之二——Shell编程
·
·
Linux世界驰骋五——Linux常用实用工具
·深入OpenOffice.org之二应用XML文件格
·手把手教您配置Liunx目录服务器
·向左走向右走 当邮政业“遇上”Linux
·Linux系统可卸载内核模块完全指南(下
·邮件系统的选型与架构专题(下篇)
·图解红旗Linux 4.0桌面系统的安装(图
·Linux系统可卸载内核模块完全指南(中
·深度分析:Linux正在走出发展低潮
·深入探讨Linux与微软在桌面上的较量
网摘收藏: