使用EJB的时候遇到一个问题,因为系统比较老 用得的都是xml配置的
有两张表:A,B
是原本的想法是A中的a字段update后,B表中的b字段根据A中更新a字段的数据做update
但是执行此方法 2个update好像是同时发出,所以B中的字段没有upadte 只有A的会变化
代码大致如下:
public class Impl{
void update(xx){
DetailDao.updateA(xx);
DetailDao.updateB(xx);
}
}public class DetailDao {
static void updateA(xx){
CommonDao.update(xx);
}
static void updateB(xx){
CommonDao.update(xx);
}
}public class CommonDao{
//实际的sql
.....
}ejb-jar.xml配置如下
<session>
<display-name>Impl</display-name>
<ejb-name>Impl</ejb-name>
<home>com.xx.ImplHome</home>
<remote>com.xx.ImplRemote</remote>
<ejb-class>com.xx.Impl</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
请大家帮帮忙
谢谢~
有两张表:A,B
是原本的想法是A中的a字段update后,B表中的b字段根据A中更新a字段的数据做update
但是执行此方法 2个update好像是同时发出,所以B中的字段没有upadte 只有A的会变化
代码大致如下:
public class Impl{
void update(xx){
DetailDao.updateA(xx);
DetailDao.updateB(xx);
}
}public class DetailDao {
static void updateA(xx){
CommonDao.update(xx);
}
static void updateB(xx){
CommonDao.update(xx);
}
}public class CommonDao{
//实际的sql
.....
}ejb-jar.xml配置如下
<session>
<display-name>Impl</display-name>
<ejb-name>Impl</ejb-name>
<home>com.xx.ImplHome</home>
<remote>com.xx.ImplRemote</remote>
<ejb-class>com.xx.Impl</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
请大家帮帮忙
谢谢~
解决方案 »
- javax.servlet.ServletException: javax/el/ValueExpression的问题
- struts1的ActionForm用List接收值出错
- qingwen
- Tomcat+花生壳无法访问!!郁闷
- ActionMessage cannot be resolved to a type
- struts+spring+hibernate项目中怎么处理中文??
- 关于从oracle中读取blob字段的问题
- 不明啊!!!插入数据问题!
- jb+mysql+jboss的配置手稿
- StringBuffer问题
- 如何查询一个表中最新的来自不同的地区的四条记录
- Tomcat启动正常,但是浏览器访问不了,急~~~~~~
所以我把log里面的sql贴出来跑的话,
如果不执行完一条commit一次 也会出现我所述的情况,
但执行第一条,commit,再执行第二条 就正常了,
因此我才会往CMT的commit的方向猜,
其实修改一下可以解决 因为原来的逻辑分析一下本来就欠妥···
同一个method里面 不应该让另一个update的结果依赖于上面的update的结果
我只是比较好奇这个问题,希望能搞明白~
而在oracle中,如果第一个会话(体现在这里就是第一个连接)不commit的话,其他会话(在这里就是第二个连接)是看不到它的更新的。
其他数据库是什么样子的我不知道。所以,如果你要实现这样的事务,就得保证你的DAO里面,两个方法使用的是同一个连接会话(中间不能有connection.close把连接放回连接池)。我看你这里是两个dao中的方法,所以才如此猜想
好像你理解有些偏差···我本意是想让它成为2个事务,这样第一次做的update 才能为第二次做的可见
我想的是 我的配置有问题 只让Impl里面的method让容器管理
而Dao里面的并没有 但实际上做update是由Dao里面的method来控制
第一次update,此时还未提交 第二次update的时候看到的是脏数据
致使数据不一致
个人猜想···还望指正