Uploaded image for project: 'Apache Onami'
  1. Apache Onami
  2. ONAMI-97

Refactoring/generalization of Onami LifeCycle.

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: lifecycle-0.2.0
    • Fix Version/s: lifecycle-0.2.0
    • Component/s: lifecycle
    • Labels:
      None

      Description

      Currently, Onami LifeCycle supports multiple post injection annotations that are
      invoked after instantiated by Guice. It also supports a Dispose container that
      holds references to injected objects whereby annotated methods will be invoked
      in reverse injection order when the user calls a container method.

      I'd like to generalize both post injection and container to support
      more open-ended features. The features are being driven by functionality in Governator.
      For post injection, Governator supports ordering of annotations. i.e. @PreConfiguration
      methods are invoked before @PostConstruct methods. For the life cycle container,
      Governator supports a @Warmup annotation and others. @Warmup methods are invoked by user
      direction after the Guice Injector has been created.

      The change to post injection is straightforward. Instead of specifying a single post
      injection annotation, an ordered list of annotations is specified. The Guice
      injection listener is modified to iterate over the annotation list in order looking
      for matching methods.

      The change to the life cycle container is more involved. For clarity, the various classes
      and methods are renamed from "Dispose*" to "Stage*". The DefaultStager (formerly DefaultDisposer)
      takes a new argument that determines if objects are processed first-in-first-out or
      first-in-last-out. The Stager interface is now parameterized with the Annotation
      that represents the "stage". The LifeCycleStageModule now binds with its parameterized
      annotation so that Stagers of each stage type can be injected. i.e.

      @Inject
      public Foo( Stager<Dispose> disposer )

      ...

      @Inject
      public Bar( Stager<Warmup> warmups )

      Obviously this is a very big change. My goal is to enhance Onami Lifecycle so that I
      can use it in Governator. I've enclosed the implementation as a zip file instead of a
      patch to make things easier to look at.

      I look forward to discussion/ideas on this!

        Attachments

        1. ONAMI-97.patch
          162 kB
          Jordan Zimmerman
        2. lifecycle.zip
          42 kB
          Jordan Zimmerman

          Activity

            People

            • Assignee:
              randgalt Jordan Zimmerman
              Reporter:
              randgalt Jordan Zimmerman
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: