I've discovered a problem with setCurrent(scopeType).
What if I called:
child1.setCurrent(BusinessProcessScoped.class)
child2.setCurrent(SessionScoped.class)
Then I would have an ambiguity about "which" current manager was
intended, since there is no definable ordering between these to
scopes.
There's two possible solutions to this:
(1) Limit setCurrent() to the request scope, and require that the
orchestration framework take care of propagation to other requests.
(2) Say that if 2 different current contexts have different child
managers defined, an exception is thrown
Which option do you think we should go for?
On Thu, Nov 27, 2008 at 4:30 PM, Gavin King <gavin(a)hibernate.org> wrote:
On the concall, we made some significant progress with the design
for
hierarchical Managers. We decided to develop the following approach:
(1) web beans belonging to a child manager may have any scope
(2) each child manager has its own set of contexts (there is a
parallel context hierarchy for each scope) that "belong" to, and have
the same lifecycle as, the parent contexts
(3) therefore the web beans belonging to the child are not visible to
web beans belonging to the parent
(4) however, web beans belonging to the parent *are* visible to web
beans belonging to the child
(5) a child manager may be associated with a context by calling
Manager.setCurrent(ScopeType), and is then automagically propagated
with the context
(6) web beans belonging to the child manager may be obtained via EL
evaluation whenever the child manager is in scope, or by directly
calling a getInstance() method of the child manager
The needed API changes are as follows:
Manager {
public Manager createChild();
public void setCurrent(Class<? extends Annotation> scope);
public void validate();
}
Context {
getChild(Manager childManager);
}
There is one question remaining open:
Should it *ever* be possible to access a web bean belonging to the
child manager via a reference that was injected into a web bean
belonging to the parent manager or into some non-contextual object
such as a servlet or MDB?
For example, we might choose to support this in the case that the
child manager web bean specializes the parent manager web bean.
Bill, is this a feature that Oracle requires? If not, I'm inclined to
*not* support it in web beans 1.0.
--
Gavin King
gavin.king(a)gmail.com
http://in.relation.to/Bloggers/Gavin
http://hibernate.org
http://seamframework.org
--
Gavin King
gavin.king(a)gmail.com
http://in.relation.to/Bloggers/Gavin
http://hibernate.org
http://seamframework.org