发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 云架构 框架 开发教程 SOA 大数据 扩展性 并发编程 EDA 分布式 函数编程
1 2 下一页 Go 2

EJB事务的讨论

2009-08-26 17:15
赞助商链接

一个容器管理事务的无状态会话Bean,事务属性为Required
业务方法线程sleep了15 s,应用服务器交易超时为10s,

public void insertData() {
try {
Connection connection = connection();
Statement stmt = connection.createStatement();
String upd = "insert into student(stuid,stu_name) values('98','sdsd')";
try{
Thread.sleep(15*1000);
}catch(Exception e){
e.printStackTrace();
}
stmt.execute(upd);

} catch (Exception e) {
e.printStackTrace();
}finally{

System.out.println("rollback only? "+ctx.getRollbackOnly());
}
}

按道理这个事务会交易超时导致回滚,但是实际却不是这样的,在weblogic9上,交易却没回滚,数据库记录还是插入了,SUN的应用服务器也是这样,当然都调了事务超时时间为10s,百思不得其解

2009-08-26 17:18

在EJB中不要直接使用线程。特别是事务,因为事务也是依靠线程实现的。
你使用线程,破坏了EJB底层线程调用策略,所以出现不正常现象。

2009-08-26 17:51

老大,只是用了Thread.sleep()而已。这当然不是生产环境里的真实应用,就是为了模拟事务超时啊,看应用服务器的这个事务超时配置起不起作用啊,事务超时,事务管理器应该回滚这个事务的

2009-08-26 18:26

你为了模拟,可以使用throw new Exception就可以了。

另外取决于数据源JNDI的配置。需要使用服务器的数据源JNDI。

2009-08-26 18:55

老大,throw new Exception是模拟异常引起的事务回滚,按EJB规范,系统异常才能引起事务回滚,我需要模拟,事务执行时间过长引起的事务超时导致事务回滚的,服务器数据源和直接获取数据库连接有什么差别吗,我测了,效果是一样的

2Go 1 2 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com