站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题EJB无状态会话的方法事务中,又采用了JDBC访问数据库,结果在JDBC读取DB发现该方法还没完成,容器已经提交事务了,why?

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

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


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

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

请问各位XDJM,这是什么原因,是EJB的原因,还是weblogic的问题,如何解决这个问题呢?


up


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


尽量在一个业务处理中只采用一种事务处理方式


xiaosongcc() ( ) 信誉:100 Blog 2006-08-24 16:07:00 得分: 0

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




session facade 模式是session bean里面 commit()提交后 就一起结束事务,在JDBC后你提交了没 你没运行怎么知道他持久化了?


路过,友情up...


你的entity bean的事务类型如果是CMT,那是没办法控制事务的



xiaosongcc() ( ) 信誉:100 Blog 2006-8-24 16:56:13 得分: 0
session facade 模式是session bean里面 commit()提交后 就一起结束事务,在JDBC后你提交了没 你没运行怎么知道他持久化了?
-------------------------------------------------------------------------
我在JDBC里查询啊,发现部分数据已经被改变了,这个改变肯定是由于sssion bean提交的。而且JDBC里操作又不是由容器控制的,JDBC在session bean方法提交前,它取得数据应该是没有改变的数据。






↑返回目录
前一篇: 紧急求助,weblogic报错“超出系统资源”,不明原因,击溃服务器——在线等!
后一篇: 调用动态库问题