Skip to content

Commit 9682d8f

Browse files
committed
cleanups to the service package
- get rid of some raw types - remove an obsolete exceptipon type - use ServiceLogger
1 parent e0980a5 commit 9682d8f

11 files changed

+73
-104
lines changed

hibernate-core/src/main/java/org/hibernate/service/NullServiceException.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010
* @author Andrea Boriero
1111
*/
1212
public class NullServiceException extends ServiceException {
13-
public final Class serviceRole;
13+
public final Class<?> serviceRole;
1414

15-
public NullServiceException(Class serviceRole) {
15+
public NullServiceException(Class<?> serviceRole) {
1616
super( "Unknown service requested [" + serviceRole.getName() + "]" );
1717
this.serviceRole = serviceRole;
1818
}
1919

20-
public Class getServiceRole() {
20+
public Class<?> getServiceRole() {
2121
return serviceRole;
2222
}
2323
}

hibernate-core/src/main/java/org/hibernate/service/StandardServiceInitiators.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ private static List<StandardServiceInitiator<?>> buildStandardServiceInitiatorLi
5959

6060
// Please do not rearrange - it's useful to maintain this particular order
6161
// so to simplify comparisons with custom initiator lists in other projects;
62-
// for example we customize this list in Hibernate Reactive and Quarkus.
62+
// for example, we customize this list in Hibernate Reactive and Quarkus.
6363

6464
final ArrayList<StandardServiceInitiator<?>> serviceInitiators = new ArrayList<>();
6565

hibernate-core/src/main/java/org/hibernate/service/UnknownServiceException.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111
* @author Steve Ebersole
1212
*/
1313
public class UnknownServiceException extends ServiceException {
14-
public final Class serviceRole;
14+
public final Class<?> serviceRole;
1515

16-
public UnknownServiceException(Class serviceRole) {
16+
public UnknownServiceException(Class<?> serviceRole) {
1717
super( "Unknown service requested [" + serviceRole.getName() + "]" );
1818
this.serviceRole = serviceRole;
1919
}
2020

21-
public Class getServiceRole() {
21+
public Class<?> getServiceRole() {
2222
return serviceRole;
2323
}
2424
}

hibernate-core/src/main/java/org/hibernate/service/UnknownUnwrapTypeException.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
* @author Steve Ebersole
1111
*/
1212
public class UnknownUnwrapTypeException extends HibernateException {
13-
public UnknownUnwrapTypeException(Class unwrapType) {
13+
public UnknownUnwrapTypeException(Class<?> unwrapType) {
1414
super( "Cannot unwrap to requested type [" + unwrapType.getName() + "]" );
1515
}
1616

17-
public UnknownUnwrapTypeException(Class unwrapType, Throwable root) {
17+
public UnknownUnwrapTypeException(Class<?> unwrapType, Throwable root) {
1818
this( unwrapType );
1919
super.initCause( root );
2020
}

hibernate-core/src/main/java/org/hibernate/service/internal/AbstractServiceRegistryImpl.java

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,12 @@ protected <R extends Service> void createServiceBinding(ServiceInitiator<R> init
110110
}
111111

112112
protected <R extends Service> void createServiceBinding(ProvidedService<R> providedService) {
113-
var binding = locateServiceBinding( providedService.getServiceRole(), false );
113+
var binding = locateServiceBinding( providedService.serviceRole(), false );
114114
if ( binding == null ) {
115-
binding = new ServiceBinding<>( this, providedService.getServiceRole(), providedService.getService() );
116-
serviceBindingMap.put( providedService.getServiceRole(), binding );
115+
binding = new ServiceBinding<>( this, providedService.serviceRole(), providedService.service() );
116+
serviceBindingMap.put( providedService.serviceRole(), binding );
117117
}
118-
registerService( binding, providedService.getService() );
118+
registerService( binding, providedService.service() );
119119
}
120120

121121
protected void visitServiceBindings(Consumer<ServiceBinding<?>> action) {
@@ -156,18 +156,21 @@ protected void visitServiceBindings(Consumer<ServiceBinding<?>> action) {
156156

157157
// perform a crawl looking for an alternate registration
158158
for ( var binding : serviceBindingMap.values() ) {
159-
if ( serviceRole.isAssignableFrom( binding.getServiceRole() ) ) {
159+
final Class<?> bindingServiceRole = binding.getServiceRole();
160+
if ( serviceRole.isAssignableFrom( bindingServiceRole ) ) {
160161
// we found an alternate...
161-
SERVICE_LOGGER.alternateServiceRole( serviceRole.getName(), binding.getServiceRole().getName() );
162-
registerAlternate( serviceRole, binding.getServiceRole() );
162+
SERVICE_LOGGER.alternateServiceRole( serviceRole.getName(), bindingServiceRole.getName() );
163+
registerAlternate( serviceRole, bindingServiceRole );
163164
return (ServiceBinding<R>) binding;
164165
}
165-
166-
if ( binding.getService() != null && serviceRole.isInstance( binding.getService() ) ) {
167-
// we found an alternate...
168-
SERVICE_LOGGER.alternateServiceRole( serviceRole.getName(), binding.getServiceRole().getName() );
169-
registerAlternate( serviceRole, binding.getServiceRole() );
170-
return (ServiceBinding<R>) binding;
166+
else {
167+
final var bindingService = binding.getService();
168+
if ( serviceRole.isInstance( bindingService ) ) {
169+
// we found an alternate...
170+
SERVICE_LOGGER.alternateServiceRole( serviceRole.getName(), bindingServiceRole.getName() );
171+
registerAlternate( serviceRole, bindingServiceRole );
172+
return (ServiceBinding<R>) binding;
173+
}
171174
}
172175
}
173176

@@ -183,10 +186,8 @@ private void registerAlternate(Class<?> alternate, Class<?> target) {
183186
// Fast-path for ClassLoaderService as it's extremely hot during bootstrap
184187
// (and after bootstrap service loading performance is less interesting as it's
185188
// ideally being cached by long-term consumers)
186-
if ( ClassLoaderService.class == serviceRole ) {
187-
if ( parent != null ) {
188-
return parent.getService( serviceRole );
189-
}
189+
if ( ClassLoaderService.class == serviceRole && parent != null ) {
190+
return parent.getService( serviceRole );
190191
}
191192
// TODO: should an exception be thrown if active == false???
192193
R service = serviceRole.cast( initializedServiceByRole.get( serviceRole ) );
@@ -231,7 +232,7 @@ protected <R extends Service> void registerService(ServiceBinding<R> serviceBind
231232
}
232233

233234
// PHASE 1: create service
234-
R service = createService( serviceBinding );
235+
final R service = createService( serviceBinding );
235236
if ( service == null ) {
236237
return null;
237238
}
@@ -256,7 +257,7 @@ protected <R extends Service> void registerService(ServiceBinding<R> serviceBind
256257
}
257258

258259
try {
259-
R service = serviceBinding.getLifecycleOwner().initiateService( serviceInitiator );
260+
final R service = serviceBinding.getLifecycleOwner().initiateService( serviceInitiator );
260261
// IMPL NOTE: the register call here is important to avoid potential stack overflow issues
261262
// from recursive calls through #configureService
262263
if ( service != null ) {
@@ -276,18 +277,16 @@ protected <R extends Service> void registerService(ServiceBinding<R> serviceBind
276277
@Override
277278
public <R extends Service> void injectDependencies(ServiceBinding<R> serviceBinding) {
278279
final R service = serviceBinding.getService();
279-
280280
applyInjections( service );
281-
282281
if ( service instanceof ServiceRegistryAwareService serviceRegistryAwareService ) {
283282
serviceRegistryAwareService.injectServices( this );
284283
}
285284
}
286285

287286
private <R extends Service> void applyInjections(R service) {
288287
try {
289-
for ( Method method : service.getClass().getMethods() ) {
290-
final InjectService injectService = method.getAnnotation( InjectService.class );
288+
for ( var method : service.getClass().getMethods() ) {
289+
final var injectService = method.getAnnotation( InjectService.class );
291290
if ( injectService != null ) {
292291
processInjection( service, method, injectService );
293292
}
@@ -299,23 +298,14 @@ private <R extends Service> void applyInjections(R service) {
299298
}
300299

301300
private <T extends Service> void processInjection(T service, Method injectionMethod, InjectService injectService) {
302-
final Class<?>[] parameterTypes = injectionMethod.getParameterTypes();
303-
if ( injectionMethod.getParameterCount() != 1 ) {
304-
throw new ServiceDependencyException(
305-
"Encountered @InjectService on method with unexpected number of parameters"
306-
);
307-
}
308-
309-
//noinspection rawtypes
310-
Class dependentServiceRole = injectService.serviceRole();
311-
if ( dependentServiceRole == null || dependentServiceRole.equals( Void.class ) ) {
312-
dependentServiceRole = parameterTypes[0];
313-
}
301+
injectDependentService( service, injectionMethod, injectService,
302+
dependentServiceRole( injectionMethod, injectService ) );
303+
}
314304

305+
private <T extends Service> void injectDependentService(T service, Method injectionMethod, InjectService injectService, Class<? extends Service> dependentServiceRole) {
315306
// todo : because of the use of proxies, this is no longer returning null here...
316307

317-
//noinspection unchecked
318-
final Service dependantService = getService( dependentServiceRole );
308+
final var dependantService = getService( dependentServiceRole );
319309
if ( dependantService == null ) {
320310
if ( injectService.required() ) {
321311
throw new ServiceDependencyException(
@@ -333,6 +323,25 @@ private <T extends Service> void processInjection(T service, Method injectionMet
333323
}
334324
}
335325

326+
private static Class<? extends Service> dependentServiceRole(Method injectionMethod, InjectService injectService) {
327+
final var parameterTypes = injectionMethod.getParameterTypes();
328+
if ( injectionMethod.getParameterCount() != 1 ) {
329+
throw new ServiceDependencyException(
330+
"Encountered @InjectService on method with unexpected number of parameters"
331+
);
332+
}
333+
334+
final var dependentServiceRole = injectService.serviceRole();
335+
if ( dependentServiceRole == null
336+
|| Void.class.equals( dependentServiceRole ) // old default value
337+
|| Service.class.equals( dependentServiceRole ) ) { // new default value
338+
return (Class<? extends Service>) parameterTypes[0];
339+
}
340+
else {
341+
return dependentServiceRole;
342+
}
343+
}
344+
336345
@Override
337346
public <R extends Service> void startService(ServiceBinding<R> serviceBinding) {
338347
if ( serviceBinding.getService() instanceof Startable startable ) {

hibernate-core/src/main/java/org/hibernate/service/internal/ProvidedService.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,5 @@
99
*
1010
* @author Steve Ebersole
1111
*/
12-
public class ProvidedService<R> {
13-
private final Class<R> serviceRole;
14-
private final R service;
15-
16-
public ProvidedService(Class<R> serviceRole, R service) {
17-
this.serviceRole = serviceRole;
18-
this.service = service;
19-
}
20-
21-
public Class<R> getServiceRole() {
22-
return serviceRole;
23-
}
24-
25-
public R getService() {
26-
return service;
27-
}
12+
public record ProvidedService<R>(Class<R> serviceRole, R service) {
2813
}

hibernate-core/src/main/java/org/hibernate/service/internal/ServiceLogger.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@
1919
import java.lang.invoke.MethodHandles;
2020
import java.util.ServiceConfigurationError;
2121

22+
import static org.jboss.logging.Logger.Level.DEBUG;
2223
import static org.jboss.logging.Logger.Level.INFO;
2324
import static org.jboss.logging.Logger.Level.TRACE;
2425
import static org.jboss.logging.Logger.Level.WARN;
2526

2627
/**
27-
* Miscellaneous logging related to Hibernate ORM Core.
28+
* Logging related to Hibernate Services.
2829
*/
2930
@SubSystemLogging(
3031
name = SessionLogging.NAME,
31-
description = "Miscellaneous Logging related to Hibernate ORM Core"
32+
description = "Logging related to Hibernate Services"
3233
)
3334
@MessageLogger(projectCode = "HHH")
3435
@ValidIdRange(min=10002,max = 20000)
@@ -67,4 +68,9 @@ public interface ServiceLogger extends BasicLogger {
6768
@LogMessage(level = TRACE)
6869
@Message(id = 10453, value = "Skipping destroying bootstrap registry after deregistration of every child ServiceRegistry")
6970
void skippingBootstrapRegistryDestruction();
71+
72+
@LogMessage(level = DEBUG)
73+
@Message( id = 10454, value = "EventListenerRegistry access via ServiceRegistry is deprecated - "
74+
+ "use 'sessionFactory.getEventEngine().getListenerRegistry()' instead" )
75+
void eventListenerRegistryAccessDeprecated();
7076
}

hibernate-core/src/main/java/org/hibernate/service/internal/ServiceProxyGenerationException.java

Lines changed: 0 additions & 22 deletions
This file was deleted.

hibernate-core/src/main/java/org/hibernate/service/internal/SessionFactoryServiceRegistryBuilderImpl.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,8 @@ public class SessionFactoryServiceRegistryBuilderImpl implements SessionFactoryS
2929
public SessionFactoryServiceRegistryBuilderImpl(ServiceRegistryImplementor parent) {
3030
this.parent = parent;
3131
if ( parent != null ) {
32-
for ( var iterator = initiators.iterator(); iterator.hasNext(); ) {
33-
final var initiator = iterator.next();
34-
if ( parent.locateServiceBinding( initiator.getServiceInitiated() ) != null ) {
35-
// Parent takes precedence over the standard service initiators
36-
iterator.remove();
37-
}
38-
}
39-
32+
// Parent takes precedence over the standard service initiators
33+
initiators.removeIf( initiator -> parent.locateServiceBinding( initiator.getServiceInitiated() ) != null );
4034
}
4135
}
4236

hibernate-core/src/main/java/org/hibernate/service/internal/SessionFactoryServiceRegistryImpl.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,17 @@
1919
import org.hibernate.service.spi.SessionFactoryServiceInitiatorContext;
2020
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
2121

22-
import org.jboss.logging.Logger;
23-
2422
import org.checkerframework.checker.nullness.qual.Nullable;
2523

24+
import static org.hibernate.service.internal.ServiceLogger.SERVICE_LOGGER;
25+
2626
/**
2727
* @author Steve Ebersole
2828
*/
2929
public class SessionFactoryServiceRegistryImpl
3030
extends AbstractServiceRegistryImpl
3131
implements SessionFactoryServiceRegistry, SessionFactoryServiceInitiatorContext {
3232

33-
private static final Logger LOG = Logger.getLogger( SessionFactoryServiceRegistryImpl.class );
34-
3533
private final SessionFactoryOptions sessionFactoryOptions;
3634
private final SessionFactoryImplementor sessionFactory;
3735

@@ -101,11 +99,7 @@ public ServiceRegistryImplementor getServiceRegistry() {
10199
@Override
102100
public <R extends Service> @Nullable R getService(Class<R> serviceRole) {
103101
if ( serviceRole.equals( EventListenerRegistry.class ) ) {
104-
LOG.debug(
105-
"EventListenerRegistry access via ServiceRegistry is deprecated - "
106-
+ "use 'sessionFactory.getEventEngine().getListenerRegistry()' instead"
107-
);
108-
102+
SERVICE_LOGGER.eventListenerRegistryAccessDeprecated();
109103
//noinspection unchecked
110104
return (R) sessionFactory.getEventEngine().getListenerRegistry();
111105
}

0 commit comments

Comments
 (0)