/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.incubator; /** * Abstract base class of {@link ServiceRegistryAccess} factories, and static acquisition point for the global default factory instance. * * @author Robert Mischke */ public interface ServiceRegistryAccessFactory { /** * Creates a read-only {@link ServiceRegistryAccess} for a given caller. There is no need to dispose of the returned access object or * the services retrieved from it. In particular, there is no need to keep a reference to the {@link ServiceRegistryAccess} object after * fetching services from it. * <p> * (Note that this usage pattern is very different from how {@link ServiceRegistryPublisherAccess} instances retrieved from * {@link #createPublisherAccessFor()} must be used.) * * @param caller the caller object * @return the new {@link ServiceRegistryAccess} */ ServiceRegistryAccess createAccessFor(Object caller); /** * Creates a {@link ServiceRegistryPublisherAccess} for a given caller that can be used to publish temporary service instances. The * caller is responsible for calling {@link ServiceRegistryPublisherAccess#dispose()} before shutdown, or at the time the temporary * service instances should be unregistered. * <p> * A typical use case is a dynamic GUI element (for example, an RCP dialog or view) that calls this method during creation, registers * one or more listener services, and then calls {@link ServiceRegistryPublisherAccess#dispose()} when it is destroyed/disposed. This * way, all registered listeners are automatically unregistered. * <p> * For convenience, the {@link ServiceRegistryPublisherAccess} also implements the {@link ServiceRegistryAccess} interface. There are no * additional restrictions to services fetched from {@link ServiceRegistryAccess#getService()}. In particular, these instances can still * be used after {@link ServiceRegistryPublisherAccess#dispose()} has been called on the creating instance. * * @param caller the caller object; used to locate undisposed access instances * @return the new {@link ServiceRegistryAccess} */ ServiceRegistryPublisherAccess createPublisherAccessFor(Object caller); }