Hibernate 4 connexion.autocommit=false ignoré

Nous avons une application à l'aide de Java, hibernate 4, guice 3, guice-persistent 3 sur tomcat 6

connexion.validation automatique est configuré pour faux dans les hibernate.cfg.xml fichier:

<session-factory>
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/dev</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.autocommit">false</property>
<property name="connection.proof_property">true</property>
<!-- Disable second-level cache. -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="cache.use_query_cache">false</property>
<property name="cache.use_minimal_puts">false</property>
<property name="max_fetch_depth">3</property>
<!-- Print SQL to stdout. -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="id.new_generator_mappings">true</property>
<!-- Drop and then re-create schema on SessionFactory build, for testing. -->
<property name="hbm2ddl.auto">create</property>
<!-- Bind the getCurrentSession() method to the thread. -->
<property name="current_session_context_class">thread</property>
<!-- configuration pool via c3p0--> 
<property name="c3p0.initialPoolSize">0</property>
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.max_size">32</property>
<property name="c3p0.max_statements">100</property> 
<property name="c3p0.min_size">0</property> 
<property name="c3p0.timeout">600</property> <!-- seconds --> 
<!-- Hibernate XML mapping files -->
<!-- <mapping resource="org/MyClass.hbm.xml"/>-->
<!-- Hibernate Annotations (and package-info.java)-->
<mapping package="model"/>
</session-factory>

Mais sur le déploiement, le journal indique que la validation automatique est définie sur true:

INFO: Starting Servlet Engine: Apache Tomcat/6.0.35
28 janv. 2013 16:03:01 org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
28 janv. 2013 16:03:01 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.1.9.Final}
28 janv. 2013 16:03:01 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
28 janv. 2013 16:03:01 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
28 janv. 2013 16:03:01 org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
28 janv. 2013 16:03:01 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
28 janv. 2013 16:03:01 org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
28 janv. 2013 16:03:01 org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator instantiateExplicitConnectionProvider
INFO: HHH000130: Instantiating explicit connection provider: org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
28 janv. 2013 16:03:01 org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider configure
INFO: HHH010002: C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/dev
28 janv. 2013 16:03:01 org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider configure
INFO: HHH000046: Connection properties: {user=root, password=****, autocommit=true, proof_property=true, release_mode=auto}
28 janv. 2013 16:03:01 org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider configure
INFO: HHH000006: Autocommit mode: true
28 janv. 2013 16:03:01 com.mchange.v2.log.MLog <clinit>
INFO: MLog clients using java 1.4+ standard logging.
28 janv. 2013 16:03:02 com.mchange.v2.c3p0.C3P0Registry banner
INFO: Initializing c3p0-0.9.1 [built 16-January-2007 14:46:42; debug? true; trace: 10]
28 janv. 2013 16:03:02 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@b6868296 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@8d0e5680 [ acquireIncrement -> 1, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hgeby98szzd5hkbs91s5|a69b6b, idleConnectionTestPeriod -> 0, initialPoolSize -> 0, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 600, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 32, maxStatements -> 100, maxStatementsPerConnection -> 0, minPoolSize -> 0, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@d4b5ff9b [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 1hgeby98szzd5hkbs91s5|75b3ee, jdbcUrl -> jdbc:mysql://localhost:3306/dev, properties -> {user=******, password=******, autocommit=true, proof_property=true, release_mode=auto} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 1hgeby98szzd5hkbs91s5|1a9bea3, numHelperThreads -> 3 ]
28 janv. 2013 16:03:02 org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
28 janv. 2013 16:03:02 org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation
INFO: HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
28 janv. 2013 16:03:02 org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory
28 janv. 2013 16:03:02 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
28 janv. 2013 16:03:02 org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000227: Running hbm2ddl schema export

Pourquoi hibernate est ignorant la validation automatique de la propriété? Et devrions-nous nous préoccuper? (comme nos tests nous montrent qu'une exception dans un correctement annotée méthode ne un pas en arrière, donc, tout semble très bien)

Je pense que le nom de la propriété devrait être renommé hibernate.connection.autocommit au lieu de hibernate.autocommit dans hibernate.cfg.xml par javadoc C3P0
Lors du chargement des propriétés de hibernate.cfg.xml si le hibernate. n'est pas au début de la propriété, il ajoute qu'ils ont certainement la bonne clé de configuration. Aussi, si le bien était prise en manquer totalement, il devrait être par défaut à false.
J'ai pris votre cfg.xml fichier verbatim et créé un nouveau projet et il a fonctionné comme prévu, il connecté vrai que quand j'ai utilisé le mot "vrai", et la valeur false lorsque j'ai utilisé le mot "faux". Donc, la question n'est pas quelque chose que vous avez posté. Mettre un point d'arrêt dans StandardServiceRegistryBuilder.configure(LoadedConfig loadedConfig) et voir ce que la valeur de ce paramètre est à ce moment là. Si ce n'est pas ce que vous attendez, voir où il est l'obtention de la configuration de la (ramper jusqu'à la trace de la pile).

OriginalL'auteur cporte | 2013-01-28