[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