Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -901,7 +901,7 @@ public boolean isAllowOutOfTransactionUpdateOperations() {
}


@Override
@Override @Deprecated(forRemoval = true)
public boolean isReleaseResourcesOnCloseEnabled() {
return releaseResourcesOnCloseEnabled;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.hibernate.Interceptor;
import org.hibernate.Transaction;
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
import org.hibernate.engine.spi.TransactionCompletionCallbacksImplementor;
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
import org.hibernate.resource.jdbc.spi.StatementInspector;
import org.hibernate.resource.transaction.spi.TransactionCoordinator;
Expand Down Expand Up @@ -43,6 +44,7 @@ public interface CommonSharedSessionCreationOptions {
boolean isTransactionCoordinatorShared();
TransactionCoordinator getTransactionCoordinator();
JdbcCoordinator getJdbcCoordinator();
TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacksImplementor();
Transaction getTransaction();

TimeZone getJdbcTimeZone();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
import org.hibernate.Interceptor;
import org.hibernate.SessionEventListener;
import org.hibernate.Transaction;
import org.hibernate.engine.internal.TransactionCompletionCallbacksImpl;
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.engine.spi.TransactionCompletionCallbacksImplementor;
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
import org.hibernate.resource.jdbc.spi.StatementInspector;
import org.hibernate.resource.transaction.spi.TransactionCoordinator;
Expand Down Expand Up @@ -140,7 +140,7 @@ public Transaction getTransaction() {
}

@Override
public TransactionCompletionCallbacksImpl getTransactionCompletionCallbacks() {
return null;
public TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacks() {
return options.getTransactionCompletionCallbacksImplementor();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
import org.hibernate.SessionException;
import org.hibernate.Transaction;
import org.hibernate.engine.creation.spi.SharedSessionBuilderImplementor;
import org.hibernate.engine.internal.TransactionCompletionCallbacksImpl;
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.engine.spi.TransactionCompletionCallbacksImplementor;
import org.hibernate.internal.CoreLogging;
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
import org.hibernate.resource.jdbc.spi.StatementInspector;
Expand Down Expand Up @@ -277,6 +277,14 @@ public Transaction getTransaction() {
: null;
}

@Override
public TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacks() {
return shareTransactionContext
? original.getTransactionCompletionCallbacksImplementor()
: null;
}


// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// CommonSharedSessionCreationOptions

Expand Down Expand Up @@ -309,11 +317,6 @@ public CacheMode getInitialCacheMode() {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SharedSessionCreationOptions

@Override
public TransactionCompletionCallbacksImpl getTransactionCompletionCallbacks() {
return null;
}

@Override
public boolean shouldAutoJoinTransactions() {
return autoJoinTransactions;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
package org.hibernate.engine.creation.internal;

import org.hibernate.Transaction;
import org.hibernate.engine.internal.TransactionCompletionCallbacksImpl;
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
import org.hibernate.engine.spi.TransactionCompletionCallbacksImplementor;
import org.hibernate.resource.transaction.spi.TransactionCoordinator;

/**
Expand All @@ -25,5 +25,5 @@ public interface SharedSessionCreationOptions extends SessionCreationOptions {
TransactionCoordinator getTransactionCoordinator();
JdbcCoordinator getJdbcCoordinator();
Transaction getTransaction();
TransactionCompletionCallbacksImpl getTransactionCompletionCallbacks();
TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacks();
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.engine.spi.StatelessSessionImplementor;
import org.hibernate.engine.spi.TransactionCompletionCallbacksImplementor;
import org.hibernate.internal.CoreLogging;
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
import org.hibernate.resource.jdbc.spi.StatementInspector;
Expand Down Expand Up @@ -167,6 +168,13 @@ public JdbcCoordinator getJdbcCoordinator() {
: null;
}

@Override
public TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacksImplementor() {
return shareTransactionContext
? original.getTransactionCompletionCallbacksImplementor()
: null;
}

@Override
public Transaction getTransaction() {
return shareTransactionContext
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
package org.hibernate.engine.internal;

import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.engine.spi.TransactionCompletionCallbacks;
import org.hibernate.engine.spi.TransactionCompletionCallbacksImplementor;

/**
* @author Steve Ebersole
*/
public class TransactionCompletionCallbacksImpl implements TransactionCompletionCallbacks {
public class TransactionCompletionCallbacksImpl implements TransactionCompletionCallbacksImplementor {
private final SharedSessionContractImplementor session;

private BeforeTransactionCompletionProcessQueue beforeTransactionProcesses;
Expand All @@ -28,11 +28,13 @@ public void registerCallback(BeforeCompletionCallback process) {
beforeTransactionProcesses.register( process );
}

@Override
public boolean hasBeforeCompletionCallbacks() {
return beforeTransactionProcesses != null
&& beforeTransactionProcesses.hasActions();
}

@Override
public void beforeTransactionCompletion() {
if ( beforeTransactionProcesses != null && beforeTransactionProcesses.hasActions() ) {
beforeTransactionProcesses.beforeTransactionCompletion();
Expand All @@ -47,23 +49,27 @@ public void registerCallback(AfterCompletionCallback process) {
afterTransactionProcesses.register( process );
}

@Override
public boolean hasAfterCompletionCallbacks() {
return afterTransactionProcesses != null && afterTransactionProcesses.hasActions();
}

@Override
public void afterTransactionCompletion(boolean success) {
if ( afterTransactionProcesses != null && afterTransactionProcesses.hasActions() ) {
afterTransactionProcesses.afterTransactionCompletion( success );
}
}

@Override
public void addSpaceToInvalidate(String space) {
if ( afterTransactionProcesses == null ) {
afterTransactionProcesses = new AfterTransactionCompletionProcessQueue( session );
}
afterTransactionProcesses.addSpaceToInvalidate( space );
}
}

@Override
public TransactionCompletionCallbacksImpl forSharing() {
if ( beforeTransactionProcesses == null ) {
beforeTransactionProcesses = new BeforeTransactionCompletionProcessQueue( session );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public class ActionQueue implements TransactionCompletionCallbacks {


private transient boolean isTransactionCoordinatorShared;
private TransactionCompletionCallbacksImpl transactionCompletionCallbacks;;
private TransactionCompletionCallbacksImplementor transactionCompletionCallbacks;;

// Extract this as a constant to perform efficient iterations:
// method values() otherwise allocates a new array on each invocation.
Expand Down Expand Up @@ -725,7 +725,7 @@ public int numberOfInsertions() {
return insertions == null ? 0 : insertions.size();
}

public TransactionCompletionCallbacksImpl getTransactionCompletionCallbacks() {
public TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacks() {
return transactionCompletionCallbacks.forSharing();
}

Expand All @@ -738,7 +738,7 @@ public TransactionCompletionCallbacksImpl getTransactionCompletionCallbacks() {
* @param isTransactionCoordinatorShared Flag indicating shared transaction context.
*/
public void setTransactionCompletionCallbacks(
TransactionCompletionCallbacksImpl callbacks,
TransactionCompletionCallbacksImplementor callbacks,
boolean isTransactionCoordinatorShared) {
this.isTransactionCoordinatorShared = isTransactionCoordinatorShared;
this.transactionCompletionCallbacks = callbacks;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1175,6 +1175,11 @@ public TransactionCompletionCallbacks getTransactionCompletionCallbacks() {
return delegate.getTransactionCompletionCallbacks();
}

@Override
public TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacksImplementor() {
return delegate.getTransactionCompletionCallbacksImplementor();
}

@Override
public Object instantiate(EntityPersister persister, Object id) throws HibernateException {
return delegate.instantiate( persister, id );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,11 @@ default TransactionCompletionCallbacks getTransactionCompletionCallbacks() {
return getActionQueue();
}

@Override
default TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacksImplementor() {
return getActionQueue().getTransactionCompletionCallbacks();
}

/**
* Should this session be automatically closed after the current
* transaction completes?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,14 @@ default void checkTransactionNeededForUpdateOperation(String exceptionMessage) {
@Incubating
TransactionCompletionCallbacks getTransactionCompletionCallbacks();

/**
* Access to registered callbacks for transaction completion processing.
*
* @since 7.2
*/
@Incubating
TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacksImplementor();

/**
* Instantiate an {@link EntityKey} with the given id and for the
* entity represented by the given {@link EntityPersister}.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -732,4 +732,9 @@ public Transaction getCurrentTransaction() {
public SharedSessionBuilder sessionWithOptions() {
return delegate.sessionWithOptions();
}

@Override
public TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacksImplementor() {
return delegate.getTransactionCompletionCallbacksImplementor();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* SPDX-License-Identifier: Apache-2.0
* Copyright Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.engine.spi;

import org.hibernate.Incubating;

/**
* @since 7.2
*
* @author Gavin King
*
*/
@Incubating // is this separate interface really needed?
public interface TransactionCompletionCallbacksImplementor extends TransactionCompletionCallbacks {
/**
* Are there any registered before-completion callbacks?
*/
boolean hasBeforeCompletionCallbacks();

/**
* Are there any registered after-completion callbacks?
*/
boolean hasAfterCompletionCallbacks();

/**
* Execute registered before-completion callbacks, if any.
*/
void beforeTransactionCompletion();

/**
* Execute registered after-completion callbacks, if any.
*/
void afterTransactionCompletion(boolean success);

/**
* Register a cache space to be invalidated after successful transaction completion.
*/
void addSpaceToInvalidate(String space);

/**
* Ensure internal queues are initialized for sharing between sessions that share
* the same transaction coordinator. Returns this instance for convenience/fluency.
*/
TransactionCompletionCallbacksImplementor forSharing();
}
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ public SessionBuilderImplementor withOptions() {
return new SessionBuilderImpl( this ) {
@Override
protected SessionImplementor createSession() {
return new SessionImpl( (SessionFactoryImpl) sessionFactory, this );
return new SessionImpl( SessionFactoryImpl.this, this );
}
};
}
Expand All @@ -556,7 +556,7 @@ public StatelessSessionBuilder withStatelessOptions() {
return new StatelessSessionBuilderImpl( this ) {
@Override
protected StatelessSessionImplementor createStatelessSession() {
return new StatelessSessionImpl( (SessionFactoryImpl) sessionFactory, this );
return new StatelessSessionImpl( SessionFactoryImpl.this, this );
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1984,7 +1984,7 @@ public int getFetchBatchSize() {
return loadQueryInfluencers.getBatchSize();
}

@Override
@Override @Deprecated(forRemoval = true)
public LobHelper getLobHelper() {
return Hibernate.getLobHelper();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@
import org.hibernate.collection.spi.CollectionSemantics;
import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.engine.creation.internal.SessionCreationOptions;
import org.hibernate.engine.creation.internal.SharedSessionCreationOptions;
import org.hibernate.engine.internal.TransactionCompletionCallbacksImpl;
import org.hibernate.engine.spi.EntityKey;
import org.hibernate.engine.spi.LoadQueryInfluencers;
import org.hibernate.engine.spi.PersistenceContext;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.engine.spi.StatelessSessionImplementor;
import org.hibernate.engine.spi.TransactionCompletionCallbacks;
import org.hibernate.engine.spi.TransactionCompletionCallbacksImplementor;
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
import org.hibernate.event.monitor.spi.DiagnosticEvent;
import org.hibernate.event.service.spi.EventListenerGroups;
Expand Down Expand Up @@ -117,14 +119,18 @@ public class StatelessSessionImpl extends AbstractSharedSessionContract implemen
private final LoadQueryInfluencers influencers;
private final PersistenceContext temporaryPersistenceContext;
private final boolean connectionProvided;
private final TransactionCompletionCallbacksImpl transactionCompletionCallbacks;
private final TransactionCompletionCallbacksImplementor transactionCompletionCallbacks;

private final EventListenerGroups eventListenerGroups;

public StatelessSessionImpl(SessionFactoryImpl factory, SessionCreationOptions options) {
super( factory, options );
connectionProvided = options.getConnection() != null;
transactionCompletionCallbacks = new TransactionCompletionCallbacksImpl( this );
transactionCompletionCallbacks =
options instanceof SharedSessionCreationOptions sharedOptions
&& sharedOptions.isTransactionCoordinatorShared()
? sharedOptions.getTransactionCompletionCallbacks()
: new TransactionCompletionCallbacksImpl( this );
temporaryPersistenceContext = createPersistenceContext( this );
influencers = new LoadQueryInfluencers( getFactory() );
eventListenerGroups = factory.getEventListenerGroups();
Expand Down Expand Up @@ -1428,6 +1434,11 @@ public Object loadFromSecondLevelCache(EntityPersister persister, EntityKey enti
return CacheLoadHelper.loadFromSecondLevelCache( this, instanceToLoad, lockMode, persister, entityKey );
}

@Override
public TransactionCompletionCallbacksImplementor getTransactionCompletionCallbacksImplementor() {
return transactionCompletionCallbacks.forSharing();
}

@Override
public <T> T unwrap(Class<T> type) {
checkOpen();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,6 @@ public String[] getMappings() {
return new String[] { "interceptor/User.hbm.xml", "interceptor/Image.hbm.xml" };
}

@Override
protected String getBaseForMappings() {
return "org/hibernate/orm/test/";
}

@Test
public void testCollectionIntercept() {
Session s = openSession( new CollectionInterceptor() );
Expand Down
Loading