Skip to content

Commit 4781c09

Browse files
committed
migrate toward the new PersistenceUnitTransactionType from JPA 3.2
clean up the test base classes etc. Signed-off-by: Gavin King <[email protected]>
1 parent 437b59a commit 4781c09

34 files changed

+668
-712
lines changed

hibernate-core/src/main/java/org/hibernate/boot/jaxb/cfg/internal/SharedCacheModeMarshalling.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.hibernate.internal.util.StringHelper;
1010

1111
import jakarta.persistence.SharedCacheMode;
12-
import jakarta.persistence.spi.PersistenceUnitTransactionType;
1312

1413
/**
1514
* @author Steve Ebersole

hibernate-core/src/main/java/org/hibernate/boot/jaxb/cfg/internal/TransactionTypeMarshalling.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88

99
import org.hibernate.internal.util.StringHelper;
1010

11-
import jakarta.persistence.AccessType;
1211
import jakarta.persistence.spi.PersistenceUnitTransactionType;
1312

1413
/**
1514
* @author Steve Ebersole
1615
*/
16+
@SuppressWarnings("removal")
1717
public class TransactionTypeMarshalling {
1818
public static PersistenceUnitTransactionType fromXml(String name) {
1919
if ( StringHelper.isEmpty( name ) ) {
@@ -23,9 +23,6 @@ public static PersistenceUnitTransactionType fromXml(String name) {
2323
}
2424

2525
public static String toXml(PersistenceUnitTransactionType transactionType) {
26-
if ( transactionType == null ) {
27-
return null;
28-
}
29-
return transactionType.name();
26+
return transactionType == null ? null : transactionType.name();
3027
}
3128
}

hibernate-core/src/main/java/org/hibernate/cfg/PersistenceSettings.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ public interface PersistenceSettings {
3434
String JAKARTA_PERSISTENCE_PROVIDER = "jakarta.persistence.provider";
3535

3636
/**
37-
* Specifies the {@linkplain jakarta.persistence.spi.PersistenceUnitTransactionType
37+
* Specifies the {@linkplain jakarta.persistence.PersistenceUnitTransactionType
3838
* type of transactions} supported by the entity managers. The default depends on
3939
* whether the program is considered to be executing in a Java SE or EE environment:
4040
* <ul>
4141
* <li>For Java SE, the default is
42-
* {@link jakarta.persistence.spi.PersistenceUnitTransactionType#RESOURCE_LOCAL
42+
* {@link jakarta.persistence.PersistenceUnitTransactionType#RESOURCE_LOCAL
4343
* RESOURCE_LOCAL}.
4444
* <li>For Java EE, the default is
45-
* {@link jakarta.persistence.spi.PersistenceUnitTransactionType#JTA JTA}.
45+
* {@link jakarta.persistence.PersistenceUnitTransactionType#JTA JTA}.
4646
* </ul>
4747
* <p>
4848
* See JPA 2 sections 9.4.3 and 8.2.1.2

hibernate-core/src/main/java/org/hibernate/collection/spi/AbstractPersistentCollection.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,11 +1255,11 @@ protected static <E> Collection<E> getOrphans(
12551255
SharedSessionContractImplementor session) throws HibernateException {
12561256

12571257
// short-circuit(s)
1258-
if ( currentElements.size() == 0 ) {
1258+
if ( currentElements.isEmpty() ) {
12591259
// no new elements, the old list contains only Orphans
12601260
return oldElements;
12611261
}
1262-
if ( oldElements.size() == 0 ) {
1262+
if ( oldElements.isEmpty() ) {
12631263
// no old elements, so no Orphans neither
12641264
return oldElements;
12651265
}

hibernate-core/src/main/java/org/hibernate/collection/spi/PersistentBag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ public boolean containsAll(Collection<?> c) {
415415

416416
@Override
417417
public boolean addAll(Collection<? extends E> values) {
418-
if ( values.size() == 0 ) {
418+
if ( values.isEmpty() ) {
419419
return false;
420420
}
421421
if ( !isOperationQueueEnabled() ) {

hibernate-core/src/main/java/org/hibernate/collection/spi/PersistentList.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ public boolean containsAll(Collection<?> coll) {
227227

228228
@Override
229229
public boolean addAll(Collection<? extends E> values) {
230-
if ( values.size() == 0 ) {
230+
if ( values.isEmpty() ) {
231231
return false;
232232
}
233233
if ( !isOperationQueueEnabled() ) {
@@ -238,7 +238,7 @@ public boolean addAll(Collection<? extends E> values) {
238238
for ( E value : values ) {
239239
queueOperation( new SimpleAdd( value ) );
240240
}
241-
return values.size() > 0;
241+
return !values.isEmpty();
242242
}
243243
}
244244

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

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575
import org.hibernate.id.Configurable;
7676
import org.hibernate.integrator.spi.Integrator;
7777
import org.hibernate.integrator.spi.IntegratorService;
78-
import org.hibernate.internal.util.StringHelper;
7978
import org.hibernate.jpa.internal.ExceptionMapperLegacyJpaImpl;
8079
import org.hibernate.jpa.internal.PersistenceUnitUtilImpl;
8180
import org.hibernate.mapping.Collection;
@@ -146,6 +145,7 @@
146145
import static org.hibernate.engine.config.spi.StandardConverters.STRING;
147146
import static org.hibernate.internal.FetchProfileHelper.getFetchProfiles;
148147
import static org.hibernate.internal.log.DeprecationLogger.DEPRECATION_LOGGER;
148+
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
149149
import static org.hibernate.jpa.HibernateHints.HINT_TENANT_ID;
150150
import static org.hibernate.proxy.HibernateProxy.extractLazyInitializer;
151151
import static org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode.DELAYED_ACQUISITION_AND_RELEASE_AFTER_STATEMENT;
@@ -457,17 +457,16 @@ private static Map<String, Generator> createGenerators(
457457
for ( PersistentClass model : bootMetamodel.getEntityBindings() ) {
458458
if ( !model.isInherited() ) {
459459
final KeyValue id = model.getIdentifier();
460-
final Generator generator = id.createGenerator( dialect, (RootClass) model, model.getIdentifierProperty() );
461-
if ( generator instanceof Configurable ) {
462-
final Configurable identifierGenerator = (Configurable) generator;
463-
identifierGenerator.initialize( sqlStringGenerationContext );
460+
final Generator generator =
461+
id.createGenerator( dialect, (RootClass) model, model.getIdentifierProperty() );
462+
if ( generator instanceof Configurable configurable ) {
463+
configurable.initialize( sqlStringGenerationContext );
464464
}
465465
//TODO: this isn't a great place to do this
466-
if ( generator.allowAssignedIdentifiers() && id instanceof SimpleValue ) {
467-
final SimpleValue simpleValue = (SimpleValue) id;
468-
if ( simpleValue.getNullValue() == null ) {
469-
simpleValue.setNullValue( "undefined" );
470-
}
466+
if ( generator.allowAssignedIdentifiers()
467+
&& id instanceof SimpleValue simpleValue
468+
&& simpleValue.getNullValue() == null ) {
469+
simpleValue.setNullValue( "undefined" );
471470
}
472471
generators.put( model.getEntityName(), generator );
473472
}
@@ -559,12 +558,7 @@ private static String getSessionFactoryName(SessionFactoryOptions options, Sessi
559558

560559
final ConfigurationService configurationService = serviceRegistry.getService( ConfigurationService.class );
561560
assert configurationService != null;
562-
final String puName = configurationService.getSetting( PersistenceSettings.PERSISTENCE_UNIT_NAME, STRING );
563-
if ( puName != null ) {
564-
return puName;
565-
}
566-
567-
return null;
561+
return configurationService.getSetting( PersistenceSettings.PERSISTENCE_UNIT_NAME, STRING );
568562
}
569563

570564
private String determineJndiName(
@@ -574,19 +568,21 @@ private String determineJndiName(
574568
final ConfigurationService cfgService = serviceRegistry.getService( ConfigurationService.class );
575569
assert cfgService != null;
576570
final String explicitJndiName = cfgService.getSetting( SESSION_FACTORY_JNDI_NAME, STRING );
577-
if ( StringHelper.isNotEmpty( explicitJndiName ) ) {
571+
if ( isNotEmpty( explicitJndiName ) ) {
578572
return explicitJndiName;
579573
}
580574

581575
final String puName = cfgService.getSetting( PERSISTENCE_UNIT_NAME, STRING );
582576
// do not use name for JNDI if explicitly asked not to or if name comes from JPA persistence-unit name
583-
final boolean nameIsNotJndiName = options.isSessionFactoryNameAlsoJndiName() == Boolean.FALSE || StringHelper.isNotEmpty( puName );
577+
final boolean nameIsNotJndiName =
578+
options.isSessionFactoryNameAlsoJndiName() == Boolean.FALSE
579+
|| isNotEmpty( puName );
584580
return !nameIsNotJndiName ? name : null;
585581
}
586582

587583
private SessionBuilderImpl createDefaultSessionOpenOptionsIfPossible() {
588-
final CurrentTenantIdentifierResolver<Object> currentTenantIdentifierResolver = getCurrentTenantIdentifierResolver();
589-
if ( currentTenantIdentifierResolver == null ) {
584+
final CurrentTenantIdentifierResolver<Object> tenantIdResolver = getCurrentTenantIdentifierResolver();
585+
if ( tenantIdResolver == null ) {
590586
return withOptions();
591587
}
592588
else {
@@ -698,8 +694,8 @@ public StatelessSessionBuilder withStatelessOptions() {
698694

699695
@Override
700696
public StatelessSession openStatelessSession() {
701-
if ( this.defaultStatelessOptions != null ) {
702-
return this.defaultStatelessOptions.openStatelessSession();
697+
if ( defaultStatelessOptions != null ) {
698+
return defaultStatelessOptions.openStatelessSession();
703699
}
704700
else {
705701
return withStatelessOptions().openStatelessSession();
@@ -799,12 +795,10 @@ private <K,V> Session buildEntityManager(final SynchronizationType synchronizati
799795
if ( map != null ) {
800796
for ( Map.Entry<K, V> o : map.entrySet() ) {
801797
final K key = o.getKey();
802-
if ( key instanceof String ) {
803-
final String sKey = (String) key;
804-
if ( HINT_TENANT_ID.equals( sKey ) ) {
805-
continue;
798+
if ( key instanceof String string ) {
799+
if ( !HINT_TENANT_ID.equals( string ) ) {
800+
session.setProperty( string, o.getValue() );
806801
}
807-
session.setProperty( sKey, o.getValue() );
808802
}
809803
}
810804
}
@@ -849,7 +843,7 @@ public NodeBuilder getCriteriaBuilder() {
849843
return queryEngine.getCriteriaBuilder();
850844
}
851845

852-
@Override
846+
@Override @Deprecated
853847
public MetamodelImplementor getMetamodel() {
854848
validateNotClosed();
855849
return (MetamodelImplementor) runtimeMetamodels.getMappingMetamodel();
@@ -1033,7 +1027,7 @@ public void addNamedQuery(String name, Query query) {
10331027

10341028
// then try as a native-SQL or JPQL query
10351029
try {
1036-
QueryImplementor<?> hibernateQuery = query.unwrap( QueryImplementor.class );
1030+
final QueryImplementor<?> hibernateQuery = query.unwrap( QueryImplementor.class );
10371031
if ( hibernateQuery != null ) {
10381032
// create and register the proper NamedQueryDefinition...
10391033
if ( hibernateQuery instanceof NativeQueryImplementor ) {
@@ -1119,9 +1113,8 @@ public <E> Map<String, EntityGraph<? extends E>> getNamedEntityGraphs(Class<E> e
11191113
return getJpaMetamodel().getNamedEntityGraphs( entityType );
11201114
}
11211115

1122-
@Override
1116+
@Override @SuppressWarnings({"unchecked", "rawtypes"})
11231117
public void runInTransaction(Consumer<EntityManager> work) {
1124-
//noinspection unchecked,rawtypes
11251118
inTransaction( (Consumer) work );
11261119
}
11271120

@@ -1146,11 +1139,11 @@ public StatisticsImplementor getStatistics() {
11461139
}
11471140

11481141
public FilterDefinition getFilterDefinition(String filterName) throws HibernateException {
1149-
FilterDefinition def = filters.get( filterName );
1150-
if ( def == null ) {
1142+
final FilterDefinition filterDefinition = filters.get( filterName );
1143+
if ( filterDefinition == null ) {
11511144
throw new UnknownFilterException( filterName );
11521145
}
1153-
return def;
1146+
return filterDefinition;
11541147
}
11551148

11561149
@Override
@@ -1563,7 +1556,7 @@ public StatelessSessionBuilder connection(Connection connection) {
15631556
return this;
15641557
}
15651558

1566-
@Override
1559+
@Override @Deprecated
15671560
public StatelessSessionBuilder tenantIdentifier(String tenantIdentifier) {
15681561
this.tenantIdentifier = tenantIdentifier;
15691562
return this;

hibernate-core/src/main/java/org/hibernate/jpa/boot/internal/EntityManagerFactoryBuilderImpl.java

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
import jakarta.persistence.AttributeConverter;
8181
import jakarta.persistence.EntityManagerFactory;
8282
import jakarta.persistence.PersistenceException;
83-
import jakarta.persistence.spi.PersistenceUnitTransactionType;
83+
import jakarta.persistence.PersistenceUnitTransactionType;
8484

8585
import static java.lang.Boolean.parseBoolean;
8686
import static java.util.Collections.unmodifiableMap;
@@ -792,36 +792,40 @@ private void normalizeTransactionCoordinator(
792792
MergedSettings mergedSettings) {
793793
final PersistenceUnitTransactionType txnType =
794794
determineTransactionType( persistenceUnit, integrationSettingsCopy, mergedSettings );
795+
final boolean definiteJtaCoordinator =
796+
mergedSettings.getConfigurationValues().containsKey( TRANSACTION_COORDINATOR_STRATEGY )
797+
? handeTransactionCoordinatorStrategy( mergedSettings )
798+
: handleTransactionType( mergedSettings, txnType );
799+
mergedSettings.getConfigurationValues().put( IS_JTA_TXN_COORD, definiteJtaCoordinator );
800+
}
795801

796-
final boolean hasTxStrategy =
797-
mergedSettings.getConfigurationValues().containsKey( TRANSACTION_COORDINATOR_STRATEGY );
802+
private static boolean handeTransactionCoordinatorStrategy(MergedSettings mergedSettings) {
798803
final boolean definiteJtaCoordinator;
799-
if ( hasTxStrategy ) {
800-
log.overridingTransactionStrategyDangerous( TRANSACTION_COORDINATOR_STRATEGY );
801-
// see if we can tell whether it is a JTA coordinator
802-
final Object strategy =
803-
mergedSettings.getConfigurationValues().get( TRANSACTION_COORDINATOR_STRATEGY );
804-
definiteJtaCoordinator =
805-
strategy instanceof TransactionCoordinatorBuilder transactionCoordinatorBuilder
806-
&& transactionCoordinatorBuilder.isJta();
807-
}
808-
else {
809-
if ( txnType == PersistenceUnitTransactionType.JTA ) {
810-
mergedSettings.getConfigurationValues().put( TRANSACTION_COORDINATOR_STRATEGY,
811-
JtaTransactionCoordinatorBuilderImpl.class );
812-
definiteJtaCoordinator = true;
813-
}
814-
else if ( txnType == PersistenceUnitTransactionType.RESOURCE_LOCAL ) {
815-
mergedSettings.getConfigurationValues().put( TRANSACTION_COORDINATOR_STRATEGY,
816-
JdbcResourceLocalTransactionCoordinatorBuilderImpl.class );
817-
definiteJtaCoordinator = false;
818-
}
819-
else {
804+
log.overridingTransactionStrategyDangerous( TRANSACTION_COORDINATOR_STRATEGY );
805+
// see if we can tell whether it is a JTA coordinator
806+
final Object strategy =
807+
mergedSettings.getConfigurationValues().get( TRANSACTION_COORDINATOR_STRATEGY );
808+
definiteJtaCoordinator =
809+
strategy instanceof TransactionCoordinatorBuilder transactionCoordinatorBuilder
810+
&& transactionCoordinatorBuilder.isJta();
811+
return definiteJtaCoordinator;
812+
}
813+
814+
private static boolean handleTransactionType(MergedSettings mergedSettings, PersistenceUnitTransactionType txnType) {
815+
switch (txnType) {
816+
case JTA:
817+
mergedSettings.getConfigurationValues()
818+
.put( TRANSACTION_COORDINATOR_STRATEGY,
819+
JtaTransactionCoordinatorBuilderImpl.class );
820+
return true;
821+
case RESOURCE_LOCAL:
822+
mergedSettings.getConfigurationValues()
823+
.put( TRANSACTION_COORDINATOR_STRATEGY,
824+
JdbcResourceLocalTransactionCoordinatorBuilderImpl.class );
825+
return false;
826+
default:
820827
throw new IllegalStateException( "Could not determine TransactionCoordinator strategy to use" );
821-
}
822828
}
823-
824-
mergedSettings.getConfigurationValues().put( IS_JTA_TXN_COORD, definiteJtaCoordinator );
825829
}
826830

827831
private static PersistenceUnitTransactionType determineTransactionType(
@@ -839,8 +843,8 @@ private static PersistenceUnitTransactionType determineTransactionType(
839843
if ( intgTxnType != null ) {
840844
txnType = interpretTransactionType( intgTxnType );
841845
}
842-
else if ( persistenceUnit.getTransactionType() != null ) {
843-
txnType = persistenceUnit.getTransactionType();
846+
else if ( persistenceUnit.getPersistenceUnitTransactionType() != null ) {
847+
txnType = persistenceUnit.getPersistenceUnitTransactionType();
844848
}
845849
else {
846850
Object puPropTxnType = mergedSettings.getConfigurationValues().get( JAKARTA_TRANSACTION_TYPE );

0 commit comments

Comments
 (0)