我有一个非常有趣的情况。我对 JBoss 和 Oracle 有点陌生,主要是在 DB2 上使用 Weblogic。也就是说,我想做的很简单。
我有一个 Oracle 数据库的 local-tx-datasource。在我的 Java I 代码中,我在使用适当的 JNDI 名称检索数据源之后调用 datasource.getConnection()。我的 -ds.xml 文件中的 local-tx-datasource 声明没有对自动提交行为的任何显式引用。
获得连接后,我执行创建/更新查询并返回正确的更新计数。随后,在短时间内,我什至能够检索到该记录。然而,在那之后,数据库就假装它一开始就没有得到记录,什么都没有。
我对连接的经验表明,当连接未提交其工作时会发生这种情况,因此只有该连接本身才能看到其事务中的数据。根据我的阅读,JBoss 也遵循 Connection 返回的规范是自动提交的。我什至从我的 Java 代码中验证了这一点,它指出自动提交行为设置为 true。但是,如果是这种情况,为什么我的记录没有被创建/更新?
在此之后,我将 Connection 的自动提交行为设置为 false(同样来自 Java 代码),然后明确地进行提交。从那时起,就没有问题了。
可能出了什么问题?我对这里自动提交的理解是不正确的,还是 JBoss 对它有其他解释。请注意,我根本没有任何交易。这些是非常简单的单记录插入查询。