Skip to content

Commit 7834cce

Browse files
committed
Next iteration towards supporting HK2 & Weld injection
Signed-off-by: jansupol <jan.supol@oracle.com>
1 parent 3b1b53e commit 7834cce

File tree

98 files changed

+3779
-521
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+3779
-521
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License v. 2.0, which is available at
6+
* http://www.eclipse.org/legal/epl-2.0.
7+
*
8+
* This Source Code may also be made available under the following Secondary
9+
* Licenses when the conditions for such availability set forth in the
10+
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
11+
* version 2 with the GNU Classpath Exception, which is available at
12+
* https://www.gnu.org/software/classpath/license.html.
13+
*
14+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15+
*/
16+
17+
package org.glassfish.jersey.grizzly2.httpserver;
18+
19+
import org.glassfish.jersey.innate.BootstrapPreinitialization;
20+
import org.glassfish.jersey.internal.inject.InjectionManager;
21+
22+
import jakarta.ws.rs.RuntimeType;
23+
24+
public final class GrizzlyBootstrapPreinitialization implements BootstrapPreinitialization {
25+
@Override
26+
public void preregister(RuntimeType runtimeType, InjectionManager injectionManager) {
27+
injectionManager.register(new GrizzlyHttpContainer.GrizzlyBinder());
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.glassfish.jersey.grizzly2.httpserver.GrizzlyBootstrapPreinitialization

core-client/src/main/java/org/glassfish/jersey/client/ClientBinder.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -82,24 +82,26 @@ public PropertiesDelegate get() {
8282
@Override
8383
protected void configure() {
8484
install(new MessagingBinders.MessageBodyProviders(clientRuntimeProperties, RuntimeType.CLIENT),
85-
new MessagingBinders.HeaderDelegateProviders());
85+
new MessagingBinders.HeaderDelegateProviders(RuntimeType.CLIENT));
8686

8787
bindFactory(ReferencingFactory.referenceFactory()).to(new GenericType<Ref<ClientConfig>>() {
88-
}).in(RequestScoped.class);
88+
}).in(RequestScoped.class).id(2101);
8989

9090
bindFactory(RequestContextInjectionFactory.class)
9191
.to(ClientRequest.class)
92-
.in(RequestScoped.class);
92+
.in(RequestScoped.class)
93+
.id(2102);
9394

9495
bindFactory(RequestContextInjectionFactory.class).to(HttpHeaders.class)
95-
.proxy(true).proxyForSameScope(false).in(RequestScoped.class);
96+
.proxy(true).proxyForSameScope(false).in(RequestScoped.class).id(2103);
9697

9798
bindFactory(ReferencingFactory.referenceFactory()).to(new GenericType<Ref<ClientRequest>>() {
98-
}).in(RequestScoped.class);
99+
}).in(RequestScoped.class).id(2104);
99100

100-
bindFactory(PropertiesDelegateFactory.class, Singleton.class).to(PropertiesDelegate.class).in(RequestScoped.class);
101+
bindFactory(PropertiesDelegateFactory.class, Singleton.class).to(PropertiesDelegate.class).in(RequestScoped.class)
102+
.forClient(true).id(1001);
101103

102104
// ChunkedInput entity support
103-
bind(ChunkedInputReader.class).to(MessageBodyReader.class).in(Singleton.class);
105+
bind(ChunkedInputReader.class).to(MessageBodyReader.class).in(Singleton.class).id(2105);
104106
}
105107
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License v. 2.0, which is available at
6+
* http://www.eclipse.org/legal/epl-2.0.
7+
*
8+
* This Source Code may also be made available under the following Secondary
9+
* Licenses when the conditions for such availability set forth in the
10+
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
11+
* version 2 with the GNU Classpath Exception, which is available at
12+
* https://www.gnu.org/software/classpath/license.html.
13+
*
14+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15+
*/
16+
17+
package org.glassfish.jersey.client;
18+
19+
import org.glassfish.jersey.innate.BootstrapPreinitialization;
20+
import org.glassfish.jersey.internal.inject.InjectionManager;
21+
22+
import jakarta.ws.rs.RuntimeType;
23+
24+
public class ClientBootstrapPreinitialization implements BootstrapPreinitialization {
25+
@Override
26+
public void preregister(RuntimeType runtimeType, InjectionManager injectionManager) {
27+
if (runtimeType == RuntimeType.CLIENT) {
28+
new ClientConfig.PreInitialization(injectionManager);
29+
}
30+
}
31+
}

core-client/src/main/java/org/glassfish/jersey/client/ClientConfig.java

Lines changed: 72 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2012, 2023 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved.
33
* Copyright (c) 2018 Payara Foundation and/or its affiliates.
44
*
55
* This program and the accompanying materials are made available under the
@@ -88,7 +88,7 @@ private RuntimeConfigConfigurator(State runtimeConfig) {
8888
@Override
8989
public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) {
9090
bootstrapBag.setConfiguration(runtimeConfig);
91-
injectionManager.register(Bindings.service(runtimeConfig).to(Configuration.class));
91+
injectionManager.register(Bindings.service(runtimeConfig).to(Configuration.class).forClient(true).id(1000));
9292
}
9393
}
9494

@@ -417,69 +417,27 @@ private ClientRuntime initRuntime() {
417417
runtimeCfgState.markAsShared();
418418

419419
final InjectionManager injectionManager = findInjectionManager();
420-
injectionManager.register(new ClientBinder(runtimeCfgState.getProperties()));
421-
422-
final ClientBootstrapBag bootstrapBag = new ClientBootstrapBag();
423-
bootstrapBag.setManagedObjectsFinalizer(new ManagedObjectsFinalizer(injectionManager));
424-
425-
final ClientMessageBodyFactory.MessageBodyWorkersConfigurator messageBodyWorkersConfigurator =
426-
new ClientMessageBodyFactory.MessageBodyWorkersConfigurator();
427-
428-
List<BootstrapConfigurator> bootstrapConfigurators = Arrays.asList(
429-
new RequestScope.RequestScopeConfigurator(),
430-
new ParamConverterConfigurator(),
431-
new ParameterUpdaterConfigurator(),
432-
new RuntimeConfigConfigurator(runtimeCfgState),
433-
new ContextResolverFactory.ContextResolversConfigurator(),
434-
messageBodyWorkersConfigurator,
435-
new ExceptionMapperFactory.ExceptionMappersConfigurator(),
436-
new JaxrsProviders.ProvidersConfigurator(),
437-
new AutoDiscoverableConfigurator(RuntimeType.CLIENT),
438-
new ClientComponentConfigurator(),
439-
new FeatureConfigurator(RuntimeType.CLIENT));
440-
bootstrapConfigurators.forEach(configurator -> configurator.init(injectionManager, bootstrapBag));
441-
442-
// AutoDiscoverable.
443-
if (!CommonProperties.getValue(runtimeCfgState.getProperties(), RuntimeType.CLIENT,
444-
CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE, Boolean.FALSE, Boolean.class)) {
445-
runtimeCfgState.configureAutoDiscoverableProviders(injectionManager, bootstrapBag.getAutoDiscoverables());
446-
} else {
447-
runtimeCfgState.configureForcedAutoDiscoverableProviders(injectionManager);
448-
}
449-
450-
// Configure binders and features.
451-
runtimeCfgState.configureMetaProviders(injectionManager, bootstrapBag.getManagedObjectsFinalizer());
452-
453-
// Bind providers.
454-
final Collection<ComponentProvider> componentProviders = bootstrapBag.getComponentProviders().get();
455-
ProviderBinder.bindProviders(
456-
runtimeCfgState.getComponentBag(), RuntimeType.CLIENT, null, injectionManager, componentProviders
457-
);
458-
459-
ClientExecutorProvidersConfigurator executorProvidersConfigurator =
460-
new ClientExecutorProvidersConfigurator(runtimeCfgState.getComponentBag(),
461-
runtimeCfgState.client,
462-
this.executorService,
463-
this.scheduledExecutorService);
464-
executorProvidersConfigurator.init(injectionManager, bootstrapBag);
420+
final PreInitialization preInit =
421+
new PreInitialization(runtimeCfgState, injectionManager, this.executorService, this.scheduledExecutorService);
422+
List<BootstrapConfigurator> bootstrapConfigurators = preInit.bootstrapConfigurators;
465423

466424
injectionManager.completeRegistration();
467425

468-
bootstrapConfigurators.forEach(configurator -> configurator.postInit(injectionManager, bootstrapBag));
426+
bootstrapConfigurators.forEach(configurator -> configurator.postInit(injectionManager, preInit.bootstrapBag));
469427

470428
final ClientConfig configuration = new ClientConfig(runtimeCfgState);
471429
final Connector connector = connectorProvider.getConnector(client, configuration);
472-
final ClientRuntime crt = new ClientRuntime(configuration, connector, injectionManager, bootstrapBag);
430+
final ClientRuntime crt = new ClientRuntime(configuration, connector, injectionManager, preInit.bootstrapBag);
473431

474432
client.registerShutdownHook(crt);
475-
messageBodyWorkersConfigurator.setClientRuntime(crt);
433+
preInit.messageBodyWorkersConfigurator.setClientRuntime(crt);
476434

477435
return crt;
478436
}
479437

480-
private final InjectionManager findInjectionManager() {
438+
private InjectionManager findInjectionManager() {
481439
try {
482-
return Injections.createInjectionManager(RuntimeType.CLIENT);
440+
return Injections.createInjectionManager(commonConfig);
483441
} catch (IllegalStateException ise) {
484442
return new NonInjectionManager(true);
485443
}
@@ -515,6 +473,68 @@ public int hashCode() {
515473
}
516474
}
517475

476+
/* package */ static class PreInitialization {
477+
private final ClientBootstrapBag bootstrapBag;
478+
private final List<BootstrapConfigurator> bootstrapConfigurators;
479+
private final ClientMessageBodyFactory.MessageBodyWorkersConfigurator messageBodyWorkersConfigurator;
480+
481+
/* package */ PreInitialization(InjectionManager injectionManager) {
482+
this(new State(new JerseyClient()), injectionManager, null, null);
483+
}
484+
485+
486+
/* package */ PreInitialization(
487+
State runtimeCfgState,
488+
InjectionManager injectionManager,
489+
ExecutorService executorService,
490+
ScheduledExecutorService scheduledExecutorService) {
491+
injectionManager.register(new ClientBinder(runtimeCfgState.getProperties()));
492+
493+
bootstrapBag = new ClientBootstrapBag();
494+
bootstrapBag.setManagedObjectsFinalizer(new ManagedObjectsFinalizer(injectionManager));
495+
496+
messageBodyWorkersConfigurator = new ClientMessageBodyFactory.MessageBodyWorkersConfigurator(); // 2020
497+
498+
bootstrapConfigurators = Arrays.asList(
499+
new RequestScope.RequestScopeConfigurator(),
500+
new ParamConverterConfigurator(), // 2010
501+
new ParameterUpdaterConfigurator(), // 2011
502+
new RuntimeConfigConfigurator(runtimeCfgState), // 2012
503+
new ContextResolverFactory.ContextResolversConfigurator(), // 2014
504+
messageBodyWorkersConfigurator,
505+
new ExceptionMapperFactory.ExceptionMappersConfigurator(), // 2015
506+
new JaxrsProviders.ProvidersConfigurator(), // 2016
507+
new AutoDiscoverableConfigurator(RuntimeType.CLIENT),
508+
new ClientComponentConfigurator(),
509+
new FeatureConfigurator(RuntimeType.CLIENT));
510+
bootstrapConfigurators.forEach(configurator -> configurator.init(injectionManager, bootstrapBag));
511+
512+
// AutoDiscoverable.
513+
if (!CommonProperties.getValue(runtimeCfgState.getProperties(), RuntimeType.CLIENT,
514+
CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE, Boolean.FALSE, Boolean.class)) {
515+
runtimeCfgState.configureAutoDiscoverableProviders(injectionManager, bootstrapBag.getAutoDiscoverables());
516+
} else {
517+
runtimeCfgState.configureForcedAutoDiscoverableProviders(injectionManager);
518+
}
519+
520+
// Configure binders and features.
521+
runtimeCfgState.configureMetaProviders(injectionManager, bootstrapBag.getManagedObjectsFinalizer());
522+
523+
// Bind providers.
524+
final Collection<ComponentProvider> componentProviders = bootstrapBag.getComponentProviders().get();
525+
ProviderBinder.bindProviders(
526+
runtimeCfgState.getComponentBag(), RuntimeType.CLIENT, null, injectionManager, componentProviders
527+
);
528+
529+
ClientExecutorProvidersConfigurator executorProvidersConfigurator =
530+
new ClientExecutorProvidersConfigurator(runtimeCfgState.getComponentBag(),
531+
runtimeCfgState.client,
532+
executorService,
533+
scheduledExecutorService);
534+
executorProvidersConfigurator.init(injectionManager, bootstrapBag);
535+
}
536+
}
537+
518538
/**
519539
* Construct a new Jersey configuration instance with the default features
520540
* and property values.

core-client/src/main/java/org/glassfish/jersey/client/ClientExecutorProvidersConfigurator.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2017, 2024 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,6 +37,8 @@
3737
import org.glassfish.jersey.spi.ExecutorServiceProvider;
3838
import org.glassfish.jersey.spi.ScheduledExecutorServiceProvider;
3939

40+
import jakarta.ws.rs.RuntimeType;
41+
4042
/**
4143
* Configurator which initializes and register {@link ExecutorServiceProvider} and
4244
* {@link ScheduledExecutorServiceProvider}.
@@ -106,7 +108,9 @@ public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) {
106108

107109
InstanceBinding<ExecutorServiceProvider> executorBinding = Bindings
108110
.service(defaultAsyncExecutorProvider)
109-
.to(ExecutorServiceProvider.class);
111+
.to(ExecutorServiceProvider.class)
112+
.forClient(true)
113+
.id(2020);
110114

111115
injectionManager.register(executorBinding);
112116

@@ -130,11 +134,13 @@ public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) {
130134

131135
InstanceBinding<ScheduledExecutorServiceProvider> schedulerBinding = Bindings
132136
.service(defaultScheduledExecutorProvider)
133-
.to(ScheduledExecutorServiceProvider.class);
137+
.to(ScheduledExecutorServiceProvider.class)
138+
.forClient(true)
139+
.id(2021);
134140
injectionManager.register(schedulerBinding);
135141

136142
registerExecutors(injectionManager, componentBag, defaultAsyncExecutorProvider,
137-
defaultScheduledExecutorProvider, bootstrapBag.getManagedObjectsFinalizer());
143+
defaultScheduledExecutorProvider, bootstrapBag.getManagedObjectsFinalizer(), RuntimeType.CLIENT);
138144
}
139145

140146
private static ExecutorService lookupManagedExecutorService() {

core-client/src/main/java/org/glassfish/jersey/client/ClientMessageBodyFactory.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2024 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -65,8 +65,7 @@ static class MessageBodyWorkersConfigurator implements BootstrapConfigurator {
6565
public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) {
6666
messageBodyFactory = new ClientMessageBodyFactory(bootstrapBag.getConfiguration(), () -> clientRuntime);
6767
InstanceBinding<ClientMessageBodyFactory> binding =
68-
Bindings.service(messageBodyFactory)
69-
.to(MessageBodyWorkers.class);
68+
Bindings.service(messageBodyFactory).to(MessageBodyWorkers.class).id(2020);
7069
injectionManager.register(binding);
7170
}
7271

core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterUpdaterConfigurator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2017, 2024 Oracle and/or its affiliates. All rights reserved.
33
* Copyright (c) 2018 Payara Foundation and/or its affiliates.
44
*
55
* This program and the accompanying materials are made available under the
@@ -53,6 +53,6 @@ public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) {
5353
ParameterUpdaterFactory parameterUpdaterFactory = new ParameterUpdaterFactory(lazyParamConverterFactory);
5454
clientBag.setParameterUpdaterProvider(parameterUpdaterFactory);
5555
injectionManager.register(Bindings.service(parameterUpdaterFactory)
56-
.to(ParameterUpdaterProvider.class));
56+
.to(ParameterUpdaterProvider.class).id(2011));
5757
}
5858
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.glassfish.jersey.client.ClientBootstrapPreinitialization
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License v. 2.0, which is available at
6+
* http://www.eclipse.org/legal/epl-2.0.
7+
*
8+
* This Source Code may also be made available under the following Secondary
9+
* Licenses when the conditions for such availability set forth in the
10+
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
11+
* version 2 with the GNU Classpath Exception, which is available at
12+
* https://www.gnu.org/software/classpath/license.html.
13+
*
14+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15+
*/
16+
17+
package org.glassfish.jersey.innate;
18+
19+
import org.glassfish.jersey.Beta;
20+
import org.glassfish.jersey.internal.inject.InjectionManager;
21+
22+
import jakarta.ws.rs.RuntimeType;
23+
import jakarta.ws.rs.core.FeatureContext;
24+
25+
/**
26+
* <p>
27+
* The entry point for pre-initialize Jersey during bootstrap. Register the beans that are not recognized by the injection
28+
* framework to be injected in runtime. Register beans for the specific runtime type into the {@link InjectionManager}.
29+
* </p>
30+
*/
31+
@Beta
32+
public interface BootstrapPreinitialization {
33+
/**
34+
* Manually register beans that are not automatically recognised by the injection framework.
35+
* @param runtimeType
36+
* @param injectionManager
37+
*/
38+
void preregister(RuntimeType runtimeType, InjectionManager injectionManager);
39+
40+
static FeatureContext featureContextInstance() {
41+
return new PreinitializationFeatureContext();
42+
}
43+
}

0 commit comments

Comments
 (0)