在WASCE中使用ORACLE数据库,按说明配置了数据库连接池,在说明中,说明了“针对Oracle、MySQL、MaxDB和TranQL数据库使用Generic JDBC Resource Adapter(tranql-connector-ra-version.rar)时,应在数据库部署规划中使用CommitBeforeAutoCommit="true",这样才能立刻将事务提交至数据库。”因第一次使用,对其中的CommitBeforeAutoCommit不是很理解,况且在WASCE的WEB配置界面中也没有此参数的设置,因而也没作深究。
在JAVA项目的数据库操作部分,数据库连接是采用了连接池,并为保证数据一致性,启用了事务且关闭了AutoCommit,事务可以正常Commit/Rollback,在程序中也可以看到数据所作的修改,但在数据库看不到数据修改,换用了程序直接采用JDBC连接数据库而不用连接池,却一切正常。
首先怀疑的是WASCE是否采用了EJB或XA之类的分布式事务,但通过对程序运行的跟踪,否定了这一疑点。
看来一定是和WASCE中的数据库连接池配置有关。
再次翻看配置说明,仔细研究了对CommitBeforeAutoCommit参数的说明,感觉问题与此参数有关。
重新配置数据源,要加入CommitBeforeAutoCommit,这次采用命令来部署,重新测试,一切正常。
deploy.sh deploy $WASCE_HOME/repository/org/tranql/tranql-connector-ra/1.7/tranql-connector-ra-1.7.rar plan-pool.xml
总结:此例的问题是对AutoCommit的理解产生了问题,数据库连接Connection是有一个AutoCommit参数,表示每次数据库操作后,是否自动提交事务,即是否次每次数据库操作都作为一个独立的事务来处理;而此地的AutoCommit却并非此含义,而是应该理解为连接池管理的事务的自动提交。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/81227/viewspace-696613/
,如需转载,请注明出处,否则将追究法律责任。