org.hibernate.engine.jdbc.spi.JdbcCoordinator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
JPMS Module-Info's for a few of the Jakarta Libraries just until they add them in themselves
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.engine.jdbc.spi;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.Statement;
import org.hibernate.ConnectionReleaseMode;
import org.hibernate.engine.jdbc.batch.spi.Batch;
import org.hibernate.engine.jdbc.batch.spi.BatchKey;
import org.hibernate.jdbc.WorkExecutorVisitable;
import org.hibernate.resource.jdbc.ResourceRegistry;
import org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor;
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
import org.hibernate.resource.transaction.backend.jdbc.spi.JdbcResourceTransactionAccess;
import org.hibernate.resource.transaction.spi.TransactionCoordinatorOwner;
/**
* Coordinates JDBC-related activities.
*
* @author Steve Ebersole
* @author Brett Meyer
*/
public interface JdbcCoordinator extends Serializable, TransactionCoordinatorOwner, JdbcResourceTransactionAccess {
// /**
// * Retrieve the transaction coordinator associated with this JDBC coordinator.
// *
// * @return The transaction coordinator
// */
// public TransactionCoordinator getTransactionCoordinator();
/**
* Retrieves the logical connection associated with this JDBC coordinator.
*
* @return The logical connection
*/
LogicalConnectionImplementor getLogicalConnection();
/**
* Get a batch instance.
*
* @param key The unique batch key.
*
* @return The batch
*/
Batch getBatch(BatchKey key);
/**
* Execute the currently managed batch (if any)
*/
void executeBatch();
/**
* Abort the currently managed batch (if any)
*/
void abortBatch();
/**
* Obtain the statement preparer associated with this JDBC coordinator.
*
* @return This coordinator's statement preparer
*/
StatementPreparer getStatementPreparer();
/**
* Obtain the resultset extractor associated with this JDBC coordinator.
*
* @return This coordinator's resultset extractor
*/
ResultSetReturn getResultSetReturn();
/**
* 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()}
*/
void flushBeginning();
/**
* Callback to let us know that a flush is ending. We use this fact to
* stop circumventing aggressive releasing connections.
*/
void flushEnding();
/**
* Close this coordinator and release and resources.
*
* @return The {@link Connection} associated with the managed {@link #getLogicalConnection() logical connection}
*
* @see org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor#close
*/
Connection close();
/**
* Signals the end of transaction.
*
* Intended for use from the transaction coordinator, after local transaction completion. Used to conditionally
* release the JDBC connection aggressively if the configured release mode indicates.
*/
void afterTransaction();
/**
* Used to signify that a statement has completed execution which may
* indicate that this logical connection need to perform an
* aggressive release of its physical connection.
*/
void afterStatementExecution();
/**
* Perform the requested work handling exceptions, coordinating and handling return processing.
*
* @param work The work to be performed.
* @param The result type.
* @return The work result.
*/
T coordinateWork(WorkExecutorVisitable work);
/**
* Attempt to cancel the last query sent to the JDBC driver.
*/
void cancelLastQuery();
/**
* Calculate the amount of time, in seconds, still remaining before transaction timeout occurs.
*
* @return The number of seconds remaining until until a transaction timeout occurs. A negative value indicates
* no timeout was requested.
*
* @throws org.hibernate.TransactionException Indicates the time out period has already been exceeded.
*/
int determineRemainingTransactionTimeOutPeriod();
/**
* Enable connection releases
*/
void enableReleases();
/**
* Disable connection releases
*/
void disableReleases();
/**
* Register a query statement as being able to be cancelled.
*
* @param statement The cancel-able query statement.
*/
void registerLastQuery(Statement statement);
/**
* Can this coordinator be serialized?
*
* @return {@code true} indicates the coordinator can be serialized.
*/
boolean isReadyForSerialization();
/**
* The release mode under which this logical connection is operating.
*
* @return the release mode.
*
* @deprecated (since 5.2) use {@link PhysicalConnectionHandlingMode} via {@link #getLogicalConnection} instead
*/
@Deprecated
default ConnectionReleaseMode getConnectionReleaseMode() {
return getLogicalConnection().getConnectionHandlingMode().getReleaseMode();
}
/**
* The mode for physical handling of the JDBC Connection
*
* @return The JDBC Connection handlng mode
*
* @deprecated (since 5.2) access via {@link #getLogicalConnection} instead
*/
@Deprecated
default PhysicalConnectionHandlingMode getConnectionHandlingMode() {
return getLogicalConnection().getConnectionHandlingMode();
}
/**
* @deprecated (since 5.2) access via {@link #getLogicalConnection} instead
*/
@Deprecated
default ResourceRegistry getResourceRegistry() {
return getLogicalConnection().getResourceRegistry();
}
void serialize(ObjectOutputStream objectOutputStream) throws IOException;
}