so, zurueck zum Thema. Es sind noch so viele Fragen offen (in meinen Beitraegen zuvor), will aber noch mehr hinzufuegen :autsch:
Annahme:
Sobald ich eine Datenbank als Datasource "xxx-ds.xml" konfiguriere, schaltet sich das Connection-Pooling von JBoss ein, falls ich in meiner Hibernate-Anwendung auf diese in der cfg.xml verweise [
<property name="hibernate.connection.datasource">java:/MySqlDS</property>]?
Kann das jemand bestaetigen?
Ich vermute dies, weil c3p0 nur dann anspringt, wenn im cfg.xml direkt auf die DB [
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bla</property>] verwiesen wird.
c3p0 kuemmert sich ja ums Connection und Statement-Pooling - in wie weit hat dass nun jetzt auch was mit dem JBoss-Transaktion Management zu tun? Gar nix, oder?
Wozu brauch ich eigentlich den HibernateService, also die HibernateFactory im JNDI? Ich hol mir doch immer die SessionFactory ueber
configuration.buildSessionFactory().
Edit:
ach man, alles doof:
- 11:27:09,324 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: null
11:27:09,324 ERROR [JDBCExceptionReporter] com.mchange.v2.c3p0.PoolBackedDataSource@158fd70 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@1070723 [ acquireIncrement -> 1, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1070723, idleConnectionTestPeriod -> 0, initialPoolSize -> 1, maxIdleTime -> 0, maxPoolSize -> 8, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 1, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@19ac2e3 [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 19ac2e3, jdbcUrl -> jdbc:mysql://localhost:3306/jbpm, properties -> {autoReconnect=true, user=******, password=******, dialect=org.hibernate.dialect.MySQLInnoDBDialect, autoReconnectForPools=true} ], preferredTestQuery -> null, propertyCycle -> 300, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, usesTraditionalReflectiveProxies -> false ], factoryClassLocation -> null, identityToken -> 158fd70, numHelperThreads -> 3 ] has been closed() -- you can no longer use it.
...
Caused by: java.sql.SQLException: com.mchange.v2.c3p0.PoolBackedDataSource@158fd70 [ das von oben ]
at com.mchange.v2.c3p0.PoolBackedDataSource.assertCpds(PoolBackedDataSource.java:234)
at com.mchange.v2.c3p0.PoolBackedDataSource.getPoolManager(PoolBackedDataSource.java:246)
at com.mchange.v2.c3p0.PoolBackedDataSource.getConnection(PoolBackedDataSource.java:94)
at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:35)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:360)
Hab 1 MySql Datenbank, 2 unterschiedliche (=cfg.xml) HibernateSession mit der selben Konfiguration (c3p0, no TransactionManager): der eine Datensatz geht, der andere nicht
Nur Schererei
Hab das Gefuehl ich stocher im dunklen Sumpf umher. Hab keine Ahnung was ich da eigentlich rumkonfigurier - die Docu ist ja mies bzw finde ich nicht.
Hab nun c3p0 rausgeschmissen, keine Pooling also; beide Datensession greifen nun direkt auf die DB zu, JTA aktiviert:
Mach ich nun ein commit (geht bei beiden Sessions nicht) dann kommt dies
- 11:56:19,386 INFO [ConnectionManager] forcing batcher resource cleanup on transaction completion; forgot to close ScrollableResults/Iterator?
was dazu fuehrt dass keine Aenderungen in der DB-Uebernommen werden...