Topic: 令人困惑的Transaction问题 |
Print this page |
1.令人困惑的Transaction问题 | Copy to clipboard |
Posted by: xjimmy Posted on: 2003-01-15 11:51 本人试图用一个session bean封装两个entity bean,在session bean里面添加了一个method1,在method1中先后调用了两个entity bean的create方法,其中第二个create方法在执行中发生错误。 本人在deploy descriptor中使用JBuilder的缺省设置,即session bean和entity bean的每个方法都要求事务处理(Required)。 因此,虽然method1因第二个create方法在执行中发生错误而回滚,但第一个create方法却已经提交。 而我的希望当然是当method1回滚时,两个create方法都回滚。应该怎么设置呢? 谢谢!! |
2.Re:令人困惑的Transaction问题 [Re: xjimmy] | Copy to clipboard |
Posted by: yuanandyy Posted on: 2003-01-15 23:11 是呀,我也遇到过。有时可以回滚,有时又不行。希望那位大仙能够帮忙。 |
3.Re:令人困惑的Transaction问题 [Re: xjimmy] | Copy to clipboard |
Posted by: freeman99 Posted on: 2003-01-18 21:51 你需要把与entity bean使用的datasource改变成TxDataSource,这是在weblogic上的做法,其他平台我不了解具体做法。 |
4.Re:令人困惑的Transaction问题 [Re: xjimmy] | Copy to clipboard |
Posted by: nOMOre Posted on: 2003-01-20 13:30 见 http://www.cjsdn.com/post/view?bid=2&id=10195&sty=1&tpg=1&age=0 |
5.把session的代码贴出来看看 [Re: xjimmy] | Copy to clipboard |
Posted by: nick Posted on: 2003-01-23 12:15 把session的代码贴出来看看 |
6.Re:令人困惑的Transaction问题 [Re: xjimmy] | Copy to clipboard |
Posted by: xjimmy Posted on: 2003-01-23 13:36 hi, nick 代码如下: public String addNewBug(BugView bug) throws Exception { /**@todo Complete this method*/ try { if (bugsHome == null) bugsHome = getBugsHome(); // if (devman == null) // devman = getDataSource(); Connection dbConn = SqlBean.getConn(); java.util.Date d = new java.util.Date(); java.text.SimpleDateFormat formattor = new java.text.SimpleDateFormat("yyyyMMdd"); String sqlstr = "select max(ID) as MaxId from Bugs where ID like '" + formattor.format.toString() + "%'"; ResultSet rs = SqlBean.getResultSet(dbConn, sqlstr); String bugId; if (rs.next()) { bugId = rs.getString("MaxId"); if (bugId == null) bugId = formattor.format.toString() + "0001"; else bugId = "" + ((new Long(bugId)).longValue() + 1); } else bugId = formattor.format.toString() + "0001"; bug.setId(bugId); Bugs bugs = bugsHome.create(bug); if (repeatStepHome == null) repeatStepHome = getRepeatStepsHome(); for (java.util.Enumeration e=bug.getSteps().elements(); e.hasMoreElements(); ) { RepeatStepView step = (RepeatStepView)e.nextElement(); step.setBugId(bugId); repeatStepHome.create(step); } return bugs.getId(); } catch (Exception e) { e.printStackTrace(); throw e; } } 调用repeatStepHome.create(step)时出错,但整个方法未能回滚。事务属性设置为 * 和 Required。 |
7.Re:令人困惑的Transaction问题 [Re: xjimmy] | Copy to clipboard |
Posted by: nOMOre Posted on: 2003-01-23 16:02 transaction主要分为四种类型:support,support not,require,require new 其中四种的意思以下一一作解释: 1,support-有就参与,没有就不参与;就以上例来说,一个sessionbean method(姑且叫做sMethod)种会调用两个不同entity bean方法(emethod1,emethod2),我们不去管sMethod怎样,若eMethod1,eMethod2的transaction设置成support,在它调用时候就去看sMethod是否在一个transaction中,若是则参与,若没有,则不参与; 2,not support-如1,有也不参与,没有也不参与; 3,require-需要一transaction;若某method设置成require(default),在被调用时候就去看它是否在一个transaction里面;有则参与进去,没有则new一个transaction;如上例:default方法都是require的,在你客户端(jsp,swing)调用sMethod时候就会new一个(require),eMethod1,2就参与进这个transaction中; 4,require new-无论有没有都去new一个;这个比较容易理解就不罗嗦了 |
8.Re:令人困惑的Transaction问题 [Re: xjimmy] | Copy to clipboard |
Posted by: whisperwind Posted on: 2003-01-28 11:01 如果是cmt那么跟你的代码是无关的,建议你看看container中的datasource设置,看看是不是支持事务的datasource |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |