近日就BES v 6.5 和WebLogic v 8.1 SP6 作了对比测试
1. Session Bean 比较
Session Bean业务方法如下:
public double getCircArea(double r) {
return r*r*3.1415926;
}
public Vector getRandVector(int a) {
Vector v=new Vector();
for(int i=0;i<a;i++){
v.add(new Double(java.lang.Math.random()));
}
return v;
}
客户端调用方法如下:
double d=client.getCircArea(1000*java.lang.Math.random());
Vector v= client.getRandVector(1000);
联系测试3次测试结果如下:
WebLogic 8.1 With JRockit
9.925 |
11.17 |
11.17 |
平均值 |
78 |
63 |
63 |
最大值 |
0 |
0 |
0 |
最小值 |
10.7666 |
22.6813 |
22.6813 |
标准方差 |
WebLogic 8.1 With Sun JDK
12.185 |
11.875 |
10.94 |
平均值 |
47 |
63 |
31 |
最大值 |
0 |
0 |
0 |
最小值 |
10.4035 |
10.0611 |
9.26366 |
标准方差 |
BES v6.5
32.585 |
30.245 |
30.39 |
平均值 |
250 |
156 |
140 |
最大值 |
15 |
15 |
15 |
最小值 |
49.2021 |
26.3249 |
25.7978 |
标准方差 |
2. Session BeanWith JDBC 比较
Session Bean中通过JDBC调用下列存储过程
FUNCTION charge(pID IN NUMBER, pValue IN NUMBER,pValueOut out Number ) RETURN Integer IS
BEGIN
UPDATE tdemo_stock
SET stock = stock - pValue
WHERE tdemo_stock.id = pID RETURNING stock INTO pValueOut;
INSERT INTO tdemo_charge
(id, VALUE)
VALUES
(seq_stock.NEXTVAL, pValue);
COMMIT;
RETURN 0;
END;
public int charge(int value) {
int nRlt = 0;
int nValue = 0;
Connection cnn = null;
CallableStatement call = null;
try {
cnn = DBConnectionFactory.getConnection();
call = cnn.prepareCall(
"{? = call DEMO_STOCK.charge(?,?,?)}");
call.registerOutParameter(1, Types.INTEGER);
call.registerOutParameter(4, Types.NUMERIC);
call.setLong(2, 571);
call.setLong(3, value);
call.execute();
nRlt = call.getInt(1);
nValue = call.getInt(4);
System.out.print("nRlt=" + nRlt);
System.out.println("nValue=" + nValue);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (call !=null)
call.close();
if (cnn !=null)
cnn.close();
} catch (SQLException ex1) {
}
return nValue;
}
}
联系测试3次测试结果如下:
注:由于首次时间耗时比例大,故去处了首次
WebLogic 8.1 With JRockit
16.2513 |
15.9397 |
15.9447 |
平均值 |
32 |
31 |
32 |
最大值 |
0 |
0 |
0 |
最小值 |
9.45437 |
6.32846 |
8.58786 |
标准方差 |
BES v6.5
18.8392 |
17.9799 |
17.8945 |
平均值 |
78 |
47 |
78 |
最大值 |
0 |
0 |
0 |
最小值 |
11.1485 |
9.25296 |
10.5468 |
标准方差 |
3. Session BeanWith CMP 比较
Session Bean中通过CMP方式访问数据库
public int charge_cmp(int value) {
long nValue=0;
try {
TdemoStock stock = stockHome.findByPrimaryKey(new Integer(571));
stock.setStock(stock.getStock()-value);
nValue=stock.getStock();
TdemoCharge charge=chargeHome.create(value);
System.out.println("nValue=" + nValue);
}
catch (FinderException ex ){
System.out.println("FinderException ");
}
catch (CreateException ex){
if (sessionContext.getRollbackOnly()==false)
this.sessionContext.setRollbackOnly();
System.out.println("CreateException call setRollbackOnly()");
ex.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}
return 0;
}
WebLogic 8.1 With JRockit
19.9497 |
19.7839 |
19.8643 |
平均值 |
78 |
78 |
78 |
最大值 |
0 |
0 |
0 |
最小值 |
9.9338 |
10.6559 |
10.3483 |
标准方差 |
BES_v65
30.5477 |
31.0151 |
31.0101 |
平均值 |
719 |
672 |
703 |
最大值 |
0 |
15 |
15 |
最小值 |
70.8858 |
66.5061 |
69.3822 |
标准方差 |
4. 综合比较
|
|
type |
|
CMP消耗增加% |
|
|
JDBC |
CMP |
|
vendor |
WLS |
16.04523 |
19.866 |
19.23271501 |
|
BES |
18.23786 |
30.85762 |
40.89675388 |
BES相对WLS耗时% |
12.02241 |
35.62045 |
|
5.结论
综合评价下列WLS的性能相对BES要好一些,从数据中可以看出。BES相对WLS:JDBC模式耗时要多12%,CMP模式要多35%
另外就CMP模式和JDBC模式的对比情况来看。
在WLS容器中 CMP要多耗时19%,在BES容器中CMP要多耗时40%
期待对EJB3中的JPA进行测试,看看JPA相对JDBC能够多耗时多少
所以如果业务非常频繁,用JDBC比较合适