1.5. JDBC 和事务
JBossJTA 支持构建用 JDBC 2.0 API 访问数据库的本地和分布式的事务性应用程序。JDBC 2.0 支持事务的两阶段提交(two-phase commit),这和 XA X/Open 标准类似。com.arjuna.ats.jdbc 软件包里包含了对 JDBC 2.0 的支持。
JBossJTA 通过事务性 JDBC 驱动在事务里合并 JDBC 连接。这些驱动拦截所有的调用并确保它们注册并由合适的事务驱动。JDBC 驱动可以通过单一类型的事务性驱动来驱动。这个驱动是 om.arjuna.ats.jdbc.TransactionalDriver,它实现了
java.sql.Driver 接口。
建立连接的其中一个途径是通过
java.sql.DriverManager.getConnection 方法。在建立了连接后,JBossJTA 监控所有的操作。你可以和其他 JDBC 驱动连接相同的方式使用这些连接。
JBossJTA 连接可以同时用于多个不同的事务内部。具有当前事务的不同标识的不同线程可以使用相同的 JDBC 连接。JBossJTA 为 JDBC 连接里的每个事务应用连接池。虽然多个线程可以使用 JDBC 连接的相同实例,每个事务在内部也可使用不同的连接实例。除了
close 方法,连接上执行的所有应用程序级别的操作只能在该事务专有的连接上执行。
JBossJTA 通过合适的资源自动地在事务里注册 JDBC 驱动连接。当事务终止时,这个资源将通过对 JDBC 驱动的相关调用提交或是回滚任何对底层数据库的修改。