Greetings all,
So I've got a really bizarre problem with my Hibernate/Maven/Eclipse/Spring/HSQL/MySQL monster -
I can pull data out with a query crafted in the main program but not from within a DAO member.
Even more weirdly, the program does run flawlessly after changing to a different database
with a copy of the users table.
I am totally stumped. Here's some files, if someone would be so kind as to look them over, perhaps
point out some fiendish subtlty or obvious noob error.
databaseServerA.properties
Code:
hibernate.dialect=org.hibernate.dialect.HSQLDialect
hibernate.connection.characterEncoding=UTF-8
hibernate.connection.driver_class=org.hsqldb.jdbcDriver
hibernate.connection.url=jdbc:hsqldb:hsql://localhost/dsvd_local
hibernate.connection.username=sa
hibernate.connection.password=
hibernate.connection.release_mode=after_transaction
hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=600
hibernate.c3p0.max_statements=50
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.hbm2ddl.auto=create
databaseServerB.properties
Code:
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.connection.characterEncoding=UTF-8
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/dsvd
hibernate.connection.username=root
hibernate.connection.password=
hibernate.connection.release_mode=after_transaction
hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=600
hibernate.c3p0.max_statements=50
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.hbm2ddl.auto=update
ApplicationContext.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- adds support for @Transactional annotation -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<!-- 1st database -->
<!-- to use this one you must manually fire up the hsql database server using command-->
<!-- java -cp hsqldb.jar org.hsqldb.Server -database.0 ./data/toby -dbname.0 dsvd_local -->
<!-- BEFORE trying to execute the application -->
<bean id="databasePropertiesServerA"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:databaseServerA.properties" />
<property name="placeholderPrefix" value="$dbServerA{" />
<property name="placeholderSuffix" value="}" />
</bean>
<bean id="dataSourceServerA"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="$dbServerA{hibernate.connection.driver_class}" />
<property name="jdbcUrl" value="$dbServerA{hibernate.connection.url}" />
<property name="user" value="$dbServerA{hibernate.connection.username}" />
<property name="password" value="$dbServerA{hibernate.connection.password}" />
<property name="minPoolSize" value="$dbServerA{hibernate.c3p0.min_size}" />
<property name="maxPoolSize" value="$dbServerA{hibernate.c3p0.max_size}" />
<property name="maxIdleTime" value="$dbServerA{hibernate.c3p0.timeout}" />
<property name="maxStatements" value="$dbServerA{hibernate.c3p0.max_statements}" />
</bean>
<!-- Hibernate session factory -->
<bean id="sessionFactoryA"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSourceServerA" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">$dbServerA{hibernate.dialect}</prop>
<prop key="cache.provider_class">$dbServerA{hibernate.cache.provider_class}</prop>
<prop key="hibernate.connection.characterEncoding">$dbServerA{hibernate.connection.characterEncoding}</prop>
<prop key="hibernate.connection.releaseMode">$dbServerA{hibernate.connection.release_mode}</prop>
<prop key="hibernate.show_sql">$dbServerA{hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">$dbServerA{hibernate.format_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">$dbServerA{hibernate.hbm2ddl.auto}</prop>
</props>
</property>
<property name="annotatedClasses">
<set>
<value>dsvd_local.model.TeacherOfState</value>
</set>
</property>
</bean>
<!-- transaction manager -->
<bean id="txManagerA"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryA" />
<property name="dataSource" ref="dataSourceServerA" />
</bean>
<!-- says we want to do annonation-driven transactions and which mgr to use -->
<tx:annotation-driven transaction-manager="txManagerA" />
<bean id="teacherOfStateDAO"
class="dsvd_local.dao.hibernate.TeacherOfStateDAOHibernate"
scope="prototype">
<property name="sessionFactory" ref="sessionFactoryA" />
</bean>
<!-- 2nd database -->
<bean id="databasePropertiesServerB"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:databaseServerB.properties" />
<property name="placeholderPrefix" value="$dbServerB{" />
<property name="placeholderSuffix" value="}" />
</bean>
<bean id="dataSourceServerB"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="$dbServerB{hibernate.connection.driver_class}" />
<property name="jdbcUrl" value="$dbServerB{hibernate.connection.url}" />
<property name="user" value="$dbServerB{hibernate.connection.username}" />
<property name="password" value="$dbServerB{hibernate.connection.password}" />
<property name="minPoolSize" value="$dbServerB{hibernate.c3p0.min_size}" />
<property name="maxPoolSize" value="$dbServerB{hibernate.c3p0.max_size}" />
<property name="maxIdleTime" value="$dbServerB{hibernate.c3p0.timeout}" />
<property name="maxStatements" value="$dbServerB{hibernate.c3p0.max_statements}" />
</bean>
<bean id="sessionFactoryB"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSourceServerB" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">$dbServerB{hibernate.dialect}</prop>
<prop key="cache.provider_class">$dbServerB{hibernate.cache.provider_class}</prop>
<prop key="hibernate.connection.characterEncoding">$dbServerB{hibernate.connection.characterEncoding}</prop>
<prop key="hibernate.connection.releaseMode">$dbServerB{hibernate.connection.release_mode}</prop>
<prop key="hibernate.show_sql">$dbServerB{hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">$dbServerB{hibernate.format_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">$dbServerB{hibernate.hbm2ddl.auto}</prop>
</props>
</property>
<property name="annotatedClasses">
<set>
<value>dsvd.model.User</value>
</set>
</property>
</bean>
<!-- transaction manager -->
<bean id="txManagerB"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryB" />
<property name="dataSource" ref="dataSourceServerB" />
</bean>
<!-- says we want to do annonation-driven transactions and which mgr to use -->
<tx:annotation-driven transaction-manager="txManagerB" />
<bean id="userDAO"
class="dsvd.dao.hibernate.UserDAOHibernate"
scope="prototype">
<property name="sessionFactory" ref="sessionFactoryB" />
</bean>
</beans>
UserDAOHibernate
Code:
package dsvd.dao.hibernate;
import org.apache.log4j.Logger;
import org.hibernate.*;
import org.springframework.transaction.annotation.Transactional;
import org.hibernate.SessionFactory;
import org.hibernate.Query;
import dsvd.model.User;
import dsvd.dao.UserDAO;
import utils.*;
import static org.hibernate.criterion.Expression.*;
import java.util.*;
@Transactional
public class UserDAOHibernate implements UserDAO
{
static private Logger logger = Logger.getLogger(UserDAOHibernate.class);
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sf) {
this.sessionFactory = sf;
}
@SuppressWarnings("unchecked")
public List<User> getAll()
{
logger.info("entering");
List<User> results = null;
User result = null;
String sqlcmd;
sqlcmd = " FROM User ";
logger.info("got to A");
Query hqlQuery = sessionFactory.getCurrentSession().createQuery( sqlcmd); // HQL uses CLASS names not TABLE names
logger.info("got to B");
results = hqlQuery.list();
logger.info("exiting normally with a count of " + results.size() ); // <-- this line appears in the logger file with correct value
return results;
}
}
and lastly the program itself
TestQueries.java
Code:
package dsvd.model;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import org.apache.log4j.*;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.transform.Transformers;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import utils.*;
import dsvd.dao.*;
import dsvd.dao.hibernate.*;
import dsvd.model.*;
public class TestQueries
{
private static final Logger logger = Logger.getLogger(TestQueries.class);
private static final String appName = "TestQueries";
StateDAO stateDAO;
DistrictDAO districtDAO;
SchoolDAO schoolDAO;
UserDAO userDAO;
State currState = null;
District currDistrict = null;
School currSchool = null;
User currUser = null;
Session sessB;
public void executeQueriesT() //
{
logger.info("entering");
java.util.List<User> results = null;
User result;
ListIterator<User> mi = null;
String sqlcmd;
sqlcmd = " FROM User ";
Query hqlQuery = this.sessB.createQuery(sqlcmd);
results = hqlQuery.list();
//1st way
mi = results.listIterator();
while( mi.hasNext()) {
User aUser = mi.next();
System.out.println( aUser.toString() );
}
logger.info("exiting");
}
public void executeQueriesU() //
{
logger.info("entering");
java.util.List<User> results = null;
User result;
ListIterator<User> mi = null;
String sqlcmd;
logger.info("just before getAll");
results = this.userDAO.getAll();
logger.info("just after getAll"); // <--- program fails immediately BEFORE this line
//1st way
mi = results.listIterator();
while( mi.hasNext()) {
User aUser = mi.next();
System.out.println( aUser.toString() );
}
logger.info("exiting");
}
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
logger.info("entering");
String inn_str, tmp_str, roww;
ArrayList<String> error_list;
TestQueries theApp;
theApp = new TestQueries();
ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");
theApp.stateDAO = (StateDAO) ctx.getBean("stateDAO");
theApp.districtDAO = (DistrictDAO) ctx.getBean("districtDAO");
theApp.schoolDAO = (SchoolDAO) ctx.getBean("schoolDAO");
theApp.userDAO = (UserDAO) ctx.getBean("userDAO");
org.hibernate.SessionFactory sfB = (SessionFactory) ctx.getBean("sessionFactoryB", SessionFactory.class);
theApp.sessB = sfB.openSession();
theApp.executeQueriesT();
theApp.executeQueriesU();
System.out.println("finished");
logger.info("exiting");
}
}
the program runs, the home-made query in executeQueriesT runs just fine and displays the values of the row retrieved.
But trying to get the same info using the DAO method executes the method but fails immediately after returning from
the DAO method with the following msgs:
Code:
Exception in thread "Main Thread" java.lang.AbstractMethodError: afterCommit
at org.springframework.transaction.support.TransactionSynchronizationUtils.invokeAfterCommit(TransactionSynchronizationUtils.java:133)
at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerAfterCommit(TransactionSynchronizationUtils.java:121)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCommit(AbstractPlatformTransactionManager.java:953)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:796)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
and finally the logfile
Code:
.....
2011-11-14 17:51:07 INFO [dsvd.dao.hibernate.UserDAOHibernate-getAll] - exiting normally with a count of 1
2011-11-14 17:51:07 TRACE [springframework.transaction.interceptor.TransactionInterceptor-commitTransactionAfterReturning] - Completing transaction for [dsvd.dao.hibernate.UserDAOHibernate.getAll]
2011-11-14 17:51:07 TRACE [springframework.orm.hibernate3.HibernateTransactionManager-triggerBeforeCommit] - Triggering beforeCommit synchronization
2011-11-14 17:51:07 DEBUG [springframework.orm.hibernate3.SessionFactoryUtils-beforeCommit] - Flushing Hibernate Session on transaction synchronization
2011-11-14 17:51:07 TRACE [hibernate.event.def.AbstractFlushingEventListener-flushEverythingToExecutions] - flushing session
2011-11-14 17:51:07 DEBUG [hibernate.event.def.AbstractFlushingEventListener-prepareEntityFlushes] - processing flush-time cascades
2011-11-14 17:51:07 DEBUG [hibernate.event.def.AbstractFlushingEventListener-prepareCollectionFlushes] - dirty checking collections
2011-11-14 17:51:07 TRACE [hibernate.event.def.AbstractFlushingEventListener-flushEntities] - Flushing entities and processing referenced collections
2011-11-14 17:51:07 TRACE [hibernate.event.def.AbstractFlushingEventListener-flushCollections] - Processing unreferenced collections
2011-11-14 17:51:07 TRACE [hibernate.event.def.AbstractFlushingEventListener-flushCollections] - Scheduling collection removes/(re)creates/updates
2011-11-14 17:51:07 DEBUG [hibernate.event.def.AbstractFlushingEventListener-flushEverythingToExecutions] - Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects
2011-11-14 17:51:07 DEBUG [hibernate.event.def.AbstractFlushingEventListener-flushEverythingToExecutions] - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
2011-11-14 17:51:07 DEBUG [org.hibernate.pretty.Printer-toString] - listing entities:
2011-11-14 17:51:07 DEBUG [org.hibernate.pretty.Printer-toString] - dsvd.model.User{id=68475, passsword=xxxxxxxx, lastName=Manfred, districtCode=030201, privilegeLevel=8, userName=manfredk, stateCode=AZ, firstName=Kristi}
2011-11-14 17:51:07 TRACE [hibernate.event.def.AbstractFlushingEventListener-performExecutions] - executing flush
2011-11-14 17:51:07 TRACE [org.hibernate.jdbc.ConnectionManager-flushBeginning] - registering flush begin
2011-11-14 17:51:07 TRACE [org.hibernate.jdbc.ConnectionManager-flushEnding] - registering flush end
2011-11-14 17:51:07 TRACE [hibernate.event.def.AbstractFlushingEventListener-postFlush] - post flush
2011-11-14 17:51:07 TRACE [springframework.orm.hibernate3.HibernateTransactionManager-triggerBeforeCompletion] - Triggering beforeCompletion synchronization
2011-11-14 17:51:07 TRACE [springframework.transaction.support.TransactionSynchronizationManager-doUnbindResource] - Removed value [org.springframework.orm.hibernate3.SessionHolder@2239b30] for key [org.hibernate.impl.SessionFactoryImpl@25efc38] from thread [Main Thread]
2011-11-14 17:51:07 DEBUG [springframework.orm.hibernate3.HibernateTransactionManager-processCommit] - Initiating transaction commit
2011-11-14 17:51:07 DEBUG [springframework.orm.hibernate3.HibernateTransactionManager-doCommit] - Committing Hibernate transaction on Session [org.hibernate.impl.SessionImpl@22157c9]
2011-11-14 17:51:07 DEBUG [org.hibernate.transaction.JDBCTransaction-commit] - commit
2011-11-14 17:51:07 TRACE [org.hibernate.impl.SessionImpl-managedFlush] - automatically flushing session
2011-11-14 17:51:07 TRACE [org.hibernate.jdbc.JDBCContext-beforeTransactionCompletion] - before transaction completion
2011-11-14 17:51:07 TRACE [org.hibernate.impl.SessionImpl-beforeTransactionCompletion] - before transaction completion
2011-11-14 17:51:07 DEBUG [org.hibernate.transaction.JDBCTransaction-toggleAutoCommit] - re-enabling autocommit
2011-11-14 17:51:07 DEBUG [org.hibernate.transaction.JDBCTransaction-commit] - committed JDBC Connection
2011-11-14 17:51:07 TRACE [org.hibernate.jdbc.JDBCContext-afterTransactionCompletion] - after transaction completion
2011-11-14 17:51:07 DEBUG [org.hibernate.jdbc.ConnectionManager-afterTransaction] - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
2011-11-14 17:51:07 TRACE [org.hibernate.impl.SessionImpl-afterTransactionCompletion] - after transaction completion
2011-11-14 17:51:07 TRACE [springframework.orm.hibernate3.HibernateTransactionManager-triggerAfterCommit] - Triggering afterCommit synchronization
2011-11-14 17:51:07 TRACE [springframework.orm.hibernate3.HibernateTransactionManager-triggerAfterCompletion] - Triggering afterCompletion synchronization
2011-11-14 17:51:07 TRACE [org.hibernate.impl.SessionImpl-afterTransactionCompletion] - after transaction completion
2011-11-14 17:51:07 DEBUG [springframework.orm.hibernate3.SessionFactoryUtils-doClose] - Closing Hibernate Session
2011-11-14 17:51:07 TRACE [org.hibernate.impl.SessionImpl-close] - closing session
2011-11-14 17:51:07 TRACE [org.hibernate.jdbc.ConnectionManager-cleanup] - performing cleanup
2011-11-14 17:51:07 DEBUG [org.hibernate.jdbc.ConnectionManager-closeConnection] - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
2011-11-14 17:51:07 DEBUG [v2.c3p0.stmt.GooGooStatementCache-checkinAll] - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 2; checked out: 0; num connections: 2; num keys: 2
2011-11-14 17:51:07 DEBUG [mchange.v2.resourcepool.BasicResourcePool-trace] - trace com.mchange.v2.resourcepool.BasicResourcePool@20a13db [managed: 5, unused: 3, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@2131970)
2011-11-14 17:51:07 DEBUG [v2.c3p0.stmt.GooGooStatementCache-checkinAll] - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 2; checked out: 0; num connections: 2; num keys: 2
2011-11-14 17:51:07 TRACE [org.hibernate.jdbc.JDBCContext-afterTransactionCompletion] - after transaction completion
2011-11-14 17:51:07 DEBUG [org.hibernate.jdbc.ConnectionManager-afterTransaction] - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
2011-11-14 17:51:07 TRACE [org.hibernate.impl.SessionImpl-afterTransactionCompletion] - after transaction completion
2011-11-14 17:51:07 TRACE [springframework.transaction.support.TransactionSynchronizationManager-clearSynchronization] - Clearing transaction synchronization
2011-11-14 17:51:07 TRACE [springframework.transaction.support.TransactionSynchronizationManager-doUnbindResource] - Removed value [org.springframework.orm.hibernate3.SessionHolder@221d3cf] for key [org.hibernate.impl.SessionFactoryImpl@25209f9] from thread [Main Thread]
2011-11-14 17:51:07 TRACE [springframework.transaction.support.TransactionSynchronizationManager-doUnbindResource] - Removed value [org.springframework.jdbc.datasource.ConnectionHolder@222b571] for key [com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 2umlgt8j19p75yyrl43si|237b1ea, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.hsqldb.jdbcDriver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2umlgt8j19p75yyrl43si|237b1ea, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:hsqldb:hsql://localhost/dsvd_local, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 600, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 5, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]] from thread [Main Thread]
2011-11-14 17:51:07 DEBUG [springframework.orm.hibernate3.HibernateTransactionManager-doCleanupAfterCompletion] - Closing Hibernate Session [org.hibernate.impl.SessionImpl@22157c9] after transaction
2011-11-14 17:51:07 DEBUG [springframework.orm.hibernate3.SessionFactoryUtils-doClose] - Closing Hibernate Session
2011-11-14 17:51:07 TRACE [org.hibernate.impl.SessionImpl-close] - closing session
2011-11-14 17:51:07 TRACE [org.hibernate.jdbc.ConnectionManager-cleanup] - performing cleanup
2011-11-14 17:51:07 DEBUG [org.hibernate.jdbc.ConnectionManager-closeConnection] - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
2011-11-14 17:51:07 DEBUG [v2.c3p0.stmt.GooGooStatementCache-checkinAll] - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0
2011-11-14 17:51:07 DEBUG [mchange.v2.resourcepool.BasicResourcePool-trace] - trace com.mchange.v2.resourcepool.BasicResourcePool@215278d [managed: 5, unused: 4, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@2135f32)
2011-11-14 17:51:07 DEBUG [v2.c3p0.stmt.GooGooStatementCache-checkinAll] - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0
2011-11-14 17:51:07 TRACE [org.hibernate.jdbc.JDBCContext-afterTransactionCompletion] - after transaction completion
2011-11-14 17:51:07 DEBUG [org.hibernate.jdbc.ConnectionManager-afterTransaction] - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
2011-11-14 17:51:07 TRACE [org.hibernate.impl.SessionImpl-afterTransactionCompletion] - after transaction completion
Sure could use some help diagnosing this quirk.
TIA,
Still-learning Steve