EJB无状态会话的方法事务中,又采用了JDBC访问数据库,结果在JDBC读取DB发现该方法还没完成,容器已经提交事务了,why?

strawren 2006-08-24 02:06:02
EJB采用的容器是weblogic,JDBC采用的数据源也是由weblogic提供的,在EJB的一个事务方法里(该方法还没有结束),又通过JDBC方式访问数据库,结果发现JDBC以上的修改数据库的代码(EJB方式访问DB)已经被持久化到数据库中了。

这样的话,就无法保证一个完整的事务了,当EJB方法结束时要回滚数据时,就完全有可能不能完整回滚数据。

请问各位XDJM,这是什么原因,是EJB的原因,还是weblogic的问题,如何解决这个问题呢?
...全文
210 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
strawren 2006-08-25
  • 打赏
  • 举报
回复
xiaosongcc() ( ) 信誉:100 Blog 2006-8-24 16:56:13 得分: 0
session facade 模式是session bean里面 commit()提交后 就一起结束事务,在JDBC后你提交了没 你没运行怎么知道他持久化了?
-------------------------------------------------------------------------
我在JDBC里查询啊,发现部分数据已经被改变了,这个改变肯定是由于sssion bean提交的。而且JDBC里操作又不是由容器控制的,JDBC在session bean方法提交前,它取得数据应该是没有改变的数据。



killme2008 2006-08-24
  • 打赏
  • 举报
回复
你的entity bean的事务类型如果是CMT,那是没办法控制事务的
zhmt 2006-08-24
  • 打赏
  • 举报
回复
路过,友情up...
xiaosongcc 2006-08-24
  • 打赏
  • 举报
回复
session facade 模式是session bean里面 commit()提交后 就一起结束事务,在JDBC后你提交了没 你没运行怎么知道他持久化了?
strawren 2006-08-24
  • 打赏
  • 举报
回复
xiaosongcc() ( ) 信誉:100 Blog 2006-08-24 16:07:00 得分: 0

你说的 :结果发现JDBC以上的修改数据库的代码(EJB方式访问DB)已经被持久化到数据库中了。
这句话是说明你用到entity bean了吧,楼主注意 entity bean管理事务 是CMT方式 不允许你控制事务 在SB 和MDB 可以BMT进行人工干预事务。祝问题早解决
----------------------------------------------------
是通过entity bean修改数据库的,但是通过会话bean的方法由容器来控制整个事务的。

lydong 2006-08-24
  • 打赏
  • 举报
回复
尽量在一个业务处理中只采用一种事务处理方式
xiaosongcc 2006-08-24
  • 打赏
  • 举报
回复
你说的 :结果发现JDBC以上的修改数据库的代码(EJB方式访问DB)已经被持久化到数据库中了。
这句话是说明你用到entity bean了吧,楼主注意 entity bean管理事务 是CMT方式 不允许你控制事务 在SB 和MDB 可以BMT进行人工干预事务。祝问题早解决
bluesky23 2006-08-24
  • 打赏
  • 举报
回复
up

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧