[ 
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)

Reply via email to