EJB的事务管理

liwanlin 2002-09-09 05:58:02
我在用WEBLOGIC开发EJB时,Session Bean的业务方法中需要对Entity Bean进行多次操作,如:增加记录、更改记录等。
为保证这些操作同时成功,我在Session Bean的业务方法中使用了事务,并将对应Entity Bean的所有方法(*)事务属性设为Mandatory。

可是结果呢,我后面的更改记录出错,对事务进行成功回滚后,前面插入的记录竟然还在?

Session Bean里的事务我用容器管理和Bean管理都试过了,
不知是什么原因,请帮忙分析一下。
...全文
148 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhlwl 2002-09-23
  • 打赏
  • 举报
回复
实体Bean只能用容器管理事务
Session EJB两种都可以。
但是用Weblogic必须用Tx的数据源。
upc_chenli 2002-09-18
  • 打赏
  • 举报
回复
up
upc_chenli 2002-09-11
  • 打赏
  • 举报
回复
具体怎么声明呢?
sharedata 2002-09-11
  • 打赏
  • 举报
回复
我的MSN:ejbstart@hotmail.com

搞J2EE和模式的朋友多交流。有些忙,如不周的地方见谅!
sharedata 2002-09-11
  • 打赏
  • 举报
回复
worldheart(时讯技术) :

怎么“deploy descriptor里面要声明!!”呢?详细的说说吧!
Lovejava888 2002-09-11
  • 打赏
  • 举报
回复
EntityBean的Transaction是由Container維護的,他是以方法為單位的.
具體的將,EntityBean的多個方法分別執行在自己的Transcation下,如果
某個方法執行過程中出了問題,那也智能回退到該方法執行前的狀態,而
不會影響其他方法執行產生的結果,因此如果你在SessionBean的某個方法
中調用了EntityBean 的多個方法(由不同的Ben instance提供),如果其中
某個方法發生了錯誤,你因該在你的SessionBean的方法中RollBack
具體的我沒有做過,只是喜歡Java,看過一些EJB的資料,如果我的理解錯了
還請包含!!!!!
worldheart 2002-09-11
  • 打赏
  • 举报
回复
其实 ,这个问题可以用session facade模式来求解。你们没有用过吗,比如,一次需要操作很多 entity bean,为什么不放在一个方法里面。但在
deploy descriptor里面要声明!!

要不,启动一个事务。但一般不这样做 。
upc_chenli 2002-09-11
  • 打赏
  • 举报
回复
up
liwanlin 2002-09-10
  • 打赏
  • 举报
回复
to yyt99(疯度翩翩)
你说:
--解决的办法:在每次对数据库有操作前,都重新New一个Entity beans的实
--例,这样就可以保证每次的操作都会及时的反映到数据库中。

我的问题并不是说操作不能及时反映到数据库中,而是事务不能回滚。
比如我用实体Bean的本地Home接口create两次(在一个事务中),前面的create成功,后面的create失败,于是我将事务回滚,可是前面的的create竟然还是写到数据库里了!

我用JTA管理Session Bean里的事务时还跟踪了事务的状态,发现只要我一调用实体Bean的create方法,事务马上不见了!STATUS_NO_TRANSACTION!

wjmmml 2002-09-10
  • 打赏
  • 举报
回复
假如entity bean的操作出错,你回滚session bean中调用entity bean的方法,难道有问题吗?
yyt99 2002-09-10
  • 打赏
  • 举报
回复
刚好,我前段时间也遇到了。

原因:直接点就是你每次对数据库操作用的都是同一个实例,这样Entity beans是不能及时更新数据库的。好好看看Entity Beans的介绍吧。

解决的办法:在每次对数据库有操作前,都重新New一个Entity beans的实例,这样就可以保证每次的操作都会及时的反映到数据库中。

BTW: 每个人的情况有可能不同,希望能帮你。
upc_chenli 2002-09-10
  • 打赏
  • 举报
回复
up

System-level exceptions usually require the transaction to be rolled back. Often the container managing the bean does the rollback. Sometimes the client must roll back the transaction, though, especially if transactions are bean-managed.

When an application-level exception occurs, the enterprise bean instance doesn't automatically roll back the client's transaction. The client now has the knowledge and the opportunity to evaluate the error message, take the necessary steps to correct the situation, and recover the transaction. Or the client can abort the transaction.
upc_chenli 2002-09-09
  • 打赏
  • 举报
回复
关注,我前端时间也遇到这个问题,一直都没有解决。问的问题到最后都没有结果。

67,512

社区成员

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

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