package io.qdb.server; import io.qdb.server.input.InputManager; import io.qdb.server.input.InputStatusMonitor; import io.qdb.server.output.OutputManager; import io.qdb.server.output.OutputStatusMonitor; import io.qdb.server.queue.QueueManager; import io.qdb.server.queue.QueueStatusMonitor; import org.simpleframework.transport.connect.Connection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Singleton; import java.io.Closeable; import java.io.IOException; /** * Manages shutdown of the server. */ @Singleton public class ShutdownManager implements Closeable { private static final Logger log = LoggerFactory.getLogger(ShutdownManager.class); private final Connection connection; private final OutputManager outputManager; private final InputManager inputManager; private final QueueManager queueManager; private final QueueStatusMonitor queueStatusMonitor; private final OutputStatusMonitor outputStatusMonitor; private final InputStatusMonitor inputStatusMonitor; @Inject public ShutdownManager(Connection connection, OutputManager outputManager, InputManager inputManager, QueueManager queueManager, QueueStatusMonitor queueStatusMonitor, OutputStatusMonitor outputStatusMonitor, InputStatusMonitor inputStatusMonitor) { this.connection = connection; this.outputManager = outputManager; this.inputManager = inputManager; this.queueManager = queueManager; this.queueStatusMonitor = queueStatusMonitor; this.outputStatusMonitor = outputStatusMonitor; this.inputStatusMonitor = inputStatusMonitor; } @Override public void close() { try { connection.close(); } catch (IOException e) { log.error("Error closing listener: " + e, e); } queueStatusMonitor.close(); outputStatusMonitor.close(); inputStatusMonitor.close(); try { outputManager.close(); } catch (Exception e) { log.error("Error closing output manager: " + e, e); } try { inputManager.close(); } catch (Exception e) { log.error("Error closing input manager: " + e, e); } try { queueManager.close(); } catch (Exception e) { log.error("Error closing queue manager: " + e, e); } log.info("Shutdown complete"); } }