I've just added a service package to Excalibur scratchpad.  The
package contains the principal class ServiceLoader which basically
loads, configures, contextualizes, services, and initializes
components based on a set of supplied jar files.  The loader reads
in manifest entries to locate available services using the Avalon Block
declaration, and builds services using information available in the
associated .xinfo resources.

If your interested in this utility, the easiest way to build it is to
checkout the apache-avalon-apps/enterprise/tools package and do the
following

  $ ant all
  $ ant demo

What you will see is a couple of service being loaded, executed and
disposed of.  Nothing dramatic, but very helpful during development
in executing and validating implementations.

To complete the implementation I really need some assistance in two
areas.

  1.  The implementation includes an Ant task that lets you run
      a component - however, the set-up of the task is rather painful
      due to duplicate definition of classpaths - I really need an
      ant expert to help me out on this one.

  2.  The ServiceLoader implementation makes a distinction between
      different types of services based on implementation policy
      declared in the .xinfo file.  At this stage the implementation
      provides support for TRANSIENT and SINGLETON services.  I would
      have liked the release to have included POOLED services, however,
      I have not been able to figure out a clean approach to describing
      an implementation meta-profile for a pooled provider using the
      Excalibur mpool interfaces.

      There are two issues I'm running into concerning mpool.  First
      of, ServiceManager and ComponetManager both expose a release
      operation takes as an argument an Object to be release back to
      a pool. The ExcaliburComponentManager basically holds references
      to all pooled objects so it knows which pool to return object to,
      however, the approach seems awkward.  I would prefer an approach
      where the service manager implementation could locate a pool
      provider (handler) based on the type of object that is returned.
      This would require the addition of an operation to one the mpool
      interfaces to get the base class of the pool factory.

      The second topic is sorting out a definition of a pool such that a
      pool implementation can be dynamically created by the
      ServiceLoader. I figure this could be easily achieved by included
      a pool factory and initial size info in a implementation profile,
      however, I'm not using pooled providers so I'm hoping someone else
      can provide guidance here.

Documentation of the ServiceLoader is reasonably complete.  It is available
through the javadoc and on-line at:

http://home.osm.net/doc/tools/overview-summary.html
(then click on org.apache.avalon.excalibur.service package link)

Cheers, Steve.


Stephen J. McConnell, OSM sarl
digital products for a global economy
http://www.osm.net
mailto:[EMAIL PROTECTED]


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to