[
https://issues.apache.org/jira/browse/JENA-1029?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14803243#comment-14803243
]
Andy Seaborne commented on JENA-1029:
-------------------------------------
It is easier to add a "level" and initialize in level order (from low to high).
jena core is level1, RIOT level 2, ARQ level 3, TDB level 4. SDB, text and
spatial are the default.
It should not matter; it does make debugging easier! It gets complicated
because of static constants getting initialized for vocabularies and symbols
used in Contexts.
{code}
public interface JenaSubsystemLifecycle {
public void start() ;
public void stop() ;
default public int level() { return 9999 ; }
}
{code}
> 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)