public TransactionCoordinatorImpl( Connection userSuppliedConnection, TransactionContext transactionContext) { this.transactionContext = transactionContext; this.jdbcCoordinator = new JdbcCoordinatorImpl( userSuppliedConnection, this ); this.transactionEnvironment = transactionContext.getTransactionEnvironment(); this.transactionFactory = this.transactionEnvironment.getTransactionFactory(); this.observers = new ArrayList<TransactionObserver>(); this.synchronizationRegistry = new SynchronizationRegistryImpl(); reset(); final boolean registerSynchronization = transactionContext.isAutoCloseSessionEnabled() || transactionContext.isFlushBeforeCompletionEnabled() || transactionContext.getConnectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION; if ( registerSynchronization ) { pulse(); } }
public static TransactionCoordinatorImpl deserialize( ObjectInputStream ois, TransactionContext transactionContext) throws ClassNotFoundException, IOException { final JdbcCoordinatorImpl jdbcCoordinator = JdbcCoordinatorImpl.deserialize( ois, transactionContext ); final int observerCount = ois.readInt(); final List<TransactionObserver> observers = CollectionHelper.arrayList( observerCount ); for ( int i = 0; i < observerCount; i++ ) { observers.add( (TransactionObserver) ois.readObject() ); } final TransactionCoordinatorImpl transactionCoordinator = new TransactionCoordinatorImpl( transactionContext, jdbcCoordinator, observers ); jdbcCoordinator.afterDeserialize( transactionCoordinator ); return transactionCoordinator; }
/** * Deserialization hook * * @param ois The stream to read our state from * @param transactionContext The transactionContext which owns this logical connection * * @return The deserialized LogicalConnectionImpl * * @throws IOException Trouble accessing the stream * @throws ClassNotFoundException Trouble reading the stream */ public static LogicalConnectionImpl deserialize( ObjectInputStream ois, TransactionContext transactionContext) throws IOException, ClassNotFoundException { final boolean isUserSuppliedConnection = ois.readBoolean(); final boolean isClosed = ois.readBoolean(); final int observerCount = ois.readInt(); final List<ConnectionObserver> observers = CollectionHelper.arrayList( observerCount ); for ( int i = 0; i < observerCount; i++ ) { observers.add( (ConnectionObserver) ois.readObject() ); } return new LogicalConnectionImpl( transactionContext.getConnectionReleaseMode(), transactionContext.getTransactionEnvironment().getJdbcServices(), transactionContext.getJdbcConnectionAccess(), isUserSuppliedConnection, isClosed, observers ); }
public TransactionCoordinatorImpl( TransactionContext transactionContext, JdbcCoordinatorImpl jdbcCoordinator, List<TransactionObserver> observers) { this.transactionContext = transactionContext; this.jdbcCoordinator = jdbcCoordinator; this.transactionEnvironment = transactionContext.getTransactionEnvironment(); this.transactionFactory = this.transactionEnvironment.getTransactionFactory(); this.observers = observers; this.synchronizationRegistry = new SynchronizationRegistryImpl(); reset(); }
private TransactionContext transactionContext() { return transactionCoordinator.getTransactionContext(); }
@Override public TransactionContext getTransactionContext() { return transactionContext; }
public TransactionContext transactionContext() { return transactionContext; }
/** * Return whether the given Hibernate Session will always hold the same * JDBC Connection. This is used to check whether the transaction manager * can safely prepare and clean up the JDBC Connection used for a transaction. * <p>The default implementation checks the Session's connection release mode * to be "on_close". * @param session the Hibernate Session to check * @see org.hibernate.engine.transaction.spi.TransactionContext#getConnectionReleaseMode() * @see org.hibernate.ConnectionReleaseMode#ON_CLOSE */ protected boolean isSameConnectionForEntireSession(Session session) { if (!(session instanceof TransactionContext)) { // The best we can do is to assume we're safe. return true; } ConnectionReleaseMode releaseMode = ((TransactionContext) session).getConnectionReleaseMode(); return ConnectionReleaseMode.ON_CLOSE.equals(releaseMode); }
/** * JDK deserialization hook * * @param ois The stream into which to write our state * @param transactionContext The transaction context which owns the JdbcCoordinatorImpl to be deserialized. * * @return The deserialized JdbcCoordinatorImpl * * @throws IOException Trouble accessing the stream * @throws ClassNotFoundException Trouble reading the stream */ public static JdbcCoordinatorImpl deserialize( ObjectInputStream ois, TransactionContext transactionContext) throws IOException, ClassNotFoundException { return new JdbcCoordinatorImpl( LogicalConnectionImpl.deserialize( ois, transactionContext ) ); }