users@glassfish.java.net

defaultAutoCommit and JDBC Connection Pool

From: <glassfish_at_javadesktop.org>
Date: Fri, 23 Apr 2010 08:44:43 PDT

Hi,

I am using Glassfish 2.1 with ESB.

When I do my development on my laptop, I find that I cannot use Glassfish JDBC Connection Pools, as for some reason a full Glassfish restart is required every time I redeploy a WAR that uses the pools.

So when working locally I don't use Glassfish connection pooling, but instead use Spring connection pooling.

Spring works nicely with the property defaultAutoCommit=false.

I can then invoke stored procedures, which are written such that they only do a final COMMIT if everything works.

My problem is that when I deploy to the target Solaris Glassfish environment, and I switch to using the Glassfish connection pooling, the stored procedures that I call ALWAYS get committed.

This is the data source bean:

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="jdbc/develop-jdbc-resource-1"/>
    </bean>

This is the bit from my domain.xml that defines the connection pool:

<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="true" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="oracle.jdbc.pool.OracleConnectionPoolDataSource" fail-all-connections="false" idle-timeout-in-seconds="60" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="5" name="develop-jdbc-pool-1" non-transactional-connections="true" pool-resize-quantity="2" res-type="javax.sql.ConnectionPoolDataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" transaction-isolation-level="read-committed" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
      <property name="URL" value="jdbc:oracle:thin:@DEVELOP"/>
      <property name="user" value="DEVELOP"/>
      <property name="password" value="DEVELOPPW"/>
      <property name="networkProtocol" value="tcp"/>
      <property name="portNumber" value="1522"/>
      <property name="ExplicitCachingEnabled" value="false"/>
      <property name="MaxStatements" value="0"/>
      <property name="TNSEntryName" value="DEVELOP"/>
      <property name="databaseName" value="DEV1"/>
      <property name="DataSourceName" value="OracleConnectionPoolDataSource"/>
      <property name="LoginTimeout" value="0"/>
      <property name="ImplicitCachingEnabled" value="false"/>
      <property name="DefaultAutoCommit" value="false"/>
      <property name="defaultAutoCommit" value="false"/>
    </jdbc-connection-pool>

Can anybody help me? What am I doing incorrectly?

Thank you very much!
[Message sent by forum member 'm_jenkins']

http://forums.java.net/jive/thread.jspa?messageID=398695