提高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...

面试题 相关文章推荐
String是最基本的数据类型吗?
Jun 13 面试题
介绍一下Java中的Class类
Apr 10 面试题
C,C++的几个面试题小集
Jul 13 面试题
经典C++面试题一
Nov 06 面试题
.net笔试题
Mar 03 面试题
什么是.net
Aug 03 面试题
网络体系结构及协议的定义
Mar 13 面试题
北京鼎普科技股份有限公司软件测试面试题
Apr 07 面试题
Python是如何进行类型转换的
Jun 09 面试题
同步和异步有何异同,在什么情况下分别使用他们?
Dec 28 面试题
Overload和Override的区别
Sep 02 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
Nov 30 面试题
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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
mysql limit查询优化分析
2008/11/12 PHP
php session处理的定制
2009/03/16 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
PHP实现搜索相似图片
2015/09/22 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
Jquery性能优化详解
2014/05/15 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
Python子类继承父类构造函数详解
2019/02/19 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
植树节口号
2014/06/21 职场文书
工人先进事迹材料
2014/12/26 职场文书
公司车辆管理制度
2015/08/04 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA