Hi,

Heres a basic summary of things regarding constraints on dependencies. Consider the following examples.

Terminology
------------------

Component: The object that declares dependency
Provider: The object satisfying dependency
Constraint: Extra conditions that the Provider must satisfy before it will satisfy the Components dependency
Kernel: Object responsible for hosting Component and managing lifecycle etc.


Examples
--------------

We have a ClientFrontend component depends on a CORBA Orb and that ORB must contain the TimeService and PersistenceStateService (2 standard CORBA services).
Component: ClientFrontend
Provider: ORB
Constraint: Must contain TimeService, Must contain PSS


The Myrmidon Executor component depends upon TypeManager component. The TypeManager must be thread-safe.
Component: Executor
Provider: TypeManager
Constraint: Must be thread-safe


The Turbine Scheduler component depends upon TimeService. The TimeService must be accurate to within 100ms
Component: Scheduler
Provider: TimeService
Constraint: Must be accurate to within 100ms


Design
----------

The next question becomes - how do we design it?

1. Are constraints container specific or not?
2. Is there a subset of constraints that are container agnostic?
3. How do we represent constraints in the system? An opaque string? A Configuration tree? An XPath expression?
4. Do the providers or the Kernel validate the constraints?
5. Do the providers get informed that they must conform to certain constraints?
6. Does validation occur at initialization time or assembly time?


My answers would be;
1. Probably
2. Maybe (The <service/> element could be rewritten as a constrain at very least)
3. XPath or some expression string is my current favourite
4. kernel
5. No
6. Preferrably assembly time (but that not always possible)


The problem is basically that in some cases it is going to be practically impossible for kernel to validate the constraint unless the provider conforms to very specific contracts or is self validating.

As for actual code/samples there isn't much at this stage. Merlin allows configuration to be contained within a dependency element like

<dependency>
  <service .../>
  <assembly>
    ...arbitrary config data is here...
  </assembly>
</dependency>

And this is merged into components configuration. The component then has to be able to understand the configuration and this is effectively interpreted as the constraint data.

Rather than freeform config tree I have been playing with elements such as

<constraint type="lifestyle" value="thread-safe"/>

which the container validates by making sure that the component is thread-safe.


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



Reply via email to