Uploaded image for project: 'Apache Jena'
  1. Apache Jena
  2. JENA-1029

Add a Jena-wide subsystem lifecycle

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: Jena 3.0.0
    • Fix Version/s: Jena 3.0.1
    • Component/s: None
    • Labels:
      None

      Description

      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

      JenaSubsystemLifecycle
      public interface JenaSubsystemLifecycle {
          public void start() ;
          public void stop() ;
      }
      

      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:

      JenaSubsystemRegistry
      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) ;
      }
      

      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.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                andy Andy Seaborne
                Reporter:
                andy Andy Seaborne
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: