Skip to content

Commit 437b59a

Browse files
committed
continue in attempt to clean up EMFBuilderImpl
Signed-off-by: Gavin King <[email protected]>
1 parent 226e859 commit 437b59a

File tree

7 files changed

+538
-460
lines changed

7 files changed

+538
-460
lines changed

hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ public class SessionFactoryOptionsBuilder implements SessionFactoryOptions {
207207
private boolean orderUpdatesEnabled;
208208
private boolean orderInsertsEnabled;
209209
private boolean collectionsInDefaultFetchGroupEnabled = true;
210-
private boolean UnownedAssociationTransientCheck;
211-
private boolean passProcedureParameterNames;
210+
private final boolean UnownedAssociationTransientCheck;
211+
private final boolean passProcedureParameterNames;
212212

213213
// JPA callbacks
214214
private final boolean callbacksEnabled;

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

Lines changed: 397 additions & 455 deletions
Large diffs are not rendered by default.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
6+
*/
7+
package org.hibernate.jpa.boot.internal;
8+
9+
import org.hibernate.boot.CacheRegionDefinition;
10+
import org.hibernate.boot.cfgxml.spi.LoadedConfig;
11+
import org.hibernate.cfg.Environment;
12+
import org.hibernate.internal.util.PropertiesHelper;
13+
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
14+
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
import java.util.Map;
18+
import java.util.Properties;
19+
import java.util.concurrent.ConcurrentHashMap;
20+
21+
import static org.hibernate.cfg.PersistenceSettings.PERSISTENCE_UNIT_NAME;
22+
import static org.hibernate.cfg.PersistenceSettings.SESSION_FACTORY_NAME;
23+
24+
public class MergedSettings {
25+
private final Map<String, Object> configurationValues =
26+
new ConcurrentHashMap<>(16, 0.75f, 1);
27+
28+
private List<CacheRegionDefinition> cacheRegionDefinitions;
29+
30+
/**
31+
* {@code MergedSettings} is initialized with {@code hibernate.properties}
32+
*/
33+
MergedSettings() {
34+
getConfigurationValues().putAll( PropertiesHelper.map( Environment.getProperties() ) );
35+
}
36+
37+
List<CacheRegionDefinition> getCacheRegionDefinitions() {
38+
return cacheRegionDefinitions;
39+
}
40+
41+
void processPersistenceUnitDescriptorProperties(PersistenceUnitDescriptor persistenceUnit) {
42+
final Properties properties = persistenceUnit.getProperties();
43+
if ( properties != null ) {
44+
getConfigurationValues().putAll( PropertiesHelper.map( properties ) );
45+
}
46+
getConfigurationValues().put( PERSISTENCE_UNIT_NAME, persistenceUnit.getName() );
47+
}
48+
49+
void processHibernateConfigXmlResources(LoadedConfig loadedConfig) {
50+
if ( !getConfigurationValues().containsKey( SESSION_FACTORY_NAME) ) {
51+
// there is not already a SF-name in the merged settings
52+
final String sessionFactoryName = loadedConfig.getSessionFactoryName();
53+
if ( sessionFactoryName != null ) {
54+
// but the cfg.xml file we are processing named one
55+
getConfigurationValues().put( SESSION_FACTORY_NAME, sessionFactoryName );
56+
}
57+
}
58+
// else {
59+
// make sure they match?
60+
// }
61+
getConfigurationValues().putAll( loadedConfig.getConfigurationValues() );
62+
}
63+
64+
public Map<String, Object> getConfigurationValues() {
65+
return configurationValues;
66+
}
67+
68+
void addCacheRegionDefinition(CacheRegionDefinition cacheRegionDefinition) {
69+
if ( cacheRegionDefinitions == null ) {
70+
cacheRegionDefinitions = new ArrayList<>();
71+
}
72+
cacheRegionDefinitions.add( cacheRegionDefinition );
73+
}
74+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.jpa.boot.internal;
8+
9+
import org.hibernate.SessionFactory;
10+
import org.hibernate.SessionFactoryObserver;
11+
import org.hibernate.engine.spi.SessionFactoryImplementor;
12+
import org.hibernate.service.spi.ServiceRegistryImplementor;
13+
14+
class ServiceRegistryCloser implements SessionFactoryObserver {
15+
/**
16+
* Singleton access
17+
*/
18+
public static final ServiceRegistryCloser INSTANCE = new ServiceRegistryCloser();
19+
20+
@Override
21+
public void sessionFactoryCreated(SessionFactory sessionFactory) {
22+
// nothing to do
23+
}
24+
25+
@Override
26+
public void sessionFactoryClosed(SessionFactory sessionFactory) {
27+
final SessionFactoryImplementor factoryImplementor = (SessionFactoryImplementor) sessionFactory;
28+
final ServiceRegistryImplementor serviceRegistry = factoryImplementor.getServiceRegistry();
29+
serviceRegistry.destroy();
30+
final ServiceRegistryImplementor basicRegistry =
31+
(ServiceRegistryImplementor) serviceRegistry.getParentServiceRegistry();
32+
if ( basicRegistry != null ) {
33+
basicRegistry.destroy();
34+
}
35+
}
36+
}

hibernate-core/src/main/java/org/hibernate/jpa/boot/spi/Bootstrap.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.hibernate.Internal;
1515
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
1616
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
17+
import org.hibernate.jpa.boot.internal.MergedSettings;
1718
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
1819

1920
import jakarta.persistence.spi.PersistenceUnitInfo;
@@ -93,7 +94,7 @@ public static EntityManagerFactoryBuilder getEntityManagerFactoryBuilder(
9394
public static EntityManagerFactoryBuilder getEntityManagerFactoryBuilder(
9495
PersistenceUnitDescriptor persistenceUnitDescriptor,
9596
Map integration,
96-
Consumer<EntityManagerFactoryBuilderImpl.MergedSettings> mergedSettingsBaseline) {
97+
Consumer<MergedSettings> mergedSettingsBaseline) {
9798
return new EntityManagerFactoryBuilderImpl( persistenceUnitDescriptor, integration, mergedSettingsBaseline );
9899
}
99100

@@ -124,7 +125,7 @@ public static EntityManagerFactoryBuilder getEntityManagerFactoryBuilder(
124125
public static EntityManagerFactoryBuilder getEntityManagerFactoryBuilder(
125126
PersistenceUnitInfo persistenceUnitInfo,
126127
Map integration,
127-
Consumer<EntityManagerFactoryBuilderImpl.MergedSettings> mergedSettingsBaseline) {
128+
Consumer<MergedSettings> mergedSettingsBaseline) {
128129
return getEntityManagerFactoryBuilder( new PersistenceUnitInfoDescriptor( persistenceUnitInfo ), integration, mergedSettingsBaseline );
129130
}
130131
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
6+
*/
7+
package org.hibernate.jpa.internal;
8+
9+
import jakarta.persistence.EntityNotFoundException;
10+
import org.hibernate.ObjectNotFoundException;
11+
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
12+
import org.hibernate.proxy.EntityNotFoundDelegate;
13+
14+
import java.io.Serializable;
15+
16+
public class JpaEntityNotFoundDelegate implements EntityNotFoundDelegate, Serializable {
17+
/**
18+
* Singleton access
19+
*/
20+
public static final JpaEntityNotFoundDelegate INSTANCE = new JpaEntityNotFoundDelegate();
21+
22+
public void handleEntityNotFound(String entityName, Object identifier) {
23+
final ObjectNotFoundException exception = new ObjectNotFoundException( entityName, identifier );
24+
throw new EntityNotFoundException( exception.getMessage(), exception );
25+
}
26+
}

hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/scanning/PackagedEntityManagerTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
package org.hibernate.orm.test.bootstrap.scanning;
88

99
import java.io.File;
10-
import java.util.HashMap;
1110
import java.util.HashSet;
1211
import java.util.Map;
1312
import java.util.Properties;

0 commit comments

Comments
 (0)