[ 
https://issues.apache.org/jira/browse/JENA-1029?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14803409#comment-14803409
 ] 

Andy Seaborne commented on JENA-1029:
-------------------------------------

Nothing here says those static calls are calling a fixed implementation. The 
key is that there is one registry place that code can call.  Switchable is easy 
IF there the correct implementation is in place before any Jena code runs and 
tried to initialize Jena.

But I still don't understand how that step would work.  How would the OSGi 
(say) version get used? Injected? Or discovered?


> 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