java 回滚异常_回滚事务并关闭抛出异常的连接

目前在我的JavaEE应用程序服务器中使用本地和远程EJB,MDB(Singleton和Stateless),我正在使用JDBC-Transactions for Hibernate Core .

管理自己所有的打开和关闭,提交休眠会话和事务都可能导致连接泄漏和未经发布的事务 .

特别是在编程错误的情况下,导致自定义或未经检查的异常未被捕获并抛出到远程客户端 .

什么是最简单或最好的方法来确保我的hibernate会话被关闭并且事务回滚以防出现错误?

使用容器管理事务(CMT)还是可以关闭在返回任何EJB方法时调用的拦截器中的会话?

一种简单的方法是将会话范围的用法包装在try-catch块中并捕获任何类型的Exception,但是使用较少代码的一般方法将受到青睐 .

Edit: Remote EJB Example

我的低级Hibernate DAO会关闭连接并在抛出异常时回滚事务 . 有问题的是DAO访问之间的业务逻辑,以防连接仍然打开 . *

public void doSomething(Foo foo) throws Exception

{

// open session and transaction

Session session = DAO.openSession();

// retrieve data

Bar bar = DAO.get(session, ...)

// call other methods which throws an exception resulting in open connection

doOtherStuff(foo, bar)

DAO.save(session, foo);

// commit transaction

DAO.closeAndCommitSession(session);

}

现在我正在使用一个很大的尝试 - 最后:

public void doSomething(Foo foo) throws Exception

{

// open session and transaction

Session session = DAO.openSession();

try

{

// retrieve data

Bar bar = DAO.get(session, ...)

// call other methods which throws an exception resulting in open connection

doOtherStuff(foo, bar)

DAO.save(session, foo);

}

catch (final Exception e)

{

DAO.rollBackTransaction(session);

throw e;

}

finally

{

DAO.closeAndCommitSession(session);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值