EJB 事务问题 请教高手,项目正急,在线等~~~~~~~~~~~~~~~~~ 两个jar包是否已在同一个 ear包里呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你把d的事务类型改为requiresNew试试! 应用程序异常,ejb容器不会回滚事务的 这几天我一直在试这个问题,我打成了EAR包但是也不行.大家在开发的时候没有遇到过这些问题吗. 难道在两个jar 包里面,就没有办法进行事务吗,有没有高手指点一下. 既然是cmp,你何必自己控制呢,在你自己需要回滚的地方抛出异常,容器自己会帮你回滚的。万一要实现阶段回滚,也可以使用jta啊。没有实践你的错误,是不是你自己的行为干涉了容器的调用啊? 难道事务只能在一个jar包里面吗,如果需要调用另外一个jar包里面的实体bean 就不能进行事务了吗.///////////////////////////////////////////////////////////////////这个是分布式的事务,跟jdbc驱动有关吧,我在weblogic宝殿看过。不过,实体bean一般都是由容器管理事务把。 大家可能没有理解我的意思,我是在一个会话bean里面调用两个实体bean里面的方法 ,应该算是在两个实体bean之间进行事务.我试了如果两个实体bean在一个jar包里面就可以进行事务回滚,如果不在一个包里面就会出错. 你好,看见你发的消息。实体BEAN我没做过,不清楚。我用的是手动事务管理。也就是在sessionbean里写代码控制事务。这样控制的比较到位点。两个JAR包里是可以进行事务管理的,这点你可以相信,我做的事务处理就是在两个JAR包里进行的。 还有就是你把这两个JAR包都发布在同一个WEBLOGIC里试试。我以前试图在两抬SERVER之间远程调用,失败,不清楚原因。放在同一个SERVER里就没问题。 一个weblogic里绝对没问题。我做过session bean的,就是分别在两个jar里。其实两个weblogic里分开放也应该没问题。按道理来讲,否则还叫什么分布式应用。 下面是我写的代码,在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如果你放在两个Jar里面等于就是在两个容器之间进行事务,这样是可行的吗?还有你用的是bean管理事务还是容器管理事务阿. 还有smilelee老兄有没有什么可以在线联系的方式,想和你聊聊关于这个问题.我的msn 是[email protected] 我没有MSN,QQ1153272做的是手动事务管理,方式跟 manyjoys(更多欢乐)写的一样。在代码中控制事务,没有使用容器事务管理。 sql优化 servlet跳转问题 网站关键词访问统计 一个用google Api结合java做的深圳楼盘系统,请大家多指教!!! hibernate查询问题 那里可以下载到JAXP API?? Blob 字段的操作!感谢 在weblogic中读取applocation.properties出现问题?急。。。 高分求JSP论坛原码一份,要求JSP+weblogic+oracle,急!! Spring编程式事务遇到的问题 关于JBoss 客户端如何与服务器传输数据
大家在开发的时候没有遇到过这些问题吗.
万一要实现阶段回滚,也可以使用jta啊。
没有实践你的错误,是不是你自己的行为干涉了容器的调用啊?
这个是分布式的事务,跟jdbc驱动有关吧,我在weblogic宝殿看过。不过,实体bean一般都是由容器管理事务把。
其实两个weblogic里分开放也应该没问题。按道理来讲,否则还叫什么分布式应用。
//这段代码写在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中没有那个循环或者循环只有一次都是没有错误的,只是当循环多于一次时,才会有异常,一直未解!!
如果你放在两个Jar里面等于就是在两个容器之间进行事务,这样是可行的吗?
还有你用的是bean管理事务还是容器管理事务阿.
我的msn 是[email protected]