[
https://issues.apache.org/jira/browse/OFBIZ-7346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15335851#comment-15335851
]
Jacques Le Roux commented on OFBIZ-7346:
----------------------------------------
Thanks for this complement Gareth,
* setRollbackOnReturn, so this explains why this issue doest not exist with
Derby, it's a matter of driver (DBMS actually) see Derby vs Postgres
** https://db.apache.org/derby/docs/10.9/devguide/cdevconcepts29416.html
** https://www.postgresql.org/docs/9.1/static/ecpg-sql-set-autocommit.html
Another solution would be to force Postgres to autocommit but I'd not do that,
better not change this DBMS dependent behaviour.
* setEnableAutoCommitOnReturn you said
bq. I observed autoCommit was being set to true at transaction commit (can't
remember source file/line)
I see connection.setAutoCommit(true) only in 1 place:
DatabaseUtil.getConnection(). But it' used quite a lot, so yes better be safe
than sorry, since setEnableAutoCommitOnReturn does not impair anything. BTW
(minor) I found connection.setAutoCommit(false) in 2 places
** SQLProcessor (we can forget that, specific to manual interactions with the
DB)
** CursorStatement.newCursorStatement() (through private constructor),
eventually called by DBCPConnectionFactory.getConnection() when checking cache
> connection pooling not working
> ------------------------------
>
> Key: OFBIZ-7346
> URL: https://issues.apache.org/jira/browse/OFBIZ-7346
> Project: OFBiz
> Issue Type: Bug
> Components: ALL COMPONENTS
> Affects Versions: Trunk
> Reporter: Gareth Carter
> Assignee: Jacques Le Roux
> Priority: Critical
> Attachments: DBCPConnectionFactory.patch
>
>
> Connection pooling does not seem to work. Connections are created fine but as
> the close() method is called (outside of transaction) or the transaction is
> committed the connections are closed to the db server and not returned to the
> pool.
> I believe the issue is with
> org.apache.commons.dbcp2.PoolableConnectionFactory passivateObject method.
> This will call rollback() when rollbackOnReturn is set to true even if the
> transaction is committed. This is because any connection wrappers extending
> org.apache.commons.dbcp2.DelegatingConnection cache autoCommit status. At
> some point, this cached autoCommit is different from the underlying
> connection autoCommit. The rollback() method will throw an exception and the
> connection is destroyed rather than put back to the pool
> Environment this has been tested on:
> ofbiz: rev 1725574 and latest trunk (as of 2016-06-14)
> db: postgresql 9.1
> jdbc driver: postgresql-9.3-1101.jdbc4
> os: linux and windows
> I have asked dev ml for others to check this with other dbs. Jacques has test
> with postgres but could not see this behaviour
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)