[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - proper way to cast to OracleConnection
fuzzy333
do-not-reply at jboss.com
Tue May 12 16:02:27 EDT 2009
I'm using seam 2.1.1.GA + jboss 5.0.0.GA + hibernate, and I'm to find the proper way to get to the underlying OracleConnection from an entityManager. (I need to call setSessionTimeZone on the OracleConnection)
For the moment, I've got a hibernate interceptor that calls setSessionTimezone on this seam component from onPrepareStatement.
@In
| private EntityManager entityManager;
|
| @Logger
| private Log log;
|
| private Session getHibernateSession() {
| return (Session) entityManager.getDelegate();
| }
|
| public void setSessionTimezone(OracleConnection connection) throws SQLException {
| String currentTZ = connection.getSessionTimeZone();
| String vmTZ = TimeZone.getDefault().getID();
| if( currentTZ == null || currentTZ != vmTZ) {
| connection.setSessionTimeZone( vmTZ );
| }
| }
|
| public void setSessionTimezone() {
| Connection c = getHibernateSession().connection();
| try {
| setSessionTimezone((OracleConnection) c.getMetaData().getConnection());
| c.close();
| c = null;
| } catch (Exception e) {
| if (c != null) {
| try {
| c.close();
| } catch (Exception e2) {}
| }
| throw new RuntimeException(e);
| }
| }
Now this works more or less; I'm getting this in the logs since this has been added:
15:44:50,242 INFO [org.jboss.resource.connectionmanager.TxConnectionManager] throwable from unregister connection
| java.lang.IllegalStateException: Trying to return an unknown connection2! org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6 at 2189b8
| at org.jboss.resource.connectionmanager.CachedConnectionManager.unregisterConnection(CachedConnectionManager.java:330)
| at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:720)
| at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:362)
| at org.jboss.resource.adapter.jdbc.WrappedConnection.close(WrappedConnection.java:155)
| at org.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:97)
| at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:474)
| at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:429)
| at org.hibernate.jdbc.ConnectionManager.afterStatement(ConnectionManager.java:304)
| at org.hibernate.jdbc.ConnectionManager.flushEnding(ConnectionManager.java:503)
| at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:328)
| at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
| at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
| at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
| at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:504)
| at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:101)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:263)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:86)
| at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
| at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1414)
| at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
| at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
| at org.jboss.tm.usertx.client.ServerVMClientUserTransaction.commit(ServerVMClientUserTransaction.java:162)
| at org.jboss.seam.transaction.UTTransaction.commit(UTTransaction.java:52)
| at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:614)
| at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:605)
| at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsAfterPhase(SeamPhaseListener.java:343)
| at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:243)
| at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:194)
| at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
| at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
| at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| [snip...]
What does this message mean exactly? I figure I'm doing something wrong. Can someone point out what's wrong here or an alternative way of doing this?
Cheers,
John
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4230610#4230610
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4230610
More information about the jboss-user
mailing list