Transaction 事务问题,望搭救
我的session bean有个比较复杂的方法,调用另外一个类来完成,
是从几个表提取数据,处理以后再插入另外一个表的事务,用jdbc直接进行,用时大概几十秒到一分钟,
connection 从weblogic的TxDS里获得,当服务器运行了一段时间运行该方法就可能会出错,错误如下:
java.sql.SQLException: Transaction 18:2b66d50d7f28edb9 not active anymore. tx st
atus = Marked rollback. [Reason=weblogic.transaction.internal.TimedOutException:
Transaction timed out after 32 seconds 18:2b66d50d7f28edb9]
请教这是什么问题,怎解决?
该方法的container transaction是required,是不是问题所在呢?
问题点数:0、回复次数:4Top
1 楼inprise_lyj(只愛一點點)回复于 2003-09-04 14:17:19 得分 0
就是该事务是有一定的时间限制的
如果超过就会回滚
你处理要用一分钟,可能会超时Top
2 楼jkit(不再灌水)回复于 2003-09-04 14:33:15 得分 0
在weblogic的console里面把time out时间设长点即可。Top
3 楼chliang(拉西)回复于 2003-09-04 15:55:04 得分 0
找不到啊,在那里啊?Top
4 楼netcobol(J2EEVSNET)回复于 2003-09-05 19:47:19 得分 0
该方法的container transaction是required,是不是问题所在呢?
在这种模式下,你不能编写事务
这由容器管理
代码如下
try{
.........//多表操作
}catch(Exception e){
ctx.rollbackOnly()
}即可
如果是bean管理
代码如下
Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
ctx = new InitialContext(h);
Usertransction tu = (transctionUser )ctx.lookup("javax.transction.UserTrasction");
try{
tu.begin();
.........//多表操作
tu.commit();
}catch(Exception e){
tu.rollback();
}
我测试过了,运行很好!!Top




