[ 
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)

Reply via email to