当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

<b>晋升EJB性能的12招</b>[Java编程]

赞助商链接



  本文“<b>晋升EJB性能的12招</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

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.

4. 操纵会话 bean的包从一个实体 bean中返回多行数据

普通,在我们的利用程序中一个bean表示数据库的一个逻辑行.实体 bean的本地接口中定义了一个或多个finder办法.每个办法用于查找一个实体对象或多个实体对象的调集. 在客户端通过调用实体bean的finder办法来获得实体对象的调集. 然后客户端从该调集顺次获得数据.假如是远程客户端,每次远历程调用获得一行数据,资源开销太大了.我们可以采取一个在服务端的会话bean把全部的行打包,作为一个实体本地对象的finder办法的返回后果.代码段4 显示了一个会话 bean对象若何通过一次调用把多行数据的向量/调集发送到客户端.该办法可用在当GUI数据(如列表框或电子表格的数据)保持静态不变的情形.通过扩大这种办法也可以支持客户端的数据改正.

5.采取会话 bean来处理大量的数据库操作

实体bean适于一次处理数据库的一个逻辑行,但是在数据库的批量操作中会引发性能方面的很多额外开销.比方,一个返回1000行的实体bean的finder办法需求履行1001次数据库的select操作,招致性能急剧下降.假如用会话 bean来处理数据库的批量操作可以明显的提高性能(见代码段5),因为它削减了调用数据库的次数.

6.尽大概采取CMP(container-managed persistence)容器管理bean替换 BMP(bean-managed persistence bean)

在BMP方法中, 编写bean的人员必须自己在bean的办法顶用JDBC,SQLJ等供应数据库拜候代码.而在CMP方法中,由容器在EJB布置是自动生成数据库拜候代码.编写bean的人员只需在布置描写器中指定要自动生成拜候代码的实例的字段清单. CMP的长处是使bean类能独立于数据源.别的的好处是利用服务器的厂家为CMP生成优化代码,以晋升数据库拜候性能.

7.得当的利用实体bean

在某些特定的场所下合适利用实体bean.他们实用于只从数据库中取出少量数据行供多个用户同时拜候.比方,在Person中,当个人登录系统后,他的记录可以缓存起来并让多个EJB拜候,如SecurityBean, BankAccountBean等等.因此Person可以实体bean的情势存在.实体bean还实用于那些数据行需求在多个事件中被频繁更新的场所.

由于性能方面的额外开销,实体bean 不符合大量数据行在数据库处理中的选取、插入或更新.这种情形下可考虑采取会话 bean,别的也可以在实体 bean中计划粗线优化的数据库拜候操作.

8.采获得当的断绝级别

断绝层次是指多个交替举行的事件处理之间避免彼此干扰的程度.TRANSACTION_SERIALIZABLE是最高断绝层次.采取这个断绝级别会使整个历程相当迟钝,因为全部的事件处理(既就是简单的读操作)必须排成一队顺次履行.履行的办法获得独占写入数据的锁定,避免别的事件处理对数据举行读取、更新或插入行动,直到该事件成功完成并提交工作.在TRANSACTION_REPEATABLE_READ级别,事件处理无法改正那些正在被别的事件处理读取的数据.写入锁定用来避免别的事件处理对数据的改正.采取 TRANSACTION_READ_COMMITED 级别时,当前事件不能其他事件操作数据的中间状况.因为它无法对正在被别的事件处理改正的数据加上写入锁定,所以也就无法读取改正一半的数据了.TRANSACTION_READ_UNCOM- MITED是最低的断绝级别.在这种级别中Bean的办法可以读取操作数据的中间状况,但是时他们无法得知能否增添了新的记录.

断绝级别越高性能上开销也越大.普通情形下,较低的断绝级别答应更多的并发操作 ,代价是需求越发复杂的逻辑去处理潜在的数据不一致性的问题.一条有效的原则是在该企业信息系统可承受的性能范围内采取尽大概高的断绝级别.


  以上是“<b>晋升EJB性能的12招</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .