/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.toolkit.core.api;
import de.rcenvironment.toolkit.core.setup.ToolkitFactory;
/**
* The initial interface for accessing and controlling a {@link Toolkit} instance.
*
* The main purpose of the RCE Toolkit is to provide a consistent set of services within a JVM. It is currently used to provide reusable
* services for distributed applications, but could be used to provide all kinds of services. It is explicitly possible to use multiple
* {@link Toolkit} instances within the same JVM without interference.
*
* The basic building blocks of a {@link Toolkit} setup are modules, which define a subset of services, and the {@link ToolkitFactory} which
* provides dependency injection support for the common task of consuming services as part of implementing another service.
*
* @author Robert Mischke
*/
public interface Toolkit {
/**
* @return the registry for accessing the set/map of services
*/
ImmutableServiceRegistry getServiceRegistry();
/**
* Not used yet, but intended to provide shutdown hooks to services (e.g. for gracefully closing network ports or connections).
*/
void shutdown();
/**
* Convenience shortcut for fetching service instances. Returns null for unavailable or unknown services.
*
* @param <T> the class of the service API to fetch
* @param serviceClass the class of the service API to fetch
* @return a service implementation, or null if none is available
*/
<T> T getService(Class<T> serviceClass);
}