Date: 2004-04-16T11:13:08
   Editor: HowardLewisShip <[EMAIL PROTECTED]>
   Wiki: Jakarta HiveMind Wiki
   Page: ServicePreloadProposal
   URL: http://wiki.apache.org/jakarta-hivemind/ServicePreloadProposal

   no comment

New Page:

= Problem Description =

(April 16 2004, before 1.0-alpha-4)

Much of the HiveMind architecture is predicated upon the idea that no resource 
should be created until it is needed.  Thus service proxies may be created 
early, but the underlying service implementations (including interceptors) are 
only created when a method of the service interface is first invoked.

This is not always appropriate:

  * During development, it is desirous to create services early. This ensures 
that construction directives (in the module deployment descriptor) are valid, 
that service initialization code
  is valid. It is also helpful for services to be in a fully instantiated state 
prior to debugging.

  * Event driven services should be created early, so that they can register 
for event notifications. Event notification is an aspect of the implementation, 
and event notification
  registration occurs when the service is created, so an event-driven service 
implementation would be unaware of any events that occured prior to its 
construction (on first invocation
  of a service method).

= Attribute Solution =

In this solution, the <service-point> element is extended to include a new 
attribute, {{{create}}}, which would accept the following values:

  * invoke (default) - create the service implementation when a service method 
is first invoked
  * reference - create the service implementation when the service is first 
referenced
  * startup - create the service implementation when the registry is first 
constructed
  * dev-startup - at startup in development mode, otherwise as invoke

Development mode could be defined by one of:
  * A system property, perhaps {{{org.apache.hivemind.development-mode}}}
  * A substitution symbol
  * A constructor parameter for !RegistryBuilder
  * A method of !RegistryBuilder or Registry (that is only invoked if the 
application is in development mode)

There are some conflicts between the {{{create}}} attribute and the service 
model for the implementation. Today, the primitive service model uses the 
equivalent of {{{reference}}}, and the other models use the equivalent of 
{{{invoke}}}.

For services with the threaded or pooled service model, it is (or should it be) 
necessary that !ThreadEventNotifier be invoked after early bird services are 
created?

Is the ''order'' in which services are started relevant?  I would hope note.

= Configuration Point Solution =

In this solution, a new configuration point is defined.  Let's call it 
{{{hivemind.StartupServices}}}.  Contributions look like {{{<create-service 
id="...">}}}.  

After the registry is constructed, this extension point is used to force the 
creation of the services.

This solution works best if the ConditionalContributionsProposal is 
implemented, and applies to <contribution> elements as well as <implementation> 
elements.

Again, there's the question of whether order is important.

= Discussion =

The attribute solution is less verbose but I still find it troubling; I hate 
all ambiguities and this discord between create and the service model is 
troubling.

The configuration point solution is more typing, but (if 
ConditionalContributionsProposal is implemented) seems less ambigous.

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

Reply via email to