bug5631: use shared RestServletContainer for other RESTlets

This commit is contained in:
Axel Uhl
2021-12-02 12:19:01 +01:00
parent 52a6bfb2e6
commit 05d574d94d
4 changed files with 6 additions and 104 deletions
@@ -240,7 +240,7 @@
<servlet>
<servlet-name>Jersey REST API</servlet-name>
<servlet-class>com.sap.sailing.server.gateway.jaxrs.RestServletContainer</servlet-class>
<servlet-class>com.sap.sailing.shared.server.gateway.jaxrs.RestServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.sap.sailing.server.gateway.jaxrs.api.RestApiApplication</param-value>
@@ -262,7 +262,7 @@
<servlet>
<servlet-name>Jersey REST SPI</servlet-name>
<servlet-class>com.sap.sailing.server.gateway.jaxrs.RestServletContainer</servlet-class>
<servlet-class>com.sap.sailing.shared.server.gateway.jaxrs.RestServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.sap.sailing.server.gateway.jaxrs.spi.RestSpiApplication</param-value>
@@ -297,7 +297,7 @@
<servlet>
<servlet-name>SharingApi</servlet-name>
<servlet-class>com.sap.sailing.server.gateway.jaxrs.RestServletContainer</servlet-class>
<servlet-class>com.sap.sailing.shared.server.gateway.jaxrs.RestServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.sap.sailing.server.gateway.jaxrs.sharing.SharingApiApplication</param-value>
@@ -1,88 +0,0 @@
package com.sap.sailing.server.gateway.jaxrs;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.ws.rs.core.Application;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.server.interfaces.RacingEventService;
import com.sap.sailing.shared.server.SharedSailingData;
import com.sap.sse.datamining.DataMiningServer;
import com.sap.sse.replication.ReplicationService;
import com.sap.sse.security.SecurityService;
import com.sun.jersey.spi.container.servlet.ServletContainer;
public class RestServletContainer extends ServletContainer {
private static final long serialVersionUID = -3132655822281021061L;
public static final String OSGI_RFC66_WEBBUNDLE_BUNDLECONTEXT_NAME = "osgi-bundlecontext";
public static final String RACING_EVENT_SERVICE_TRACKER_NAME = "racingEventServiceTracker";
public static final String SHARED_SAILING_DATA_TRACKER_NAME = "sharedSailingDataTracker";
public static final String REPLICATION_SERVICE_TRACKER_NAME = "replicationServiceTracker";
public static final String DATA_MINING_SERVER_TRACKER_NAME = "dataMiningServerTracker";
public static final String SECURITY_SERVICE_TRACKER_NAME = "securityServiceTracker";
private ServiceTracker<RacingEventService, RacingEventService> racingEventServiceTracker;
private ServiceTracker<SharedSailingData, SharedSailingData> sharedSailingDataTracker;
private ServiceTracker<ReplicationService, ReplicationService> replicationServiceTracker;
private ServiceTracker<DataMiningServer, DataMiningServer> dataMiningServerTracker;
private ServiceTracker<SecurityService, SecurityService> securityServiceTracker;
public RestServletContainer() {
super();
}
public RestServletContainer(Application app) {
super(app);
}
public RestServletContainer(Class<? extends Application> appClass) {
super(appClass);
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
BundleContext context = (BundleContext) config.getServletContext().getAttribute(OSGI_RFC66_WEBBUNDLE_BUNDLECONTEXT_NAME);
racingEventServiceTracker = new ServiceTracker<RacingEventService, RacingEventService>(context, RacingEventService.class.getName(), null);
racingEventServiceTracker.open();
sharedSailingDataTracker = new ServiceTracker<SharedSailingData, SharedSailingData>(context, SharedSailingData.class.getName(), null);
sharedSailingDataTracker.open();
replicationServiceTracker = new ServiceTracker<ReplicationService, ReplicationService>(context, ReplicationService.class.getName(), null);
replicationServiceTracker.open();
dataMiningServerTracker = new ServiceTracker<DataMiningServer, DataMiningServer>(context, DataMiningServer.class, null);
dataMiningServerTracker.open();
securityServiceTracker = new ServiceTracker<SecurityService, SecurityService>(context, SecurityService.class, null);
securityServiceTracker.open();
config.getServletContext().setAttribute(RACING_EVENT_SERVICE_TRACKER_NAME, racingEventServiceTracker);
config.getServletContext().setAttribute(SHARED_SAILING_DATA_TRACKER_NAME, sharedSailingDataTracker);
config.getServletContext().setAttribute(REPLICATION_SERVICE_TRACKER_NAME, replicationServiceTracker);
config.getServletContext().setAttribute(DATA_MINING_SERVER_TRACKER_NAME, dataMiningServerTracker);
config.getServletContext().setAttribute(SECURITY_SERVICE_TRACKER_NAME, securityServiceTracker);
}
@Override
public void destroy() {
super.destroy();
if (racingEventServiceTracker != null) {
racingEventServiceTracker.close();
}
if (dataMiningServerTracker != null) {
dataMiningServerTracker.close();
}
if (securityServiceTracker != null) {
securityServiceTracker.close();
}
}
}
@@ -23,8 +23,8 @@ import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.datamining.SailingPredefinedQueries;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
import com.sap.sailing.server.gateway.jaxrs.RestServletContainer;
import com.sap.sailing.server.gateway.serialization.NotJsonSerializableException;
import com.sap.sailing.shared.server.gateway.jaxrs.RestServletContainer;
import com.sap.sse.common.Distance;
import com.sap.sse.datamining.DataMiningServer;
import com.sap.sse.datamining.Query;
@@ -55,27 +55,17 @@ public class RestServletContainer extends ServletContainer {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
super.init(config);
BundleContext context = (BundleContext) config.getServletContext().getAttribute(OSGI_RFC66_WEBBUNDLE_BUNDLECONTEXT_NAME);
racingEventServiceTracker = ServiceTrackerFactory.createAndOpen(context, RacingEventService.class);
sharedSailingDataTracker = ServiceTrackerFactory.createAndOpen(context, SharedSailingData.class);
replicationServiceTracker = ServiceTrackerFactory.createAndOpen(context, ReplicationService.class);
securityServiceTracker = ServiceTrackerFactory.createAndOpen(context, SecurityService.class);
sailingServerFactoryTracker = ServiceTrackerFactory.createAndOpen(context, SailingServerFactory.class);
config.getServletContext().setAttribute(RACING_EVENT_SERVICE_TRACKER_NAME, racingEventServiceTracker);
config.getServletContext().setAttribute(SHARED_SAILING_DATA_TRACKER_NAME, sharedSailingDataTracker);
config.getServletContext().setAttribute(REPLICATION_SERVICE_TRACKER_NAME, replicationServiceTracker);
config.getServletContext().setAttribute(SECURITY_SERVICE_TRACKER_NAME, securityServiceTracker);
config.getServletContext().setAttribute(SAILING_SERVER_FACTORY_TRACKER_NAME, sailingServerFactoryTracker);
}
@Override
public void destroy() {
super.destroy();
if (racingEventServiceTracker != null) {
racingEventServiceTracker.close();
}
if (securityServiceTracker != null) {
securityServiceTracker.close();
}
}
}