[MERLIN] status report

Stephen McConnell <[email protected]> Mon, 06 Jan 2003 04:04:34 +0100
Newsgroups gmane.comp.jakarta.avalon.apps.devel
Message-ID <[email protected]>
Over the past couple of months I've been working on the assembly, meta 
and Merlin packages as part of the transition out of Excalibur and into 
the avalon-sandbox project.  The transition involved a number of changes 
that are listed below:

  1. refactoring of the classloading mechanisms (following Berin's 
suggestions
     from way back) taking into consideration the discussions concerning a
     profile driven container

  2. incorporation of requirements posted under the Cocoon general 
discussions
     relating to blocks and overall component management requirements
     (Stefano, et. al.)

  3. incorporation of support for the concepts and direction established 
in the
     "context discussions" including the ability to customize your
     contextualization interface (Leo's process)

  4. clean separation of the assembly concerns from containment concerns
     (Steve)

  5. simplification of the meta XML descriptors
     (derived from context discussions)

  6. introduction of the notion of "blocks" as composite components
     (Cocoon requirements)

  7. clean separation of component deployment (under Appliance) as distinct
     from development templates (under Profile)
     (Gary's comments on separation of concerns)

  8. improvements in XML schemas for the container and profile mode so that
     naming matches usage
     (Steve)

  9. introduction of a bootstrap system that is independent of the extension
     directories or any other jar file (enabling support for Java WebStart
     based applications
     (Gary with respect to WebStart requirements)

 10. addition of a appliance customization layer that makes is drop-dead
     simple to set up an component management engine and launch customized
     components
     (Steve)

 11. addition of test cases

 12. elimination of the necessity to explicitly declare components in
     jar file (files are now auto scanned)
     (Steve)

 13. improvements to the logging system
     (Vinay Chandran patches)

 14. addition of proxy support for ComponentManager and ComponentSelector
     (content from Berin in framework)

 15. separation of the kernel configuration form the deployment 
configuration
     (based on suggestions from Vinay Chandran and others)

Structurally speaking - the excalibur/assembly (Merlin 2.0) package has 
been split into two distinct packages - avalon-sandbox/assembly and 
avalon-sandbox/merlin (Merlin 2.1).  The new assembly is independent of 
a containment strategy - it basically handles all of the stuff to do 
with component deployment.  The avalon-sandbox/merlin handles the 
hierarchical containment mode and the implementation of a block 
concept.  Just as the assembly package separates component management 
under an Appliance class, the Merlin package separates containment 
management under a Block class. 

Operationally speaking there are some changes that need to be 
considered.  The avalon-sandbox.merlin package has introduced some 
changes that will require some client rework - not much, but important 
non-the-less.  These changes include:

  1. the kernel.xml is now limited to "just the kernel" - i.e. it doe 
not contain
     the definition of the container hierarchy, instead - the kernel 
reads a blocks.xml
     file which tells the kernel the location of blocks to be loaded.  
Each block is an
     semi-independent container hierarchy

  2. the blocks.xml file contains references to the set of blocks to 
load.  Each block
     is a jar file containing the resource BLOICK-INF/block.xml.  The 
block.xml contains
     the container hierarchy definition.  The container definition has 
been improved with the
     separation of interface versus implementation - in effect each 
block declares the
     service it provides, and the implementation in the form of a 
container hierarchy
     under an <implementation> tag.

  3. There have updates to the xinfo and xprofile resource.  The xinfo 
resource now
     supports a simpler and cleaner definition of dependencies and 
service declarations.
     Instead of:

        <dependency>
          <role>rolename</role>
          <reference type="foo.bar.Xxx" version="1.1"/>
        </dependency>
    
      You can use the simplified form:

        <dependency type="foo.bar.Xxx:1.1" role="rolename"/>

      This should be backward compatible (for a while).  The xprofile 
resource
      that contains profile templates under the <profiles> tag use to 
contain
      profiles declares under a <component> tag - this has been changed from
      <component> to <profile>.  Similarly, the <container> tag in the 
block.xml
      file use to contain <component> tags which have been replaced with
      <appliance> tags to more correctly reflect the object established 
from the
      declaration and facilitate separation of the notion of an "appliance"
      from a "profile" (where a profile is simply the template on which an
      appliance is established).

      Demos are available in both the assembly and Merlin packages that 
incorporates
      these enhancements - but documentation is not up to the same level 
- more work
      to be done in that area following the reshuffle.

Aside from documentation updating, there are still a couple of more 
things to be done before Merlin 2.1 stabilizes - namely some more work 
on the context area to integrate an abstract location implementation 
model and handling of alias declarations, and secondly, the introduction 
of dynamic meta into blocks - so that things like dependencies and 
services can be resolved based on the computational requirements of the 
containment solution.  However - what is ion place today in 
avalon-sandbox/assembly and /meta is functionally equivalent or 
exceeding to 2.0 and is structurally a lot cleaner.  Testing and 
validation actions are still pending but once that is complete I suggest 
we drop the excalibur repository a few weeks time.

Just for reference (and because it isn't documented anywhere just yet) 
to run the Merlin 2.1 demo (which includes a totally custom 
contexualization interface demo) all you need to do is checkout the 
Avalon, excalibur and sandbox repositories, then:

 $ cd avalon-sandbox
 $ cd merlin
 $ ant
 $ java -classpath build\lib\avalon-merlin-bootstrap-2.1.jar 
org.apache.avalon.merlin.bootstrap.Merlin merlin.properties


One more thing - based on the success of the context implementation 
approach, I would like to see Merlin 2.1 move closer to the deployment 
state model I described earlier in the Wiki 
http://nagoya.apache.org/wiki/apachewiki.cgi?AvalonFive.  To go from 
where we are not to that model is not a big jump in terms of the code - 
but I thing it will be a massive jump in terms of overall flexibility in 
that we will be able to support arbitrary component models.

Next step - cleaning up - polishing documentation - and getting in place 
a workplan for remaining feature additions and/or structural adjustments.

Cheers, Steve.


-- 

Stephen J. McConnell
mailto:[email protected]
http://www.osm.net