Skip to content

Commit 242c063

Browse files
committed
Adjusted RuntimeDelegate handling for client
- set default RuntimeDelegateImpl, when using client-only or both - added correct impl - removed RuntimeDelegateService in preference to the Jersey one - removed clientOnly part from JerseyRuntimeCheck - adjusted corresponding tests Signed-off-by: Mark Hoffmann <m.hoffmann@data-in-motion.biz>
1 parent b4ad624 commit 242c063

File tree

10 files changed

+50
-81
lines changed

10 files changed

+50
-81
lines changed

org.eclipse.osgitech.rest.client/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ Export-Package: \
7272
org.eclipse.osgitech.rest.client,\
7373
org.eclipse.osgitech.rest.client.annotations,\
7474
org.eclipse.osgitech.rest.runtime.common,\
75-
org.eclipse.osgitech.rest.provider
75+
org.eclipse.osgitech.rest.provider,\
76+
org.eclipse.osgitech.rest.provider.jakartars
7677
7778
Private-Package: \
7879
org.eclipse.osgitech.rest.client.check

org.eclipse.osgitech.rest.client/src/main/java/org/eclipse/osgitech/rest/client/check/JerseyClientBundleTracker.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.logging.Logger;
2020

2121
import org.eclipse.osgitech.rest.provider.JerseyConstants;
22+
import org.glassfish.jersey.internal.RuntimeDelegateImpl;
2223
import org.osgi.framework.Bundle;
2324
import org.osgi.framework.BundleContext;
2425
import org.osgi.framework.BundleEvent;
@@ -29,6 +30,7 @@
2930
import org.osgi.util.tracker.BundleTrackerCustomizer;
3031

3132
import aQute.bnd.annotation.service.ServiceCapability;
33+
import jakarta.ws.rs.ext.RuntimeDelegate;
3234

3335
/**
3436
* Checker that ensures that all Jersey client bundles are started properly
@@ -43,6 +45,7 @@ public class JerseyClientBundleTracker implements BundleTrackerCustomizer<Boolea
4345
private final Map<String, Boolean> bsns =new HashMap<>(5);
4446
private final BundleTracker<Boolean> tracker;
4547
private final BundleContext context;
48+
private RuntimeDelegate currentDelegate = null;
4649
private ServiceRegistration<Condition> jerseyRuntimeCondition;
4750

4851
/**
@@ -136,13 +139,16 @@ private synchronized void updateCondition() {
136139
if (jerseyRuntimeCondition != null) {
137140
logger.info(()->"Jersey runtime condition is already registered! This should not happen! Doing nothing ...");
138141
}
142+
currentDelegate = RuntimeDelegate.getInstance();
143+
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
139144
Dictionary<String, Object> properties = new Hashtable<String, Object>();
140145
properties.put(Condition.CONDITION_ID, JerseyConstants.JERSEY_CLIENT);
141146
properties.put(JerseyConstants.JERSEY_CLIENT_ONLY, Boolean.TRUE);
142147
jerseyRuntimeCondition = context.registerService(Condition.class, Condition.INSTANCE, properties);
143148
logger.info(()->"Registered Jersey runtime condition");
144149
} else {
145150
if (jerseyRuntimeCondition != null) {
151+
RuntimeDelegate.setInstance(currentDelegate);
146152
jerseyRuntimeCondition.unregister();
147153
jerseyRuntimeCondition = null;
148154
logger.info(()->"Un-registered Jersey runtime condition");

org.eclipse.osgitech.rest.tests/src/test/java/org/eclipse/osgitech/rest/tests/JerseyRuntimeCheckerTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ public void before(@InjectBundleContext BundleContext ctx) {
5252
public void testBundlesJerseyCondition(String bns, @InjectService(cardinality = 0, filter = "(" + Condition.CONDITION_ID + "=" + JerseyConstants.JERSEY_RUNTIME + ")") ServiceAware<Condition> jerseyCondition) {
5353
assertNotNull(ctx);
5454
assertFalse(jerseyCondition.isEmpty());
55-
ServiceReference<Condition> jerseyConditionRef = jerseyCondition.getServiceReference();
56-
assertNotNull(jerseyConditionRef.getProperty(JerseyConstants.JERSEY_CLIENT_ONLY));
57-
assertFalse((Boolean)jerseyConditionRef.getProperty(JerseyConstants.JERSEY_CLIENT_ONLY));
5855
Bundle injectBundle = getBundle("org.glassfish.jersey.inject.jersey-hk2");
5956
assertNotNull(injectBundle);
6057
try {

org.eclipse.osgitech.rest.tests/test.bndrun

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
bnd.identity;id=junit-platform-launcher
88

99
-runfw: org.apache.felix.framework
10-
-runee: JavaSE-11
10+
-runee: JavaSE-17
1111

1212
-runbundles: \
1313
jakarta.activation-api;version='[2.1.2,2.1.3)',\
@@ -16,43 +16,43 @@
1616
jakarta.validation.jakarta.validation-api;version='[3.0.2,3.0.3)',\
1717
jakarta.ws.rs-api;version='[3.1.0,3.1.1)',\
1818
jakarta.xml.bind-api;version='[4.0.0,4.0.1)',\
19-
javassist;version='[3.29.2,3.29.3)',\
2019
org.apache.aries.spifly.dynamic.framework.extension;version='[1.3.6,1.3.7)',\
2120
org.apache.felix.configadmin;version='[1.9.24,1.9.25)',\
2221
org.apache.felix.http.jetty;version='[5.0.4,5.0.5)',\
2322
org.apache.felix.http.servlet-api;version='[2.1.0,2.1.1)',\
2423
org.apache.felix.scr;version='[2.2.6,2.2.7)',\
25-
org.eclipse.osgitech.rest;version='[1.0.0,1.0.1)',\
26-
org.eclipse.osgitech.rest.servlet.whiteboard;version='[1.0.0,1.0.1)',\
27-
org.eclipse.osgitech.rest.sse;version='[1.0.0,1.0.1)',\
28-
org.eclipse.osgitech.rest.tests-tests;version='[1.0.0,1.0.1)',\
2924
org.glassfish.hk2.osgi-resource-locator;version='[1.0.3,1.0.4)',\
3025
org.osgi.service.component;version='[1.5.1,1.5.2)',\
3126
org.osgi.service.jakartars;version='[2.0.0,2.0.1)',\
32-
org.osgi.test.common;version='[1.2.1,1.2.2)',\
33-
org.osgi.test.junit5;version='[1.2.1,1.2.2)',\
34-
org.osgi.test.junit5.cm;version='[1.2.1,1.2.2)',\
3527
org.osgi.util.function;version='[1.2.0,1.2.1)',\
3628
org.osgi.util.promise;version='[1.3.0,1.3.1)',\
3729
slf4j.api;version='[1.7.36,1.7.37)',\
3830
slf4j.simple;version='[1.7.36,1.7.37)',\
39-
org.glassfish.hk2.api;version='[3.0.5,3.0.6)',\
40-
org.glassfish.hk2.external.aopalliance-repackaged;version='[3.0.5,3.0.6)',\
41-
org.glassfish.hk2.locator;version='[3.0.5,3.0.6)',\
42-
org.glassfish.hk2.utils;version='[3.0.5,3.0.6)',\
43-
org.glassfish.jersey.containers.jersey-container-servlet;version='[3.1.3,3.1.4)',\
44-
org.glassfish.jersey.containers.jersey-container-servlet-core;version='[3.1.3,3.1.4)',\
45-
org.glassfish.jersey.core.jersey-client;version='[3.1.3,3.1.4)',\
46-
org.glassfish.jersey.core.jersey-common;version='[3.1.3,3.1.4)',\
47-
org.glassfish.jersey.core.jersey-server;version='[3.1.3,3.1.4)',\
48-
org.glassfish.jersey.inject.jersey-hk2;version='[3.1.3,3.1.4)',\
49-
org.glassfish.jersey.media.jersey-media-jaxb;version='[3.1.3,3.1.4)',\
50-
org.glassfish.jersey.media.jersey-media-sse;version='[3.1.3,3.1.4)',\
5131
org.objectweb.asm;version='[9.6.0,9.6.1)',\
5232
junit-jupiter-api;version='[5.9.2,5.9.3)',\
5333
junit-jupiter-engine;version='[5.9.2,5.9.3)',\
5434
junit-jupiter-params;version='[5.9.2,5.9.3)',\
5535
junit-platform-commons;version='[1.9.2,1.9.3)',\
5636
junit-platform-engine;version='[1.9.2,1.9.3)',\
5737
junit-platform-launcher;version='[1.9.2,1.9.3)',\
58-
org.opentest4j;version='[1.2.0,1.2.1)'
38+
org.opentest4j;version='[1.2.0,1.2.1)',\
39+
javassist;version='[3.30.2,3.30.3)',\
40+
org.eclipse.osgitech.rest;version='[1.3.0,1.3.1)',\
41+
org.eclipse.osgitech.rest.servlet.whiteboard;version='[1.3.0,1.3.1)',\
42+
org.eclipse.osgitech.rest.sse;version='[1.3.0,1.3.1)',\
43+
org.eclipse.osgitech.rest.tests-tests;version='[1.3.0,1.3.1)',\
44+
org.glassfish.hk2.api;version='[3.0.6,3.0.7)',\
45+
org.glassfish.hk2.external.aopalliance-repackaged;version='[3.0.6,3.0.7)',\
46+
org.glassfish.hk2.locator;version='[3.0.6,3.0.7)',\
47+
org.glassfish.hk2.utils;version='[3.0.6,3.0.7)',\
48+
org.glassfish.jersey.containers.jersey-container-servlet;version='[3.1.9,3.1.10)',\
49+
org.glassfish.jersey.containers.jersey-container-servlet-core;version='[3.1.9,3.1.10)',\
50+
org.glassfish.jersey.core.jersey-client;version='[3.1.9,3.1.10)',\
51+
org.glassfish.jersey.core.jersey-common;version='[3.1.9,3.1.10)',\
52+
org.glassfish.jersey.core.jersey-server;version='[3.1.9,3.1.10)',\
53+
org.glassfish.jersey.inject.jersey-hk2;version='[3.1.9,3.1.10)',\
54+
org.glassfish.jersey.media.jersey-media-jaxb;version='[3.1.9,3.1.10)',\
55+
org.glassfish.jersey.media.jersey-media-sse;version='[3.1.9,3.1.10)',\
56+
org.osgi.test.common;version='[1.3.0,1.3.1)',\
57+
org.osgi.test.junit5;version='[1.3.0,1.3.1)',\
58+
org.osgi.test.junit5.cm;version='[1.3.0,1.3.1)'

org.eclipse.osgitech.rest/src/main/java/org/eclipse/osgitech/rest/client/ClientBuilderComponent.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@
2424
import org.eclipse.osgitech.rest.runtime.common.RxInvokerProviderImpl;
2525
import org.eclipse.osgitech.rest.sse.SseEventSourceFactoryImpl;
2626
import org.glassfish.jersey.client.JerseyClientBuilder;
27+
import org.glassfish.jersey.internal.spi.AutoDiscoverable;
28+
import org.glassfish.jersey.logging.LoggingFeatureAutoDiscoverable;
2729
import org.osgi.annotation.bundle.Capability;
30+
import org.osgi.annotation.bundle.Referenced;
2831
import org.osgi.framework.Bundle;
2932
import org.osgi.framework.BundleContext;
3033
import org.osgi.framework.Constants;
@@ -39,6 +42,7 @@
3942
import org.osgi.service.jakartars.client.PromiseRxInvoker;
4043
import org.osgi.service.jakartars.client.SseEventSourceFactory;
4144

45+
import aQute.bnd.annotation.spi.ServiceProvider;
4246
import jakarta.ws.rs.client.ClientBuilder;
4347

4448
/**
@@ -70,9 +74,11 @@
7074
@Capability(
7175
namespace = SERVICELOADER_NAMESPACE,
7276
name = "jakarta.ws.rs.client.ClientBuilder",
73-
attribute = "register:=\"\"",
77+
attribute = "register:=\"org.glassfish.jersey.client.JerseyClientBuilder\"",
7478
uses = ClientBuilder.class
7579
)
80+
@ServiceProvider(value = AutoDiscoverable.class, register = LoggingFeatureAutoDiscoverable.class)
81+
@Referenced(LoggingFeatureAutoDiscoverable.class)
7682
public class ClientBuilderComponent {
7783

7884
/** ECLIPSE_OS_GI_TECHNOLOGY */

org.eclipse.osgitech.rest/src/main/java/org/eclipse/osgitech/rest/provider/jakartars/RuntimeDelegateService.java

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

org.eclipse.osgitech.rest/src/main/java/org/eclipse/osgitech/rest/provider/jakartars/package-info.java

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
@Export
2+
@ServiceProvider(value = RuntimeDelegate.class, register = RuntimeDelegateImpl.class)
3+
@Referenced(org.glassfish.jersey.internal.RuntimeDelegateImpl.class)
24
package org.eclipse.osgitech.rest.provider;
35

46
import org.osgi.annotation.bundle.Export;
7+
8+
import aQute.bnd.annotation.spi.ServiceProvider;
9+
import org.osgi.annotation.bundle.Referenced;
10+
import jakarta.ws.rs.ext.RuntimeDelegate;
11+
12+
import org.glassfish.jersey.internal.RuntimeDelegateImpl;

org.eclipse.osgitech.rest/src/main/java/org/eclipse/osgitech/rest/runtime/WhiteboardServletContainer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.util.concurrent.locks.ReentrantReadWriteLock;
2121

2222
import org.eclipse.osgitech.rest.annotations.RequireJerseyServlet;
23-
import org.eclipse.osgitech.rest.provider.jakartars.RuntimeDelegateService;
2423
import org.glassfish.jersey.server.ApplicationHandler;
2524
import org.glassfish.jersey.server.ResourceConfig;
2625
import org.glassfish.jersey.servlet.ServletContainer;
@@ -63,7 +62,7 @@ public void init() throws ServletException {
6362
try {
6463
ClassLoader oldTccl = Thread.currentThread().getContextClassLoader();
6564
try {
66-
Thread.currentThread().setContextClassLoader(RuntimeDelegateService.class.getClassLoader());
65+
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
6766

6867
super.init();
6968
// we have to wait until the injection manager is available on first start

org.eclipse.osgitech.rest/src/main/java/org/eclipse/osgitech/rest/runtime/check/JerseyBundleTracker.java

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import java.util.logging.Logger;
2121

2222
import org.eclipse.osgitech.rest.provider.JerseyConstants;
23-
import org.eclipse.osgitech.rest.provider.jakartars.RuntimeDelegateService;
23+
import org.glassfish.jersey.internal.RuntimeDelegateImpl;
2424
import org.osgi.framework.Bundle;
2525
import org.osgi.framework.BundleContext;
2626
import org.osgi.framework.BundleEvent;
@@ -44,36 +44,24 @@ public class JerseyBundleTracker implements BundleTrackerCustomizer<Boolean>{
4444

4545
private static final Logger logger = Logger.getLogger("runtime.check");
4646
private final Map<String, Boolean> bsns =new HashMap<>(5);
47-
private final boolean isClientOnly;
4847
private final BundleTracker<Boolean> tracker;
4948
private final BundleContext context;
5049
private ServiceRegistration<Condition> jerseyRuntimeCondition;
5150
private Consumer<BundleContext> upConsumer;
5251
private Consumer<BundleContext> downConsumer;
5352

54-
/**
55-
* Creates a new instance.
56-
* @param context the {@link BundleContext}
57-
*/
58-
public JerseyBundleTracker(BundleContext context) {
59-
this(context, false);
60-
}
61-
6253
/**
6354
* Creates a new instance.
6455
* @param context the {@link BundleContext}
6556
* @param isClientOnly indicator that marks a client only mode
6657
*/
67-
public JerseyBundleTracker(BundleContext context, boolean isClientOnly) {
58+
public JerseyBundleTracker(BundleContext context) {
6859
this.context = context;
69-
this.isClientOnly = isClientOnly;
7060
bsns.put("org.glassfish.hk2.osgi-resource-locator", Boolean.FALSE);
7161
bsns.put("org.glassfish.jersey.inject.jersey-hk2", Boolean.FALSE);
7262
bsns.put("org.glassfish.jersey.core.jersey-common", Boolean.FALSE);
7363
bsns.put("org.glassfish.jersey.core.jersey-client", Boolean.FALSE);
74-
if (isClientOnly) {
75-
bsns.put("org.glassfish.jersey.core.jersey-server", Boolean.FALSE);
76-
}
64+
bsns.put("org.glassfish.jersey.core.jersey-server", Boolean.FALSE);
7765
startBundles();
7866
tracker = new BundleTracker<Boolean>(context, Bundle.ACTIVE, this);
7967
}
@@ -165,12 +153,9 @@ private synchronized void updateCondition() {
165153
if (jerseyRuntimeCondition != null) {
166154
logger.info(()->"Jersey runtime condition is already registered! This should not happen! Doing nothing ...");
167155
}
168-
if (!isClientOnly) {
169-
RuntimeDelegate.setInstance(new RuntimeDelegateService());
170-
}
156+
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
171157
Dictionary<String, Object> properties = new Hashtable<String, Object>();
172158
properties.put(Condition.CONDITION_ID, JerseyConstants.JERSEY_RUNTIME);
173-
properties.put(JerseyConstants.JERSEY_CLIENT_ONLY, isClientOnly);
174159
jerseyRuntimeCondition = context.registerService(Condition.class, Condition.INSTANCE, properties);
175160
logger.info(()->"Registered Jersey runtime condition");
176161
if (upConsumer != null) {

0 commit comments

Comments
 (0)