Skip to content

Commit 1f87e47

Browse files
committed
fix a couple of warnings by making StatefulPersistenceContext package-private
1 parent d0f3b67 commit 1f87e47

File tree

7 files changed

+76
-27
lines changed

7 files changed

+76
-27
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.engine.internal;
6+
7+
import org.hibernate.engine.spi.PersistenceContext;
8+
import org.hibernate.engine.spi.SharedSessionContractImplementor;
9+
import org.hibernate.internal.SessionImpl;
10+
11+
import java.io.IOException;
12+
import java.io.ObjectInputStream;
13+
import java.io.ObjectOutputStream;
14+
15+
/**
16+
* Operations to instantiate and (de)serialize {@link StatefulPersistenceContext}
17+
* without exposing the class outside this package.
18+
*
19+
* @author Gavin King
20+
*/
21+
public class PersistenceContexts {
22+
public static PersistenceContext createPersistenceContext(SharedSessionContractImplementor session) {
23+
return new StatefulPersistenceContext( session );
24+
}
25+
26+
public static PersistenceContext deserialize(ObjectInputStream ois, SessionImpl session)
27+
throws IOException, ClassNotFoundException {
28+
return StatefulPersistenceContext.deserialize( ois, session );
29+
}
30+
31+
public static void serialize(PersistenceContext persistenceContext, ObjectOutputStream oos)
32+
throws IOException {
33+
( (StatefulPersistenceContext) persistenceContext ).serialize( oos );
34+
}
35+
}

hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
* @author Steve Ebersole
9090
* @author Sanne Grinovero
9191
*/
92-
public class StatefulPersistenceContext implements PersistenceContext {
92+
class StatefulPersistenceContext implements PersistenceContext {
9393
private static final CoreMessageLogger LOG = Logger.getMessageLogger(
9494
MethodHandles.lookup(),
9595
CoreMessageLogger.class,
@@ -173,7 +173,7 @@ the following fields are used in all circumstances, and are not worth (or not su
173173
*
174174
* @param session The session "owning" this context.
175175
*/
176-
public StatefulPersistenceContext(SharedSessionContractImplementor session) {
176+
StatefulPersistenceContext(SharedSessionContractImplementor session) {
177177
this.session = session;
178178
this.entityEntryContext = new EntityEntryContext( this );
179179
}
@@ -430,7 +430,7 @@ public EntityHolder claimEntityHolderIfPossible(
430430
}
431431

432432
@Override
433-
public @Nullable EntityHolderImpl getEntityHolder(EntityKey key) {
433+
public @Nullable EntityHolder getEntityHolder(EntityKey key) {
434434
return entitiesByKey == null ? null : entitiesByKey.get( key );
435435
}
436436

@@ -535,7 +535,7 @@ public boolean containsEntity(EntityKey key) {
535535

536536
@Override
537537
public Object removeEntity(EntityKey key) {
538-
final EntityHolderImpl holder = removeEntityHolder( key );
538+
final EntityHolderImpl holder = removeHolder( key );
539539
if ( holder != null ) {
540540
final Object entity = holder.entity;
541541
if ( holder.proxy != null ) {
@@ -549,7 +549,11 @@ public Object removeEntity(EntityKey key) {
549549
}
550550

551551
@Override
552-
public @Nullable EntityHolderImpl removeEntityHolder(EntityKey key) {
552+
public @Nullable EntityHolder removeEntityHolder(EntityKey key) {
553+
return removeHolder( key );
554+
}
555+
556+
private EntityHolderImpl removeHolder(EntityKey key) {
553557
final EntityHolderImpl holder;
554558
if ( entitiesByKey != null ) {
555559
holder = entitiesByKey.remove( key );
@@ -1423,10 +1427,12 @@ public void setFlushing(boolean flushing) {
14231427
}
14241428
}
14251429

1426-
public boolean isRemovingOrphanBeforeUpates() {
1430+
@Override
1431+
public boolean isRemovingOrphanBeforeUpdates() {
14271432
return removeOrphanBeforeUpdatesCounter > 0;
14281433
}
14291434

1435+
@Override
14301436
public void beginRemoveOrphanBeforeUpdates() {
14311437
if ( getCascadeLevel() < 1 ) {
14321438
throw new IllegalStateException( "Attempt to remove orphan when not cascading." );
@@ -1443,6 +1449,7 @@ public void beginRemoveOrphanBeforeUpdates() {
14431449
removeOrphanBeforeUpdatesCounter++;
14441450
}
14451451

1452+
@Override
14461453
public void endRemoveOrphanBeforeUpdates() {
14471454
if ( getCascadeLevel() < 1 ) {
14481455
throw new IllegalStateException( "Finished removing orphan when not cascading." );
@@ -2317,7 +2324,7 @@ public NaturalIdResolutions getNaturalIdResolutions() {
23172324

23182325
@Override
23192326
public EntityHolder detachEntity(EntityKey key) {
2320-
final EntityHolderImpl entityHolder = removeEntityHolder( key );
2327+
final EntityHolderImpl entityHolder = removeHolder( key );
23212328
if ( entityHolder != null ) {
23222329
entityHolder.state = EntityHolderState.DETACHED;
23232330
}

hibernate-core/src/main/java/org/hibernate/engine/spi/PersistenceContext.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,12 @@ EntityHolder claimEntityHolderIfPossible(
745745
*/
746746
void setReadOnly(Object entityOrProxy, boolean readOnly);
747747

748+
boolean isRemovingOrphanBeforeUpdates();
749+
750+
void beginRemoveOrphanBeforeUpdates();
751+
752+
void endRemoveOrphanBeforeUpdates();
753+
748754
void replaceDelayedEntityIdentityInsertKeys(EntityKey oldKey, Object generatedId);
749755

750756
@Internal
@@ -856,10 +862,9 @@ EntityHolder claimEntityHolderIfPossible(
856862
NaturalIdResolutions getNaturalIdResolutions();
857863

858864
/**
859-
Remove the {@link EntityHolder} and set its state to DETACHED
865+
Remove the {@link EntityHolder} and set its state to {@code DETACHED}.
860866
*/
861867
default @Nullable EntityHolder detachEntity(EntityKey key) {
862-
EntityHolder entityHolder = removeEntityHolder( key );
863-
return entityHolder;
868+
return removeEntityHolder( key );
864869
}
865870
}

hibernate-core/src/main/java/org/hibernate/event/internal/DefaultEvictEventListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
import org.hibernate.internal.CoreLogging;
1919
import org.hibernate.internal.CoreMessageLogger;
2020
import org.hibernate.persister.entity.EntityPersister;
21-
import org.hibernate.proxy.HibernateProxy;
2221
import org.hibernate.proxy.LazyInitializer;
2322

2423
import static org.hibernate.pretty.MessageHelper.infoString;
24+
import static org.hibernate.proxy.HibernateProxy.extractLazyInitializer;
2525

2626
/**
2727
* Defines the default evict event listener used by hibernate for evicting entities
@@ -48,7 +48,7 @@ public void onEvict(EvictEvent event) throws HibernateException {
4848
if ( object == null ) {
4949
throw new NullPointerException( "null passed to Session.evict()" );
5050
}
51-
final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( object );
51+
final LazyInitializer lazyInitializer = extractLazyInitializer( object );
5252
if ( lazyInitializer != null ) {
5353
final Object id = lazyInitializer.getInternalIdentifier();
5454
if ( id == null ) {

hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
import org.hibernate.UnresolvableObjectException;
5656
import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor;
5757
import org.hibernate.collection.spi.PersistentCollection;
58-
import org.hibernate.engine.internal.StatefulPersistenceContext;
58+
import org.hibernate.engine.internal.PersistenceContexts;
5959
import org.hibernate.engine.jdbc.LobCreator;
6060
import org.hibernate.engine.jdbc.env.internal.NonContextualLobCreator;
6161
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
@@ -217,7 +217,7 @@
217217
* session, and such actions are executed asynchronously when the session is {@linkplain #flush flushed}. The
218218
* motivation behind this architecture is two-fold: first, it enables customization by sophisticated extensions to
219219
* Hibernate ORM, and, second, it enables the transactional write-behind semantics of a stateful session. The stateful
220-
* session holds its state in an instance of {@link StatefulPersistenceContext}, which we may view as the first-level
220+
* session holds its state in an instance of {@code StatefulPersistenceContext}, which we may view as the first-level
221221
* cache associated with the session.
222222
*
223223
* @author Gavin King
@@ -238,7 +238,7 @@ public class SessionImpl
238238

239239
private transient ActionQueue actionQueue;
240240
private transient EventListenerGroups eventListenerGroups;
241-
private transient StatefulPersistenceContext persistenceContext;
241+
private transient PersistenceContext persistenceContext;
242242

243243
private transient LoadQueryInfluencers loadQueryInfluencers;
244244

@@ -313,8 +313,8 @@ private FlushMode getInitialFlushMode() {
313313
: ConfigurationHelper.getFlushMode( getSessionProperty( HINT_FLUSH_MODE ), FlushMode.AUTO );
314314
}
315315

316-
protected StatefulPersistenceContext createPersistenceContext() {
317-
return new StatefulPersistenceContext( this );
316+
protected PersistenceContext createPersistenceContext() {
317+
return PersistenceContexts.createPersistenceContext( this );
318318
}
319319

320320
protected ActionQueue createActionQueue() {
@@ -864,7 +864,7 @@ private void fireMerge(final MergeContext mergeContext, final MergeEvent event)
864864
@Override
865865
public void delete(String entityName, Object object, boolean isCascadeDeleteEnabled, DeleteContext transientEntities) {
866866
checkOpenOrWaitingForAutoClose();
867-
final boolean removingOrphanBeforeUpdates = persistenceContext.isRemovingOrphanBeforeUpates();
867+
final boolean removingOrphanBeforeUpdates = persistenceContext.isRemovingOrphanBeforeUpdates();
868868
final boolean traceEnabled = log.isTraceEnabled();
869869
if ( traceEnabled && removingOrphanBeforeUpdates ) {
870870
logRemoveOrphanBeforeUpdates( "before continuing", entityName, object );
@@ -2992,7 +2992,7 @@ private void writeObject(ObjectOutputStream oos) throws IOException {
29922992

29932993
oos.defaultWriteObject();
29942994

2995-
persistenceContext.serialize( oos );
2995+
PersistenceContexts.serialize( persistenceContext, oos );
29962996
actionQueue.serialize( oos );
29972997

29982998
oos.writeObject( loadQueryInfluencers );
@@ -3014,7 +3014,7 @@ private void readObject(ObjectInputStream ois) throws IOException, ClassNotFound
30143014

30153015
ois.defaultReadObject();
30163016

3017-
persistenceContext = StatefulPersistenceContext.deserialize( ois, this );
3017+
persistenceContext = PersistenceContexts.deserialize( ois, this );
30183018
actionQueue = ActionQueue.deserialize( ois, this );
30193019

30203020
loadQueryInfluencers = (LoadQueryInfluencers) ois.readObject();

hibernate-core/src/main/java/org/hibernate/internal/StatelessSessionImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import org.hibernate.cache.spi.access.SoftLock;
2525
import org.hibernate.collection.spi.CollectionSemantics;
2626
import org.hibernate.collection.spi.PersistentCollection;
27-
import org.hibernate.engine.internal.StatefulPersistenceContext;
27+
import org.hibernate.engine.internal.PersistenceContexts;
2828
import org.hibernate.engine.spi.CollectionEntry;
2929
import org.hibernate.engine.spi.EffectiveEntityGraph;
3030
import org.hibernate.engine.spi.EntityHolder;
@@ -115,7 +115,7 @@
115115
* cannot, unfortunately, reuse the various {@link org.hibernate.action.internal.EntityAction} subtypes. This is
116116
* a pity, since it results in some code duplication. On the other hand, a {@code StatelessSession} is easier to
117117
* debug and understand. A {@code StatelessSession} does hold state in a long-lived {@link PersistenceContext},
118-
* but it does temporarily keep state within an instance of {@link StatefulPersistenceContext} while processing
118+
* but it does temporarily keep state within an instance of {@code StatefulPersistenceContext} while processing
119119
* the results of a given query.
120120
*
121121
* @author Gavin King
@@ -134,7 +134,7 @@ public class StatelessSessionImpl extends AbstractSharedSessionContract implemen
134134
public StatelessSessionImpl(SessionFactoryImpl factory, SessionCreationOptions options) {
135135
super( factory, options );
136136
connectionProvided = options.getConnection() != null;
137-
temporaryPersistenceContext = new StatefulPersistenceContext( this );
137+
temporaryPersistenceContext = PersistenceContexts.createPersistenceContext( this );
138138
influencers = new LoadQueryInfluencers( getFactory() );
139139
eventListenerGroups = factory.getEventListenerGroups();
140140
setUpMultitenancy( factory, influencers );

hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import org.hibernate.engine.internal.CacheHelper;
4949
import org.hibernate.engine.internal.ImmutableEntityEntryFactory;
5050
import org.hibernate.engine.internal.MutableEntityEntryFactory;
51-
import org.hibernate.engine.internal.StatefulPersistenceContext;
5251
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
5352
import org.hibernate.engine.profile.internal.FetchProfileAffectee;
5453
import org.hibernate.engine.spi.CachedNaturalIdValueSource;
@@ -3853,15 +3852,18 @@ private void handleNaturalIdReattachment(Object entity, SharedSessionContractImp
38533852
// for reattachment of mutable natural-ids, we absolutely positively have to grab the snapshot from the
38543853
// database, because we have no other way to know if the state changed while detached.
38553854
final Object[] entitySnapshot = persistenceContext.getDatabaseSnapshot( id, this );
3856-
final Object naturalIdSnapshot = entitySnapshot == StatefulPersistenceContext.NO_ROW
3857-
? null
3858-
: naturalIdMapping.extractNaturalIdFromEntityState( entitySnapshot );
3855+
final Object naturalIdSnapshot = naturalIdFromSnapshot( entitySnapshot );
38593856

38603857
naturalIdResolutions.removeSharedResolution( id, naturalIdSnapshot, this, false );
38613858
final Object naturalId = naturalIdMapping.extractNaturalIdFromEntity( entity );
38623859
naturalIdResolutions.manageLocalResolution( id, naturalId, this, CachedNaturalIdValueSource.UPDATE );
38633860
}
38643861

3862+
private Object naturalIdFromSnapshot(Object[] entitySnapshot) {
3863+
return entitySnapshot == PersistenceContext.NO_ROW ? null
3864+
: naturalIdMapping.extractNaturalIdFromEntityState( entitySnapshot );
3865+
}
3866+
38653867
@Override
38663868
public Boolean isTransient(Object entity, SharedSessionContractImplementor session) throws HibernateException {
38673869
final Object id = getIdentifier( entity, session );

0 commit comments

Comments
 (0)