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

面试题 相关文章推荐
一套Java笔试题
Aug 20 面试题
枚举和一组预处理的#define有什么不同
Sep 21 面试题
利用异或运算实现两个无符号数的加法运算
Dec 20 面试题
SQL Server面试题
Apr 04 面试题
常见的软件开发流程有哪些
Nov 14 面试题
介绍一下EJB的体系结构
Aug 01 面试题
DOM和JQuery对象有什么区别
Nov 11 面试题
为什么Runtime.exec(“ls”)没有任何输出?
Oct 03 面试题
Ejb技术面试题
Apr 29 面试题
Java如何支持I18N?
Oct 31 面试题
Unix如何在一行中运行多个命令
May 29 面试题
J2EE系统只能是基于web
Sep 08 面试题
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面试题附答案
2009/01/07 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
详解Javascript模板引擎mustache.js
2016/01/20 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
JS 实现分页打印功能
2018/05/16 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
python基础教程之缩进介绍
2014/08/29 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
python实现大文件分割与合并
2019/07/22 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
python kafka 多线程消费者&手动提交实例
2019/12/21 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
团队激励口号
2014/06/06 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
通知书大全
2015/04/27 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL