⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connectionmanager.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			if ( isFlushing ) {				log.debug( "skipping aggressive-release due to flush cycle" );			}			else if ( batcher.hasOpenResources() ) {				log.debug( "skipping aggresive-release due to open resources on batcher" );			}			else if ( borrowedConnection != null ) {				log.debug( "skipping aggresive-release due to borrowed connection" );			}			else {				aggressiveRelease();			}		}	}	/**	 * To be called after local transaction completion.  Used to conditionally	 * release the JDBC connection aggressively if the configured release mode	 * indicates.	 */	public void afterTransaction() {		if ( isAfterTransactionRelease() ) {			aggressiveRelease();		}		else if ( isAggressiveReleaseNoTransactionCheck() && batcher.hasOpenResources() ) {			log.info( "forcing batcher resource cleanup on transaction completion; forgot to close ScrollableResults/Iterator?" );			batcher.closeStatements();			aggressiveRelease();		}		else if ( isOnCloseRelease() ) {			// log a message about potential connection leaks			log.debug( "transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!" );		}		batcher.unsetTransactionTimeout();	}	private boolean isAfterTransactionRelease() {		return releaseMode == ConnectionReleaseMode.AFTER_TRANSACTION;	}	private boolean isOnCloseRelease() {		return releaseMode == ConnectionReleaseMode.ON_CLOSE;	}	/**	 * To be called after Session completion.  Used to release the JDBC	 * connection.	 *	 * @return The connection mantained here at time of close.  Null if	 * there was no connection cached internally.	 */	public Connection close() {		try {			return cleanup();		}		finally {			isClosed = true;		}	}	/**	 * Manually disconnect the underlying JDBC Connection.  The assumption here	 * is that the manager will be reconnected at a later point in time.	 *	 * @return The connection mantained here at time of disconnect.  Null if	 * there was no connection cached internally.	 */	public Connection manualDisconnect() {		return cleanup();	}	/**	 * Manually reconnect the underlying JDBC Connection.  Should be called at	 * some point after manualDisconnect().	 * <p/>	 * This form is used for ConnectionProvider-supplied connections.	 */	public void manualReconnect() {	}	/**	 * Manually reconnect the underlying JDBC Connection.  Should be called at	 * some point after manualDisconnect().	 * <p/>	 * This form is used for user-supplied connections.	 */	public void manualReconnect(Connection suppliedConnection) {		this.connection = suppliedConnection;	}	/**	 * Releases the Connection and cleans up any resources associated with	 * that Connection.  This is intended for use:	 * 1) at the end of the session	 * 2) on a manual disconnect of the session	 * 3) from afterTransaction(), in the case of skipped aggressive releasing	 *	 * @return The released connection.	 * @throws HibernateException	 */	private Connection cleanup() throws HibernateException {		releaseBorrowedConnection();		if ( connection == null ) {			log.trace( "connection already null in cleanup : no action");			return null;		}		try {			log.trace( "performing cleanup" );			batcher.closeStatements();			Connection c = null;			if ( !wasConnectionSupplied ) {				closeConnection();			}			else {				c = connection;			}			connection = null;			return c;		}		finally {			callback.connectionCleanedUp();		}	}	/**	 * Performs actions required to perform an aggressive release of the	 * JDBC Connection.	 */	private void aggressiveRelease() {		if ( !wasConnectionSupplied ) {			log.debug( "aggressively releasing JDBC connection" );			if ( connection != null ) {				closeConnection();			}		}	}	/**	 * Pysically opens a JDBC Connection.	 *	 * @throws HibernateException	 */	private void openConnection() throws HibernateException {		if ( connection != null ) {			return;		}		log.debug("opening JDBC connection");		try {			connection = factory.getConnectionProvider().getConnection();		}		catch (SQLException sqle) {			throw JDBCExceptionHelper.convert(					factory.getSQLExceptionConverter(),					sqle,					"Cannot open connection"				);		}		callback.connectionOpened(); // register synch; stats.connect()	}	/**	 * Physically closes the JDBC Connection.	 */	private void closeConnection() {		if ( log.isDebugEnabled() ) {			log.debug(					"releasing JDBC connection [" +					batcher.openResourceStatsAsString() + "]"				);		}		try {			if ( !connection.isClosed() ) {				JDBCExceptionReporter.logAndClearWarnings( connection );			}			factory.getConnectionProvider().closeConnection( connection );			connection = null;		}		catch (SQLException sqle) {			throw JDBCExceptionHelper.convert( 					factory.getSQLExceptionConverter(), 					sqle, 					"Cannot release connection"				);		}	}	/**	 * Callback to let us know that a flush is beginning.  We use this fact	 * to temporarily circumvent aggressive connection releasing until after	 * the flush cycle is complete {@link #flushEnding()}	 */	public void flushBeginning() {		log.trace( "registering flush begin" );		isFlushing = true;	}	/**	 * Callback to let us know that a flush is ending.  We use this fact to	 * stop circumventing aggressive releasing connections.	 */	public void flushEnding() {		log.trace( "registering flush end" );		isFlushing = false;		afterStatement();	}	public boolean isReadyForSerialization() {		return wasConnectionSupplied ? connection == null : !batcher.hasOpenResources();	}	/**	 * Used during serialization.	 *	 * @param oos The stream to which we are being written.	 * @throws IOException Indicates an I/O error writing to the stream	 */	private void writeObject(ObjectOutputStream oos) throws IOException {		if ( !isReadyForSerialization() ) {			throw new IllegalStateException( "Cannot serialize a ConnectionManager while connected" );		}		oos.writeObject( factory );		oos.writeObject( interceptor );		oos.defaultWriteObject();	}	/**	 * Used during deserialization.	 *	 * @param ois The stream from which we are being read.	 * @throws IOException Indicates an I/O error reading the stream	 * @throws ClassNotFoundException Indicates resource class resolution.	 */	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {		factory = (SessionFactoryImplementor) ois.readObject();		interceptor = (Interceptor) ois.readObject();		ois.defaultReadObject();		this.batcher = factory.getSettings().getBatcherFactory().createBatcher( this, interceptor );	}	public void serialize(ObjectOutputStream oos) throws IOException {		oos.writeBoolean( wasConnectionSupplied );		oos.writeBoolean( isClosed );	}	public static ConnectionManager deserialize(			ObjectInputStream ois,	        SessionFactoryImplementor factory,	        Interceptor interceptor,	        ConnectionReleaseMode connectionReleaseMode,	        JDBCContext jdbcContext) throws IOException {		return new ConnectionManager(				factory,		        jdbcContext,		        connectionReleaseMode,		        interceptor,		        ois.readBoolean(),		        ois.readBoolean()		);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -