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