发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA

[问题]关于create()有关的事务问题

2004-07-01 19:47
赞助商链接

开发部署环境为weblogic8.1 + Jbuilder 9
实现功能:在一个stateless session bean中调用一个CMP方式的Entity Bean
来向数据库中添加两条数据,如果这两条数据主键相同,那么回滚事务
SessionBean 和 EntityBean中的所有方法事务属性都是Required

SessionBean中代码如下,
其中home是EntityBean的LocalHome接口的实例,Product是EntityBean的Local接口

try {
Product product = home.create(new Integer(2));
} catch (Exception e) {
System.out.println(e.getMessage());
sessionContext.setRollbackOnly();
}
try {
Product product2 = home.create(new Integer(2));
} catch (Exception e) {
System.out.println(e.getMessage());
sessionContext.setRollbackOnly();
}

运行结果是服务器端抛出异常,是一个封装好的
javax.transaction.TransactionRollBackException
里面封装了一个weblogic.utils.RunTime......的异常,具体名字忘了
里面又封装了一个javax.ejb.DuplicateKeyException的异常
关键问题是我的上面的代码根本没有捕获到任何异常,所以两个
输出语句和事务回滚语句也就跟着失效了
异常可以在调用Sessionbean的客户端捕捉到,好像容器直接跳过
Sessionbean直接把异常抛给了上一层

察看数据库,SessionBean中的事务没有回滚,第二条(!!!)记录插入到了数据库表中

这个问题困扰了我很长时间,不知道应该如何实现呀?
曾经试过SessionSynchronization接口,在beforeCompletion方法中
加入sessionContext.setRollbackOnly(),但是还是没有效果,根本没有执行这个方法

各位大虾,向数据库表中添加记录的这种事务应该是非常常见的
那位高手能够告诉我这个问题应该如何解决呀?急!!!!!

赞助商链接

赞助商链接

返回顶部

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