Hibernate的事务和并发02

http://tech.ddvip.com   2006年04月02日    社区交流

本文详细介绍Hibernate的事务和并发02

  12.2.1.非托管环境

  如果Hibernat持久层运行在一个非托管环境中,数据库连接通常由Hibernate的连接池机制 来处理。

  代码内容
session/transaction处理方式如下所示:
//Non-managed environment idiom
Session sess = factory.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
// do some work
...
tx.commit();
}
catch (RuntimeException e) {
if (tx != null) tx.rollback();
throw e; // or display error message
}
finally {
sess.close();
}

  你不需要显式flush() Session - 对commit()的调用会自动触发session的同步。

  调用 close() 标志session的结束。 close()方法重要的暗示是,session释放了JDBC连接。

  这段Java代码是可移植的,可以在非托管环境和JTA环境中运行。

  你很可能从未在一个标准的应用程序的业务代码中见过这样的用法;致命的(系统)异常应该总是 在应用程序“顶层”被捕获。换句话说,执行Hibernate调用的代码(在持久层)和处理 RuntimeException异常的代码(通常只能清理和退出应用程序)应该在不同 的应用程序逻辑层。这对于你设计自己的软件系统来说是一个挑战,只要有可能,你就应该使用 J2EE/EJB容器服务。异常处理将在本章稍后进行讨论。

  请注意,你应该选择 org.hibernate.transaction.JDBCTransactionFactory (这是默认选项).

  12.2.2.使用JTA

  如果你的持久层运行在一个应用服务器中(例如,在EJB session beans的后面),Hibernate获取 的每个数据源连接将自动成为全局JTA事务的一部分。Hibernate提供了两种策略进行JTA集成。

责编:豆豆技术应用

正在加载评论...