001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
019 */
020 package org.sonar.server.platform;
021
022 import org.slf4j.LoggerFactory;
023 import org.sonar.api.ServerComponent;
024 import org.sonar.api.platform.ServerStartHandler;
025 import org.sonar.api.platform.ServerStopHandler;
026 import org.sonar.api.platform.Server;
027
028 /**
029 * @since 2.2
030 */
031 public class ServerLifecycleNotifier implements ServerComponent {
032
033 private ServerStartHandler[] startHandlers;
034 private ServerStopHandler[] stopHandlers;
035 private Server server;
036
037 public ServerLifecycleNotifier(Server server, ServerStartHandler[] startHandlers, ServerStopHandler[] stopHandlers) {
038 this.startHandlers = startHandlers;
039 this.stopHandlers = stopHandlers;
040 this.server = server;
041 }
042
043 public ServerLifecycleNotifier(Server server, ServerStartHandler[] startHandlers) {
044 this(server, startHandlers, new ServerStopHandler[0]);
045 }
046
047 public ServerLifecycleNotifier(Server server, ServerStopHandler[] stopHandlers) {
048 this(server, new ServerStartHandler[0], stopHandlers);
049 }
050
051 public ServerLifecycleNotifier(Server server) {
052 this(server, new ServerStartHandler[0], new ServerStopHandler[0]);
053 }
054
055 public void start() {
056 /* IMPORTANT :
057 we want to be sure that handlers are notified when all other services are started.
058 That's why the class Platform explicitely executes the method notifyStart(), instead of letting picocontainer
059 choose the startup order.
060 */
061 }
062
063 public void notifyStart() {
064 LoggerFactory.getLogger(ServerLifecycleNotifier.class).debug("Notify " + ServerStartHandler.class.getSimpleName() + " handlers...");
065 for (ServerStartHandler handler : startHandlers) {
066 handler.onServerStart(server);
067 }
068 }
069
070 public void stop() {
071 LoggerFactory.getLogger(ServerLifecycleNotifier.class).debug("Notify " + ServerStopHandler.class.getSimpleName() + " handlers...");
072 for (ServerStopHandler handler : stopHandlers) {
073 handler.onServerStop(server);
074 }
075 }
076 }