Aaron,

Your response was more than I've expected and provided a lot of great 
details. However, I still have a couple of questions:

1) I was able to gather from Avalon's web documentation that: a) 
Components have roles and use "conf" files for their roles' mappings b) 
Blocks have services and use "xinfo" to expose their services and to 
specify their dependencies on other services c) This means that Components 
should not implement Services but just roles! You've put, sort of, an equation sign 
between Components and Services.

2) I still don't understand why did Avalon people introduced another 
concept such as a Block. Since a Component can also be a Container, it 
could represent a larger (block-like) application concept. Just by 
implementing some sort of Serviceable marker interface it would let others 
to know its intensions of being a Service. Was someone trying to confuse 
us with the concept of a Block? 

3) Who, do your think, would be best to review an Avalon PP presentation? 
I don't want to send it to the whole list for comments.

Thanks,

Pawel



From:   "J Aaron Farr" <[EMAIL PROTECTED]> on 12/09/2003 01:49 PM GMT
Please respond to "Avalon framework users" <[EMAIL PROTECTED]>
To:     "Avalon framework users" <[EMAIL PROTECTED]>
cc: 
Subject:        Re: Avalon containers and good development practices (2)

On Tue, 2003-12-09 at 17:23, Pawel X Karendys wrote:

> In the mean time, I'm still unclear about differences between a 
component 
> and a block. As far as I understand, a component is a low-level entity 
> implementing all Framework's lifecycle methods with the ".xconf" 
> description file attached to it. On the other hand, a block is a 
> component-like entity with a BlockInfo file describing dependencies and 
> implementing all component lifecycle methods except to "suspend" and 
> "resume". When does a component become a block? Is it only when we need 
> services? If so, a block is a component with services and without any 
> differences between the two in terms of business scope they are trying 
to 
> address.

Here's the way I explain it:

The smallest unit is the Service.  The Service has at least two parts:

   1. The interface (or ROLE)
   2. The implementation (one or more)

The words Service and Component can be used interchangeably.  I often
use Service to describe the interface and Component to describe an
interface and implementation, but the semantics are not fixed here.

You can then add meta-data or meta-info (depending on who you talk to)
to a Service:

    Service + Meta-Data = Appliance

The term appliance is only used in Merlin.  An appliance has all the
information necessary to tell a container how to deploy, use and remove
the service.

The term "block" has been used in a number of ways.  Generally, a block
is a collection of one or more services (so it can be just one) which
performs some relatively complete application function.  So a webserver
could be a block.  It might be composed of one or more services.  Some
services may be internal to the block.  Some may be exported for other
blocks to use.  A Cache or PersistentStore might also be called a block
and may consist of only one component.

So when speaking of a block, we need to consider scope.  Additionally,
Phoenix and Merlin used the term block differently.  In phoenix, an
application (single SAR deployable) might be composed of one or more
blocks.  More than one application could be deployed simultaneously. 

In Merlin, there was one root block which could have sub-blocks, so a
Merlin block was not completely analogous to a Phoenix Block.   However,
this terminology has changed slightly and now Merlin uses the term
'container' interchangeably with block.

In summary, it can be a little confusing to figure out what means what
because to a degree it depends on if you're talking about Phoenix,
Merlin, Fortress or just abstract concepts.  Hopefully this didn't
further confuse you. :)

> Consequently, since Component interface has been deprecated, is the same 

> going to happen to the "ComponentManager" and the "ComponentSelector"? ? 

> how about the "RoleManager"?

ComponentManager and ComponentSelector have been replaced with
ServiceManager and ServiceSelector.  Although there are some problems
with the Selector interface, so it's a good rule of thumb to avoid it if
possible.

RoleManager is supported in Fortress, but also discouraged.  Instead, we
are moving to a single meta-data model.  In Fortress there is a
MetaManager (I think that's what it is called) and eventually we'll move
Fortress to support the same meta model as Merlin.  However, you can
still use the RoleManager in Fortress.  It's there mostly for legacy
support.

> Regarding ECM vs. Fortress, can a solution with background threads and 
> half a dozen of managers be considered a light-wait replacement to the 
ECM 
> (even if its architecture is superior)? If I just want to create a 
simple, 
> vertical component architecture made out of components that are quick to 

> initialize, should I just stick to using a default manager?  ? but it 
> doesn't use the "ComponentHandlers" (and pooling) that are nice.

You're free to use ECM or create your own lightweight container, but
you'll often find yourself adding this and that until you end up with
Fortress.  Fortress is a very nice simple Avalon 4 container that
provides just about everything you need.  Yet if Fortress is still too
much and you don't want to use something depricated like ECM, you can
actually create a _very_ simplistic Avalon container out of something
like PicoContainer.

The choice of Containers is all about need.  In some cases you need the
crazy features of Merlin.  In other cases, those features can just get
in the way.  At least, that's my $0.02 on the subject.

> And finally, if "ServiceManager" is not managing services, why do we 
call 
> it a manager?

ServiceManager has two functions:

    1. Supply service dependencies to other services
    2. Allow simple service lookup and discovery

So in some sense, it's more a ServiceLookup service than a Manager.  And
there has been some discussion about how to seperate out these two
semantics and still provide legacy support.  For example, Merlin only
uses the ServiceManager for dependency resolution, NOT for service
discovery.

> Thanks one more time for your help,

No problem.  These are good questions and remind me that I really need
to put together more documentation.  :)

-- 
 jaaron  <http://jadetower.org>


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






American Express made the following
 annotations on 12/10/2003 10:07:39 AM
------------------------------------------------------------------------------
******************************************************************************

     "This message and any attachments are solely for the intended recipient and may 
contain confidential or privileged information. If you are not the intended recipient, 
any disclosure, copying, use, or distribution of the information included in this 
message and any attachments is prohibited.  If you have received this communication in 
error, please notify us by reply e-mail and immediately and permanently delete this 
message and any attachments.  Thank you."

******************************************************************************


==============================================================================

Reply via email to