Skip to content

Commit

Permalink
Adjusted RuntimeDelegate handling for client
Browse files Browse the repository at this point in the history
- 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 <[email protected]>
  • Loading branch information
maho7791 committed Feb 8, 2025
1 parent b4ad624 commit 242c063
Show file tree
Hide file tree
Showing 10 changed files with 50 additions and 81 deletions.
3 changes: 2 additions & 1 deletion org.eclipse.osgitech.rest.client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ Export-Package: \
org.eclipse.osgitech.rest.client,\
org.eclipse.osgitech.rest.client.annotations,\
org.eclipse.osgitech.rest.runtime.common,\
org.eclipse.osgitech.rest.provider
org.eclipse.osgitech.rest.provider,\
org.eclipse.osgitech.rest.provider.jakartars
Private-Package: \
org.eclipse.osgitech.rest.client.check
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.util.logging.Logger;

import org.eclipse.osgitech.rest.provider.JerseyConstants;
import org.glassfish.jersey.internal.RuntimeDelegateImpl;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
Expand All @@ -29,6 +30,7 @@
import org.osgi.util.tracker.BundleTrackerCustomizer;

import aQute.bnd.annotation.service.ServiceCapability;
import jakarta.ws.rs.ext.RuntimeDelegate;

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

/**
Expand Down Expand Up @@ -136,13 +139,16 @@ private synchronized void updateCondition() {
if (jerseyRuntimeCondition != null) {
logger.info(()->"Jersey runtime condition is already registered! This should not happen! Doing nothing ...");
}
currentDelegate = RuntimeDelegate.getInstance();
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(Condition.CONDITION_ID, JerseyConstants.JERSEY_CLIENT);
properties.put(JerseyConstants.JERSEY_CLIENT_ONLY, Boolean.TRUE);
jerseyRuntimeCondition = context.registerService(Condition.class, Condition.INSTANCE, properties);
logger.info(()->"Registered Jersey runtime condition");
} else {
if (jerseyRuntimeCondition != null) {
RuntimeDelegate.setInstance(currentDelegate);
jerseyRuntimeCondition.unregister();
jerseyRuntimeCondition = null;
logger.info(()->"Un-registered Jersey runtime condition");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,6 @@ public void before(@InjectBundleContext BundleContext ctx) {
public void testBundlesJerseyCondition(String bns, @InjectService(cardinality = 0, filter = "(" + Condition.CONDITION_ID + "=" + JerseyConstants.JERSEY_RUNTIME + ")") ServiceAware<Condition> jerseyCondition) {
assertNotNull(ctx);
assertFalse(jerseyCondition.isEmpty());
ServiceReference<Condition> jerseyConditionRef = jerseyCondition.getServiceReference();
assertNotNull(jerseyConditionRef.getProperty(JerseyConstants.JERSEY_CLIENT_ONLY));
assertFalse((Boolean)jerseyConditionRef.getProperty(JerseyConstants.JERSEY_CLIENT_ONLY));
Bundle injectBundle = getBundle("org.glassfish.jersey.inject.jersey-hk2");
assertNotNull(injectBundle);
try {
Expand Down
44 changes: 22 additions & 22 deletions org.eclipse.osgitech.rest.tests/test.bndrun
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
bnd.identity;id=junit-platform-launcher

-runfw: org.apache.felix.framework
-runee: JavaSE-11
-runee: JavaSE-17

-runbundles: \
jakarta.activation-api;version='[2.1.2,2.1.3)',\
Expand All @@ -16,43 +16,43 @@
jakarta.validation.jakarta.validation-api;version='[3.0.2,3.0.3)',\
jakarta.ws.rs-api;version='[3.1.0,3.1.1)',\
jakarta.xml.bind-api;version='[4.0.0,4.0.1)',\
javassist;version='[3.29.2,3.29.3)',\
org.apache.aries.spifly.dynamic.framework.extension;version='[1.3.6,1.3.7)',\
org.apache.felix.configadmin;version='[1.9.24,1.9.25)',\
org.apache.felix.http.jetty;version='[5.0.4,5.0.5)',\
org.apache.felix.http.servlet-api;version='[2.1.0,2.1.1)',\
org.apache.felix.scr;version='[2.2.6,2.2.7)',\
org.eclipse.osgitech.rest;version='[1.0.0,1.0.1)',\
org.eclipse.osgitech.rest.servlet.whiteboard;version='[1.0.0,1.0.1)',\
org.eclipse.osgitech.rest.sse;version='[1.0.0,1.0.1)',\
org.eclipse.osgitech.rest.tests-tests;version='[1.0.0,1.0.1)',\
org.glassfish.hk2.osgi-resource-locator;version='[1.0.3,1.0.4)',\
org.osgi.service.component;version='[1.5.1,1.5.2)',\
org.osgi.service.jakartars;version='[2.0.0,2.0.1)',\
org.osgi.test.common;version='[1.2.1,1.2.2)',\
org.osgi.test.junit5;version='[1.2.1,1.2.2)',\
org.osgi.test.junit5.cm;version='[1.2.1,1.2.2)',\
org.osgi.util.function;version='[1.2.0,1.2.1)',\
org.osgi.util.promise;version='[1.3.0,1.3.1)',\
slf4j.api;version='[1.7.36,1.7.37)',\
slf4j.simple;version='[1.7.36,1.7.37)',\
org.glassfish.hk2.api;version='[3.0.5,3.0.6)',\
org.glassfish.hk2.external.aopalliance-repackaged;version='[3.0.5,3.0.6)',\
org.glassfish.hk2.locator;version='[3.0.5,3.0.6)',\
org.glassfish.hk2.utils;version='[3.0.5,3.0.6)',\
org.glassfish.jersey.containers.jersey-container-servlet;version='[3.1.3,3.1.4)',\
org.glassfish.jersey.containers.jersey-container-servlet-core;version='[3.1.3,3.1.4)',\
org.glassfish.jersey.core.jersey-client;version='[3.1.3,3.1.4)',\
org.glassfish.jersey.core.jersey-common;version='[3.1.3,3.1.4)',\
org.glassfish.jersey.core.jersey-server;version='[3.1.3,3.1.4)',\
org.glassfish.jersey.inject.jersey-hk2;version='[3.1.3,3.1.4)',\
org.glassfish.jersey.media.jersey-media-jaxb;version='[3.1.3,3.1.4)',\
org.glassfish.jersey.media.jersey-media-sse;version='[3.1.3,3.1.4)',\
org.objectweb.asm;version='[9.6.0,9.6.1)',\
junit-jupiter-api;version='[5.9.2,5.9.3)',\
junit-jupiter-engine;version='[5.9.2,5.9.3)',\
junit-jupiter-params;version='[5.9.2,5.9.3)',\
junit-platform-commons;version='[1.9.2,1.9.3)',\
junit-platform-engine;version='[1.9.2,1.9.3)',\
junit-platform-launcher;version='[1.9.2,1.9.3)',\
org.opentest4j;version='[1.2.0,1.2.1)'
org.opentest4j;version='[1.2.0,1.2.1)',\
javassist;version='[3.30.2,3.30.3)',\
org.eclipse.osgitech.rest;version='[1.3.0,1.3.1)',\
org.eclipse.osgitech.rest.servlet.whiteboard;version='[1.3.0,1.3.1)',\
org.eclipse.osgitech.rest.sse;version='[1.3.0,1.3.1)',\
org.eclipse.osgitech.rest.tests-tests;version='[1.3.0,1.3.1)',\
org.glassfish.hk2.api;version='[3.0.6,3.0.7)',\
org.glassfish.hk2.external.aopalliance-repackaged;version='[3.0.6,3.0.7)',\
org.glassfish.hk2.locator;version='[3.0.6,3.0.7)',\
org.glassfish.hk2.utils;version='[3.0.6,3.0.7)',\
org.glassfish.jersey.containers.jersey-container-servlet;version='[3.1.9,3.1.10)',\
org.glassfish.jersey.containers.jersey-container-servlet-core;version='[3.1.9,3.1.10)',\
org.glassfish.jersey.core.jersey-client;version='[3.1.9,3.1.10)',\
org.glassfish.jersey.core.jersey-common;version='[3.1.9,3.1.10)',\
org.glassfish.jersey.core.jersey-server;version='[3.1.9,3.1.10)',\
org.glassfish.jersey.inject.jersey-hk2;version='[3.1.9,3.1.10)',\
org.glassfish.jersey.media.jersey-media-jaxb;version='[3.1.9,3.1.10)',\
org.glassfish.jersey.media.jersey-media-sse;version='[3.1.9,3.1.10)',\
org.osgi.test.common;version='[1.3.0,1.3.1)',\
org.osgi.test.junit5;version='[1.3.0,1.3.1)',\
org.osgi.test.junit5.cm;version='[1.3.0,1.3.1)'
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@
import org.eclipse.osgitech.rest.runtime.common.RxInvokerProviderImpl;
import org.eclipse.osgitech.rest.sse.SseEventSourceFactoryImpl;
import org.glassfish.jersey.client.JerseyClientBuilder;
import org.glassfish.jersey.internal.spi.AutoDiscoverable;
import org.glassfish.jersey.logging.LoggingFeatureAutoDiscoverable;
import org.osgi.annotation.bundle.Capability;
import org.osgi.annotation.bundle.Referenced;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
Expand All @@ -39,6 +42,7 @@
import org.osgi.service.jakartars.client.PromiseRxInvoker;
import org.osgi.service.jakartars.client.SseEventSourceFactory;

import aQute.bnd.annotation.spi.ServiceProvider;
import jakarta.ws.rs.client.ClientBuilder;

/**
Expand Down Expand Up @@ -70,9 +74,11 @@
@Capability(
namespace = SERVICELOADER_NAMESPACE,
name = "jakarta.ws.rs.client.ClientBuilder",
attribute = "register:=\"\"",
attribute = "register:=\"org.glassfish.jersey.client.JerseyClientBuilder\"",
uses = ClientBuilder.class
)
@ServiceProvider(value = AutoDiscoverable.class, register = LoggingFeatureAutoDiscoverable.class)
@Referenced(LoggingFeatureAutoDiscoverable.class)
public class ClientBuilderComponent {

/** ECLIPSE_OS_GI_TECHNOLOGY */
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
@Export
@ServiceProvider(value = RuntimeDelegate.class, register = RuntimeDelegateImpl.class)
@Referenced(org.glassfish.jersey.internal.RuntimeDelegateImpl.class)
package org.eclipse.osgitech.rest.provider;

import org.osgi.annotation.bundle.Export;

import aQute.bnd.annotation.spi.ServiceProvider;
import org.osgi.annotation.bundle.Referenced;
import jakarta.ws.rs.ext.RuntimeDelegate;

import org.glassfish.jersey.internal.RuntimeDelegateImpl;
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import java.util.concurrent.locks.ReentrantReadWriteLock;

import org.eclipse.osgitech.rest.annotations.RequireJerseyServlet;
import org.eclipse.osgitech.rest.provider.jakartars.RuntimeDelegateService;
import org.glassfish.jersey.server.ApplicationHandler;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
Expand Down Expand Up @@ -63,7 +62,7 @@ public void init() throws ServletException {
try {
ClassLoader oldTccl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(RuntimeDelegateService.class.getClassLoader());
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());

super.init();
// we have to wait until the injection manager is available on first start
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import java.util.logging.Logger;

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

private static final Logger logger = Logger.getLogger("runtime.check");
private final Map<String, Boolean> bsns =new HashMap<>(5);
private final boolean isClientOnly;
private final BundleTracker<Boolean> tracker;
private final BundleContext context;
private ServiceRegistration<Condition> jerseyRuntimeCondition;
private Consumer<BundleContext> upConsumer;
private Consumer<BundleContext> downConsumer;

/**
* Creates a new instance.
* @param context the {@link BundleContext}
*/
public JerseyBundleTracker(BundleContext context) {
this(context, false);
}

/**
* Creates a new instance.
* @param context the {@link BundleContext}
* @param isClientOnly indicator that marks a client only mode
*/
public JerseyBundleTracker(BundleContext context, boolean isClientOnly) {
public JerseyBundleTracker(BundleContext context) {
this.context = context;
this.isClientOnly = isClientOnly;
bsns.put("org.glassfish.hk2.osgi-resource-locator", Boolean.FALSE);
bsns.put("org.glassfish.jersey.inject.jersey-hk2", Boolean.FALSE);
bsns.put("org.glassfish.jersey.core.jersey-common", Boolean.FALSE);
bsns.put("org.glassfish.jersey.core.jersey-client", Boolean.FALSE);
if (isClientOnly) {
bsns.put("org.glassfish.jersey.core.jersey-server", Boolean.FALSE);
}
bsns.put("org.glassfish.jersey.core.jersey-server", Boolean.FALSE);
startBundles();
tracker = new BundleTracker<Boolean>(context, Bundle.ACTIVE, this);
}
Expand Down Expand Up @@ -165,12 +153,9 @@ private synchronized void updateCondition() {
if (jerseyRuntimeCondition != null) {
logger.info(()->"Jersey runtime condition is already registered! This should not happen! Doing nothing ...");
}
if (!isClientOnly) {
RuntimeDelegate.setInstance(new RuntimeDelegateService());
}
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(Condition.CONDITION_ID, JerseyConstants.JERSEY_RUNTIME);
properties.put(JerseyConstants.JERSEY_CLIENT_ONLY, isClientOnly);
jerseyRuntimeCondition = context.registerService(Condition.class, Condition.INSTANCE, properties);
logger.info(()->"Registered Jersey runtime condition");
if (upConsumer != null) {
Expand Down

0 comments on commit 242c063

Please sign in to comment.