下载本文示例代码
Enterprise JavaBeans(EJB)是一种被广泛采用的基于J2EE平台上的服务端组件体系架构,它可以用来快速开发灵活的、可重用的、可移植到各个中间件平台上的以任务为关键的企业级应用。同时,由于采用开放的协作制定规范,EJB架构能保护IT投资,减少对供应商的依赖性,避免局限在某一个供应商的技术实现上。其中,性能是EJB应用程序成败的关键。 为了开发高性能的企业级应用,我们必须意识到良好的设计和编程规范是性能提升的基础。理想状态是在开发前我们必须先行掌握优秀的编程规范。而到了开发后期,再将重点转移到整个应用程序性能的调整:包括Web服务器, 应用服务器业以及数据库。策略是找出脆弱的一环,然后进行改进。为达到最佳性能,本文将讨论一些通用的技巧,帮助我们设计和实现一个高性能的基于EJB的企业级应用。 EJB的开发 我们前八个EJB性能方面的技巧是关于在应用系统设计和开发阶段的。因为在服务器环境下,多数需要优化的代码,更多地是在布署阶段之前。以便在问题不可收拾前把问题找出并解决。 1. 设计粗粒度(coarse-grained) 的EJB 远程(remote) 接口 由于每个通过远程或本地(home)接口调用EJB的方法都属于远程调用,对于大多数细粒度(fine-grained)的对象交互来说调用中间件的开销大得简直让人无法承受。为了避免这类问题, 每个EJB应代表一个独立的业务对象,有独立的特性和生命周期。具有依赖性的对象决不能用EJB表示。相反,它应该作为一个EJB内部的Java类来实现。例如,一张购物单可用一个EJB来实现,而每张购物单上的子项就不应该用EJB,可以采用helper类的形式实现。 2. 设计粗粒度的EJB远程接口方法 正如上面所提到的,每个客户端对EJB的调用都是远程调用,另外还要进行一些检查操作,比如存取控制,事务处理以及激活/休眠等。 因此,EJB调用比远程调用要慢上好几倍,与调用本地方法的时间相差就更大了。减少方法的调用次数可以提高性能。设计粗线优化的方法中的一个技巧,就是在单个方法调用过程中尽量增加数据来回传输的数量,把多个方法合并以减少方法的个数。比如,代码段一显示的是一个设计欠佳的远程接口,因为客户端必须多次调用来取得Person的数据。相比之下代码段二改进了性能表现,因为它在一次方法调用中使用了粗粒度的方法,方法的个数变少了,从而减少了调用次数(尽管这些方法传输的数据更多)。 3. 减少JNDI 查找次数 由于各种应用服务器的命名和目录服务在具体实现方法上的差异,JNDI 的查找过程可能会比较费时。 (注:JNDI对EJB资源,比如数据源、bean引用,乃至环境项(environment entry)的查找可能花费巨大,且避免重复查找并非易事。)某些应用服务器在不同的机器上采用单独的进程来实现目录信息。在这种情况下缓存home handle是一个提升性能的好办法。(见代码段3). facade是一个对象,它为多个对象提供一个的统一接口。一个服务端的facade能简化处理,使得客户端不需了解每个服务器端的EJB(见图一)。在这种方式下所有客户端对服务器的调用都经由对象ServerFacade。如代码段3所示,ServerFacade是一个会话 EJB,缓存了所有需要的EJB的home handle.而客户也可以在客户端用singleton对象来缓存ServerFacade的home handle。
图 1.客户端通过ServerFacade访问服务器。ServerFacade是一个会话 EJB,缓存了所有需要的EJB的home handle.共3页。 1 2 3 :
Enterprise JavaBeans(EJB)是一种被广泛采用的基于J2EE平台上的服务端组件体系架构,它可以用来快速开发灵活的、可重用的、可移植到各个中间件平台上的以任务为关键的企业级应用。同时,由于采用开放的协作制定规范,EJB架构能保护IT投资,减少对供应商的依赖性,避免局限在某一个供应商的技术实现上。其中,性能是EJB应用程序成败的关键。 为了开发高性能的企业级应用,我们必须意识到良好的设计和编程规范是性能提升的基础。理想状态是在开发前我们必须先行掌握优秀的编程规范。而到了开发后期,再将重点转移到整个应用程序性能的调整:包括Web服务器, 应用服务器业以及数据库。策略是找出脆弱的一环,然后进行改进。为达到最佳性能,本文将讨论一些通用的技巧,帮助我们设计和实现一个高性能的基于EJB的企业级应用。 EJB的开发 我们前八个EJB性能方面的技巧是关于在应用系统设计和开发阶段的。因为在服务器环境下,多数需要优化的代码,更多地是在布署阶段之前。以便在问题不可收拾前把问题找出并解决。 1. 设计粗粒度(coarse-grained) 的EJB 远程(remote) 接口 由于每个通过远程或本地(home)接口调用EJB的方法都属于远程调用,对于大多数细粒度(fine-grained)的对象交互来说调用中间件的开销大得简直让人无法承受。为了避免这类问题, 每个EJB应代表一个独立的业务对象,有独立的特性和生命周期。具有依赖性的对象决不能用EJB表示。相反,它应该作为一个EJB内部的Java类来实现。例如,一张购物单可用一个EJB来实现,而每张购物单上的子项就不应该用EJB,可以采用helper类的形式实现。 2. 设计粗粒度的EJB远程接口方法 正如上面所提到的,每个客户端对EJB的调用都是远程调用,另外还要进行一些检查操作,比如存取控制,事务处理以及激活/休眠等。 因此,EJB调用比远程调用要慢上好几倍,与调用本地方法的时间相差就更大了。减少方法的调用次数可以提高性能。设计粗线优化的方法中的一个技巧,就是在单个方法调用过程中尽量增加数据来回传输的数量,把多个方法合并以减少方法的个数。比如,代码段一显示的是一个设计欠佳的远程接口,因为客户端必须多次调用来取得Person的数据。相比之下代码段二改进了性能表现,因为它在一次方法调用中使用了粗粒度的方法,方法的个数变少了,从而减少了调用次数(尽管这些方法传输的数据更多)。 3. 减少JNDI 查找次数 由于各种应用服务器的命名和目录服务在具体实现方法上的差异,JNDI 的查找过程可能会比较费时。 (注:JNDI对EJB资源,比如数据源、bean引用,乃至环境项(environment entry)的查找可能花费巨大,且避免重复查找并非易事。)某些应用服务器在不同的机器上采用单独的进程来实现目录信息。在这种情况下缓存home handle是一个提升性能的好办法。(见代码段3). facade是一个对象,它为多个对象提供一个的统一接口。一个服务端的facade能简化处理,使得客户端不需了解每个服务器端的EJB(见图一)。在这种方式下所有客户端对服务器的调用都经由对象ServerFacade。如代码段3所示,ServerFacade是一个会话 EJB,缓存了所有需要的EJB的home handle.而客户也可以在客户端用singleton对象来缓存ServerFacade的home handle。
图 1.客户端通过ServerFacade访问服务器。ServerFacade是一个会话 EJB,缓存了所有需要的EJB的home handle.共3页。 1 2 3 :
下载本文示例代码
提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招提升EJB性能的12招
阅读(127) | 评论(0) | 转发(0) |