提高EJB性能都有哪些技巧


Posted in 面试题 onMarch 25, 2012
1.用一个Session Bean封装多个Entity Bean,将原来的多个Entity Bean的Remote调用和Local调用封装在一个Session Bean中。所以建立一个ServerFacade,它为多个对象提供统一获取EJB Home和获取对象的接口。ServerFacade为程序要用到的所有EJB的home handle提供缓存,提高访问JNDI Name的时间,达到提高访问效率的目的。以后查找JNDI Name的方法都应写在接口里,调用时直接从接口调用。

2.在EJB的Remote接口中使用粗粒度的方法,不推荐使用细粒度方法。

3.如果EJB的Remote接口获取成功,应不再使用Remote接口,而是将Remote接口构造成一个一般的Java对象,通过调用一般的JAVA对象的方法来达到减少对网络的访问。

4.如果你部署EJB客户端和EJB在相同的JVM上,建设使用EJB2.0规范的Local接口代替Remote接口。

5.用”transient”关键字声明不必要的数据变量,替代以前的”public”、”private”等,避免不必要的数据变量占用网络资源。示例:

1
2
3
4
5
6
7

public class DemoCMP implements EntityBean {
transient EntityContext entCtx;
transient InitialContext initCtx;
public String id;
public String description;

}

6.在ejb-jar.XML部署文件中,对Session Bean中非事务的方法,将trans-attribute属性赋为”NotSupported”或”Never”

1
2
3
4
5
6
7
8
9
10
11
12






abookesessionBean
*

NotSupported




7. 设置事务的超时时间,在JBoss中,要修改${jboss.home}/server/${jboss.configuration}/conf/jboss-service.xml ,如下所示:

1
2
3
4
5
6
7
8



name=”jboss:service=TransactionManager”>
300




8.当事务锁定数据库的行记录时,事务应跨越可能的最小的时间。

9.调整EJB 服务器的各种参数,如线程数、EJB池大小、连接池参数等。以在JBoss修改连接池参数为示例,进行说明。如果JBoss和MySQL相连,配置${jboss.home}/server/${jboss.configuration}/deploy/mysql-service.xml,来修改连接池参数,包括MinSize、MaxSize、BlockingTimeoutMillis、IdleTimeoutMinutes、 Criteria等,各参数的含义如下所示:

i.MinSize :连接池保持的最小连接数。

ii. MaxSize :连接池保持的最大连接数。

iii. BlockingTimeoutMillis :抛出异常前最大的等待连接时间。

iv. IdleTimeoutMinutes :关闭连接前连接空闲的最大时间。

v. Criteria :有ByContainerAndApplication、ByContainer、ByApplication和ByNothing等值。

下面是一个例子:

1
2
3
4
5
6
7
8
9
10
11



name=”jboss.jca:service=LocalTxPool,name=MySqlDS”>
0
50
5000
15
ByContainer



10.对于数据库事务,应选择较低成本的事务等级,避免造成坏数据。递增成本的事务等级包括:

TRANSACTION_READ_UNCOMMITED,
TRANSACTION_READ_COMMITED,
TRANSACTION_REPEATABLE_READ,
TRANSACTION_SERIALIZABLE

Tags in this post...

面试题 相关文章推荐
编写strcpy函数
Jun 24 面试题
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
Apr 28 面试题
如何在.net Winform里面显示PDF文档
Sep 11 面试题
关于VPN
Jun 10 面试题
几个Linux面试题笔试题
Aug 01 面试题
Linux面试经常问的文件系统操作命令
Oct 04 面试题
Python里面search()和match()的区别
Sep 21 面试题
介绍一下Mysql的存储引擎
Feb 12 面试题
MVC的各个部分都有那些技术来实现?如何实现?
Apr 21 面试题
九州传奇上机题
Jul 10 面试题
程序员跳槽必看面试题总结
Jun 28 面试题
WSDL的操作类型主要有几种
Jul 19 面试题
EJB实例的生命周期
Oct 28 #面试题
EJB timer的种类
Oct 28 #面试题
EJB的激活机制
Oct 25 #面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
Jul 14 #面试题
EJB的几种类型
Aug 15 #面试题
介绍一下EJB的体系结构
Aug 01 #面试题
客服端调用EJB对象的几个基本步骤
Jan 15 #面试题
You might like
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
python实现百度关键词排名查询
2014/03/30 Python
python修改注册表终止360进程实例
2014/10/13 Python
Python中正则表达式的详细教程
2015/04/30 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
python中如何使用insert函数
2020/01/09 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
思想专业自荐信范文
2013/12/25 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
小学教研工作总结2015
2015/05/13 职场文书
债务追讨律师函
2015/06/24 职场文书
go设置多个GOPATH的方式
2021/05/05 Golang
Redis IP地址的绑定的实现
2021/05/08 Redis
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server