现有需求:两个关联表A,B。当A中插入一条记录时,在B中插入多条记录,同时将A中的主键插入B中,如果B中插入操作失败时,A表回滚。在EJB
现有需求:两个关联表A,B。当A中插入一条记录时,在B中插入多条记录,同时将A中的主键插入B中,如果B中插入操作失败时,A表回滚。在EJB中定义了两个EntityBean,在SessionBean中写了两个InsertA()、InsertB()方法(是分别针对两个关联表A,B的插入操作)。
public boolean insertA(){
...
try{
entityBeanA.create(.....);
this.insertB();
}catch(Exception exc)
{...}
....
}
public boolean insertB(){
...
try{
entityBeanB.create(.....);
}catch(Exception exc)
{...}
....
}
现在操作时发现如果B表操作失败时,表A中操作的数据没有回滚,仍然插入到表中。
请问这样的需求如何实现?
问题点数:20、回复次数:7Top
1 楼smilelee(smilelee)回复于 2003-06-04 09:04:09 得分 5
用Tx jdbc driver做连接,再做Tx datasource。分布式事务必须用TxTop
2 楼zez(思恩 闭关练功ing...)回复于 2003-06-04 09:26:34 得分 5
试试sessinbean里加一个方法,
这个方法只是调用 inserta 和insertb
试试,我没做过...
好像事务是按方法的..
只是提示,还是看一下 文档 的好:)Top
3 楼saintKnight(saintKnight)回复于 2003-06-06 09:58:08 得分 0
upTop
4 楼saintKnight(saintKnight)回复于 2003-06-08 11:35:21 得分 0
upTop
5 楼dl1125(上班)回复于 2003-06-08 14:40:51 得分 5
weblogic jat 可以达到你的要求!Top
6 楼wbnavy(海风)回复于 2003-06-08 14:56:44 得分 5
上面的问题没有把事务管理写进去,
public UserTransaction getUserTransaction() throws Exception{
UserTransaction uT = null;
try{
uT = this.sessionContext.getUserTransaction();
int status = uT.getStatus();
if ( status != javax.transaction.Status.STATUS_ACTIVE ) {
uT.begin();
status = uT.getStatus();
}
}
catch ( Exception e ) {
e.printStackTrace();
throw new ResourceRegisterException(e.getMessage());
}
return (uT);
}
private void commit() throws Exception {
try {
if ( userTransaction.getStatus() == javax.transaction.Status.STATUS_NO_TRANSACTION ){
throw new ResourceRegisterException("There is no transaction associated with this thread");
}
if ( userTransaction.getStatus() == javax.transaction.Status.STATUS_ACTIVE ) {
userTransaction.commit();
}
else {
throw new ResourceRegisterException("User Transaction Timeout");
}
}
catch ( Exception e ) {
e.printStackTrace();
throw new ResourceRegisterException(e.getMessage());
}
}
private void rollback() throws ResourceRegisterException {
try{
userTransaction.rollback();
}
catch ( Exception e1 ) {
e1.printStackTrace();
throw new ResourceRegisterException(e1.getMessage());
}
}
把上面几个关于事务的方法加进去就行了。Top
7 楼saintKnight(saintKnight)回复于 2003-06-08 17:45:54 得分 0
加到哪里去?是不是直接加到所在的类中,不需要其他设置?Top



