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

面试题 相关文章推荐
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
Jan 07 面试题
在什么时候需要使用"常引用"
Dec 31 面试题
SQL Server提供的3种恢复模型都是什么? 有什么区别?
May 13 面试题
一道SQL存储过程面试题
Oct 07 面试题
武汉英思工程科技有限公司–ORACLE面试测试题目
Apr 30 面试题
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
Jun 07 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
Jul 12 面试题
是否可以从一个static方法内部发出对非static方法的调用?
Aug 18 面试题
静态变量和实例变量的区别
Jul 07 面试题
与UNIX有关的几个名词
Sep 17 面试题
WSDL的操作类型主要有几种
Jul 19 面试题
Java面试题冲刺第十七天--基础篇3
Aug 07 面试题
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
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
mysql数据库差异比较的PHP代码
2012/02/05 PHP
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
js实现拖拽效果
2015/02/12 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
[00:35]可解锁地面特效
2018/12/20 DOTA
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
python正则表达式中的括号匹配问题
2014/12/14 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
Python中collections模块的基本使用教程
2018/12/07 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
python远程邮件控制电脑升级版
2019/05/23 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
Python中Selenium模块的使用详解
2020/10/09 Python
精伦电子Java笔试题
2013/01/16 面试题
退税申请报告怎么写
2015/05/18 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
浅谈JavaScript作用域
2021/12/06 Javascript
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
Python数据结构之队列详解
2022/03/21 Python
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏