[ https://issues.apache.org/jira/browse/JENA-1029?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14790826#comment-14790826 ]
A. Soroka commented on JENA-1029: --------------------------------- I may be misunderstanding what this is about, but if not, then I would say that it would be nice to be able to be able to implement this in several ways depending on assumptions about the environment. In other words, to have a plain old implementation, a CDI impl, an OSGi impl, or at least, to make it possible for people (like me {grin}) who live in a world (OSGi, in my case) wherein there is already a strong and well-supported lifecycle system to interoperate easily therewith. > Add a Jena-wide subsystem lifecycle > ----------------------------------- > > Key: JENA-1029 > URL: https://issues.apache.org/jira/browse/JENA-1029 > Project: Apache Jena > Issue Type: Improvement > Affects Versions: Jena 3.0.0 > Reporter: Andy Seaborne > > A subsystem lifecyclefor Jena would provide the hook for: > * basic wiring together e.g. wiring RIOT into Jena core > * initialization e.g. {{TDB.init()}} becomes redundant > * starting and stopping in large systems, e.g. starting and stopping Fuseki2 > when in a Tomcat server > This proposal is as simple as possible. It is for system bootstrap and basic > lifecycle. It is not intended to work for a mixture of jars from different > Jena releases. > *Sub-system Interface* > {code:title=JenaSubsystemLifecycle|borderStyle=solid} > public interface JenaSubsystemLifecycle { > public void start() ; > public void stop() ; > } > {code} > {{stop}} would not be called normally as part of JVM exit (code can do that > itself anyway). It is in support of start-stop-(re)start and only called if > there is a hook for such a cycle. {{stop}} is more of a placeholder for the > moment. > *Registry* > There is a single registry: > {code:title=JenaSubsystemRegistry|borderStyle=solid} > public class JenaSubsystemRegistry { > public static void add(JenaSubsystemLifecycle module) ; > public static boolean isRegistered(JenaSubsystemLifecycle module) ; > public static void remove(JenaSubsystemLifecycle module) ; > public static int size() ; > public static boolean isEmpty() ; > public static void forEach(Consumer<JenaSubsystemLifecycle> action) ; > } > {code} > *Ensuring initialization* > Jena core provides a "system init" that is cheap to call if initialization > has already occurred. It should attempt the first call as early as possible. > When initializing, it runs a {{ServiceLoader}} cycle to discover any > {{JenaSubsystemLifecycle}} implementations described in a > {{META-INF/services/...}} file and populates the registry. Then the registry > is > used to call {{start()}} in some unspecified order. -- This message was sent by Atlassian JIRA (v6.3.4#6332)