/*
* 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.atteo.moonshine.services;
import java.util.List;
import org.atteo.moonshine.ConfigurationException;
import com.google.inject.Injector;
import com.google.inject.Module;
/**
* Configures and starts {@link Service services}.
*
* <p>
* Each service should implement {@link Service}. This interface defines
* {@link Service#configure() configure()} method which allows to register Guice {@link Module},
* {@link Service#start() start()} and {@link Service#stop() stop()} methods to execute some logic
* upon start and stop of the application. </p>
*/
public interface Services extends AutoCloseable {
public static interface Builder {
/**
* Sets application name.
*/
Builder applicationName(String applicationName);
/**
* Adds custom Guice module.
*/
Builder addModule(Module module);
/**
* Sets services configuration.
*/
Builder configuration(Service config);
/**
* Sets lifecycle listener.
*/
Builder registerListener(LifeCycleListener listener);
/**
* Builds {@link Services} based on this builder parameters.
*/
Services build() throws ConfigurationException;
}
public static class Factory {
public static Builder builder() {
return new ServicesImplementation();
}
}
/**
* Returns global injector.
* @return global injector
*/
Injector getGlobalInjector();
/**
* Returns a mapping from {@link Service} to the list of bindings it registers.
*
* <p>
* This should be used only for debug purposes.
* </p>
* @return map from service to the list of bindings
*/
List<? extends ServiceInfo> getServiceElements();
/**
* Starts all services.
*/
void start();
/**
* Stops all services.
*/
void stop();
/**
* Stops all services and destroys the injector.
*/
@Override
void close();
}