Berin Loritsch wrote:
>
> > From: Stefano Mazzocchi [mailto:[EMAIL PROTECTED]]
> >
> >
> > Playing the stubborn role at least brought some unification
> > back, which is a good thing, no matter how much my ego is
> > satisfied with the resoluzion :)
> >
> > No, it is clear now and it was clear before, just that I do
> > not perceive
> >
> > lookup(role,hint);
> >
> > and
> >
> > lookup(role+"/"+hint);
> >
> > to be architectrually equivalent since they represent two
> > different cognitive ways to access to components and we loose
> > completely the ability to match a role to a java interface.
>
> Stefano. There are several component architectures in existence.
> Each one of them has the concept of lookup, container, component,
> and client. This is true of CORBA, COM, EJB, Servlet, Avalon,
> etc. The one thing that is different about Avalon from all the
> other component architectures is the lookup.
>
> The other component architectures *bind* components or component
> stubs to a namespace. That namespace can be hierarchical (i.e.
> use directories), or flat. EJBs and Servlets use JNDI. CORBA
> uses the COS Naming Service. COM uses another mechanism (I am
> not as familiar with that).
>
> Everywhere we need to use constraints (i.e. hints), it is usually
> done from a container/component. The hybrid container/component
> acts as both a container and a component. Take advantage of this
> fact, and access the components you need directly.
>
> > While using java interfaces for metadata is a limited
> > approach, at least it allowed stronger typing. The same can
> > be said for 'role = interface'.
>
> However, it causes problems with inheritance. Consider if you
> will something that until I brought it to the Cocooners attention
> was rather common. An abstract base class for component
> implementations implements the ThreadSafe interface. A concrete
> implementation that extends the abstract class implements the
> Poolable interface. So which is it? Because of this fiasco,
> we were forced to put in some checks that would throw an exception
> if there were multiple LifeStyle interfaces implemented for a
> component.
Great point, I missed it before.
> We were also forced to adopt the practice of not declaring lifestyle
> until the component was concretely implemented. The inheritance
> of lifestyle seemed like a good approach at first, but it caused
> more problems than it solved.
>
> Not to mention it is difficult to authoritatively say how the
> component would be treated in the container.
>
> That is why Fortress, Merlin, Phoenix, et. al. declare the lifestyle
> and other meta information in the component descriptor. The
> developer can say with confidence which creational policy (lifestyle)
> was used for their component. There was less ambiguity and less
> chance for inheritance causing problems.
Ok, I'm sold.
> Furthermore, with the role = interface issue in over half of the
> cases it is sufficient. However, the container has no way of
> knowing what the component needs in terms of external components.
> By using meta data, we can implement a more *secure* system by
> only allowing a component to see the external components it
> needs or is registered for. As it is now, a component can freely
> try interface names to attempt to control or cause internal DoS
> attacks because role=interface and there is no scoping of what
> the component can see.
>
> We can develop a far more secure system that is more architecturally
> unfriendly to deviant components that might be loaded in at runtime
> because role != interface, and the component can only see what it
> is allowed to see.
>
> The container can have the needed control to provide a secure
> environment.
>
> >
> > Anyway, since it seems like I'm the only one having such
> > vision, I'll shut up and let you guys do your job.
>
> Don't sound so defeated.
Ok, got your points: I'll follow you guys.
--
Stefano Mazzocchi One must still have chaos in oneself to be
able to give birth to a dancing star.
<[EMAIL PROTECTED]> Friedrich Nietzsche
--------------------------------------------------------------------
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>