EJB 事务问题 请教高手,项目正急,在线等~~~~~~~~~~~~~~~~~

awpking 2003-08-08 09:44:40
现在有实体bean A ,实体bean B,实体bean C 和会话bean D,采用的都是容器管理事务,事务类型是required.

实体bean A,实体bean B和会话bean D 是打在一个jar包里面的,实体bean C是打在另外一个jar包里面的.
我现在在会话bean D 里面的add()调用同一个包里面的实体bean A和实体bean B 的create 方法 新增两个记录.同时在add()方法的开头加上sessionContext.setRollbackOnly();设置回滚点,在catch里面加上sessionContext.getRollbackOnly();进行回滚,经测试,实体bean A和实体bean B任意一个出错,事务都可以回滚.
我现在的问题是,我在会话bean D的add()面在加上另外一个包里面的实体bean C 的create方法,再新增一条记录.这时候运行的时候就会有异常而且事务也不能回滚.weblogic的异常如下
[weblogic.transaction.internal.AppSetRollbackOnlyException]
weblogic.transaction.internal.AppSetRollbackOnlyException
<<no stack trace available>>
--------------- nested within: ------------------
weblogic.transaction.RollbackException: Unknown reason - with nested exception:
[weblogic.transaction.internal.AppSetRollbackOnlyException]
<<no stack trace available>>

难道事务只能在一个jar包里面吗,如果需要调用另外一个jar包里面的实体bean 就不能进行事务了吗.针对上面的问题我怎么样才能进行事务上的管理呢?
希望高手能给我指点一下,帮助我解决问题,现在项目很急,先感谢大家了.鞠躬敬礼.
...全文
112 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
smilelee 2003-08-21
  • 打赏
  • 举报
回复
属于bean事务管理
smilelee 2003-08-21
  • 打赏
  • 举报
回复
我没有MSN,QQ1153272

做的是手动事务管理,方式跟 manyjoys(更多欢乐)写的一样。在代码中控制事务,没有使用容器事务管理。
awpking 2003-08-21
  • 打赏
  • 举报
回复
还有smilelee老兄有没有什么可以在线联系的方式,想和你聊聊关于这个问题.
我的msn 是chengwei_1@hotmail.com
awpking 2003-08-21
  • 打赏
  • 举报
回复
接smilelee
如果你放在两个Jar里面等于就是在两个容器之间进行事务,这样是可行的吗?
还有你用的是bean管理事务还是容器管理事务阿.
manyjoys 2003-08-21
  • 打赏
  • 举报
回复
下面是我写的代码,在weblogic7.0下调试通过(weblogic需要设置pool支持本地事务,datasource支持两段提交,很重要),但未能在weblogic8.1下通过
//这段代码写在bean管理事务的sessionbean中
//开始保存数据
UserTransaction userTran = sessionContext.getUserTransaction();
//写子表
try {
//事务开始
log.debug("事务开始..");
userTran.begin();
Iterator itr2 = detailDTOs.iterator();
//log.debug("itr size is :" + detailDTOs.size());
while (itr2.hasNext()) {
//log.debug("循环");
//CurrencyLaunchDetailVO 是一valueobject
CurrencyLaunchDetailVO detailDTO = (CurrencyLaunchDetailVO)
itr2.next();
//str为序号
detailDTO.setBussinessid(str);
//MimisCurrencyLaunchDetail 为一实体Bean
MimisCurrencyLaunchDetail lanunchDetail = null;
lanunchDetail = ( (MimisCurrencyLaunchDetailHome) EJBFactory.
getInstance().getLocalHome(JNDINames.
CURRENCYLAUNCHDETAIL_JNDI_NAME)).create(detailDTO);

log.debug("id ===" + detailDTO.getBussinessid());
log.debug("classid===" + detailDTO.getCurrencyclassid());
log.debug("kindId ===" + detailDTO.getCurrencykindid());
log.debug("sum ===" + detailDTO.getSum());
}

log.debug("序号 :" + mainVO.getBussinessid());
//MimisCurrencyLaunchMain 为主表的实体bean
//开始写主表
MimisCurrencyLaunchMain launchMain
= ( (MimisCurrencyLaunchMainHome) EJBFactory.
getInstance().getLocalHome(JNDINames.CURRENCYLAUNCHMAIN_JNDI_NAME)).
create(mainVO);
//事务提交
userTran.commit();
log.debug("保存成功!");

}
catch (Exception ex) {
ex.printStackTrace();
try {
//事务回滚
log.debug("保存失败!");
userTran.rollback();
}
catch (Exception ex2) {
ex.printStackTrace();
throw new DemoException("保存失败!");
}
throw new DemoException("保存序号为:" + mainVO.getBussinessid() +
" 的信息时出错!");
}
return ret_collect;

如果是在weblogic8.1中没有那个循环或者循环只有一次都是没有错误的,只是当循环多于一次时,才会有异常,一直未解!!
smilelee 2003-08-19
  • 打赏
  • 举报
回复
一个weblogic里绝对没问题。我做过session bean的,就是分别在两个jar里。
其实两个weblogic里分开放也应该没问题。按道理来讲,否则还叫什么分布式应用。
awpking 2003-08-19
  • 打赏
  • 举报
回复
我放的就是一个weblogic里面.
smilelee 2003-08-18
  • 打赏
  • 举报
回复
还有就是你把这两个JAR包都发布在同一个WEBLOGIC里试试。我以前试图在两抬SERVER之间远程调用,失败,不清楚原因。放在同一个SERVER里就没问题。
smilelee 2003-08-18
  • 打赏
  • 举报
回复
你好,看见你发的消息。实体BEAN我没做过,不清楚。我用的是手动事务管理。也就是在sessionbean里写代码控制事务。这样控制的比较到位点。两个JAR包里是可以进行事务管理的,这点你可以相信,我做的事务处理就是在两个JAR包里进行的。
awpking 2003-08-18
  • 打赏
  • 举报
回复
大家可能没有理解我的意思,我是在一个会话bean里面调用两个实体bean里面的方法 ,应该算是在两个实体bean之间进行事务.我试了如果两个实体bean在一个jar包里面就可以进行事务回滚,如果不在一个包里面就会出错.
neuhawk 2003-08-17
  • 打赏
  • 举报
回复
难道事务只能在一个jar包里面吗,如果需要调用另外一个jar包里面的实体bean 就不能进行事务了吗.

///////////////////////////////////////////////////////////////////
这个是分布式的事务,跟jdbc驱动有关吧,我在weblogic宝殿看过。

不过,实体bean一般都是由容器管理事务把。
asdmonster 2003-08-16
  • 打赏
  • 举报
回复
既然是cmp,你何必自己控制呢,在你自己需要回滚的地方抛出异常,容器自己会帮你回滚的。
万一要实现阶段回滚,也可以使用jta啊。
没有实践你的错误,是不是你自己的行为干涉了容器的调用啊?
awpking 2003-08-16
  • 打赏
  • 举报
回复
难道在两个jar 包里面,就没有办法进行事务吗,有没有高手指点一下.
awpking 2003-08-16
  • 打赏
  • 举报
回复
这几天我一直在试这个问题,我打成了EAR包但是也不行.
大家在开发的时候没有遇到过这些问题吗.
freedy_hu 2003-08-14
  • 打赏
  • 举报
回复
up
sunmoonada 2003-08-11
  • 打赏
  • 举报
回复
应用程序异常,ejb容器不会回滚事务的
awpking 2003-08-08
  • 打赏
  • 举报
回复
我没有打成ear包
inprise_lyj 2003-08-08
  • 打赏
  • 举报
回复
两个jar包是否已在同一个 ear包里呢?
rex0y 2003-08-08
  • 打赏
  • 举报
回复
你把c 单独放在事务里试试呢
subscribe 2003-08-08
  • 打赏
  • 举报
回复
gz
加载更多回复(2)

67,538

社区成员

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

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