提升EJB性能的12招 - 编程入门网
客户端从该集合依次取得数据。如果是远程客户端,每次远过程调用取得一行数据,资源开销太大了。我们可以采用一个在服务端的会话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的方法可以读取操作数据的中间状态,但是时他们无法得知是否增加了新的记录。 隔离级别越高性能上开销也越大。通常情况下,较低的隔离级别允许更多的并发操作 ,代价是需要更加复杂的逻辑去处理潜在的数据不一致性的问题。一条有用的准则是在该企业信息系统可接受的性能范围内采用尽可能高的隔离级别。 提升EJB性能的12招(2)时间:2010-12-18设计和开发后期 在一个企业级应用的开发后期阶段我们必须关注与性能相关的部分对整个系统进行调整。余下的4点就是针对工程的这个阶段。 9.模拟实际运行环境进行调整 这里的策略是查看整个系统,包括Web服务器,应用服务器和数据库服务器。可以考虑执行以下任务: 运行整个应用程序 使用厂家推荐的版本和补丁 模拟实际运行的数据 使用实际运行的资源(比如设备) 利用负载测试工具模拟用户负载 10 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |