aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/LifecycleObject.java2
-rw-r--r--src/main/java/org/traccar/Main.java6
-rw-r--r--src/main/java/org/traccar/ServerManager.java11
-rw-r--r--src/main/java/org/traccar/web/GuiceBridgeInitializer.java49
-rw-r--r--src/main/java/org/traccar/web/WebServer.java49
5 files changed, 70 insertions, 47 deletions
diff --git a/src/main/java/org/traccar/LifecycleObject.java b/src/main/java/org/traccar/LifecycleObject.java
index 7af21d528..fe0dc698a 100644
--- a/src/main/java/org/traccar/LifecycleObject.java
+++ b/src/main/java/org/traccar/LifecycleObject.java
@@ -17,5 +17,5 @@ package org.traccar;
public interface LifecycleObject {
void start() throws Exception;
- void stop();
+ void stop() throws Exception;
}
diff --git a/src/main/java/org/traccar/Main.java b/src/main/java/org/traccar/Main.java
index 72eeb5885..e3286fd5e 100644
--- a/src/main/java/org/traccar/Main.java
+++ b/src/main/java/org/traccar/Main.java
@@ -137,7 +137,11 @@ public final class Main {
LOGGER.info("Stopping server...");
for (var service : services) {
- service.stop();
+ try {
+ service.stop();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
}));
} catch (Exception e) {
diff --git a/src/main/java/org/traccar/ServerManager.java b/src/main/java/org/traccar/ServerManager.java
index ffb15d8ca..99fb9a494 100644
--- a/src/main/java/org/traccar/ServerManager.java
+++ b/src/main/java/org/traccar/ServerManager.java
@@ -72,11 +72,14 @@ public class ServerManager implements LifecycleObject {
}
@Override
- public void stop() {
- for (TrackerConnector connector: connectorList) {
- connector.stop();
+ public void stop() throws Exception {
+ try {
+ for (TrackerConnector connector : connectorList) {
+ connector.stop();
+ }
+ } finally {
+ GlobalTimer.release();
}
- GlobalTimer.release();
}
}
diff --git a/src/main/java/org/traccar/web/GuiceBridgeInitializer.java b/src/main/java/org/traccar/web/GuiceBridgeInitializer.java
new file mode 100644
index 000000000..fc9c88f3b
--- /dev/null
+++ b/src/main/java/org/traccar/web/GuiceBridgeInitializer.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2022 Anton Tananaev (anton@traccar.org)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.traccar.web;
+
+import com.google.inject.Injector;
+import org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager;
+import org.glassfish.jersey.server.spi.Container;
+import org.glassfish.jersey.server.spi.ContainerLifecycleListener;
+import org.jvnet.hk2.guice.bridge.api.GuiceBridge;
+import org.jvnet.hk2.guice.bridge.api.GuiceIntoHK2Bridge;
+
+public class GuiceBridgeInitializer implements ContainerLifecycleListener {
+
+ private final Injector injector;
+
+ public GuiceBridgeInitializer(Injector injector) {
+ this.injector = injector;
+ }
+
+ @Override
+ public void onStartup(Container container) {
+ var injectionManager = container.getApplicationHandler().getInjectionManager();
+ var serviceLocator = ((ImmediateHk2InjectionManager) injectionManager).getServiceLocator();
+ GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
+ var guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);
+ guiceBridge.bridgeGuiceInjector(injector);
+ }
+
+ @Override
+ public void onReload(Container container) {
+ }
+
+ @Override
+ public void onShutdown(Container container) {
+ }
+}
diff --git a/src/main/java/org/traccar/web/WebServer.java b/src/main/java/org/traccar/web/WebServer.java
index 5d20966ad..36f3d7682 100644
--- a/src/main/java/org/traccar/web/WebServer.java
+++ b/src/main/java/org/traccar/web/WebServer.java
@@ -37,27 +37,21 @@ import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
-import org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.server.spi.Container;
-import org.glassfish.jersey.server.spi.ContainerLifecycleListener;
import org.glassfish.jersey.servlet.ServletContainer;
-import org.jvnet.hk2.guice.bridge.api.GuiceBridge;
-import org.jvnet.hk2.guice.bridge.api.GuiceIntoHK2Bridge;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.LifecycleObject;
-import org.traccar.Main;
-import org.traccar.api.DateParameterConverterProvider;
-import org.traccar.config.Config;
import org.traccar.api.AsyncSocketServlet;
import org.traccar.api.CorsResponseFilter;
+import org.traccar.api.DateParameterConverterProvider;
import org.traccar.api.MediaFilter;
import org.traccar.api.ObjectMapperProvider;
import org.traccar.api.ResourceErrorHandler;
-import org.traccar.api.security.SecurityRequestFilter;
import org.traccar.api.resource.ServerResource;
+import org.traccar.api.security.SecurityRequestFilter;
+import org.traccar.config.Config;
import org.traccar.config.Keys;
import javax.inject.Inject;
@@ -77,8 +71,6 @@ import java.util.EnumSet;
public class WebServer implements LifecycleObject {
- private static final Logger LOGGER = LoggerFactory.getLogger(WebServer.class);
-
private final Injector injector;
private final Config config;
private final Server server;
@@ -192,24 +184,7 @@ public class WebServer implements LifecycleObject {
JacksonFeature.class, ObjectMapperProvider.class, ResourceErrorHandler.class,
SecurityRequestFilter.class, CorsResponseFilter.class, DateParameterConverterProvider.class);
resourceConfig.packages(ServerResource.class.getPackage().getName());
- resourceConfig.register(new ContainerLifecycleListener() {
- @Override
- public void onStartup(Container container) {
- var injectionManager = container.getApplicationHandler().getInjectionManager();
- var serviceLocator = ((ImmediateHk2InjectionManager) injectionManager).getServiceLocator();
- GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
- var guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);
- guiceBridge.bridgeGuiceInjector(Main.getInjector());
- }
-
- @Override
- public void onReload(Container container) {
- }
-
- @Override
- public void onShutdown(Container container) {
- }
- });
+ resourceConfig.register(new GuiceBridgeInitializer(injector));
servletHandler.addServlet(new ServletHolder(new ServletContainer(resourceConfig)), "/api/*");
}
@@ -251,21 +226,13 @@ public class WebServer implements LifecycleObject {
}
@Override
- public void start() {
- try {
- server.start();
- } catch (Exception error) {
- LOGGER.warn("Web server start failed", error);
- }
+ public void start() throws Exception {
+ server.start();
}
@Override
- public void stop() {
- try {
- server.stop();
- } catch (Exception error) {
- LOGGER.warn("Web server stop failed", error);
- }
+ public void stop() throws Exception {
+ server.stop();
}
}