I was verifing that the beehive webcontext bean context implementations
were being used (I modified the WebContextFactoryProvider to enable
them)
and found a bug. This is pretty complicated code so I thought I'd check with the list before submitting a fix for it.
The problem is this:
When a control bean attempts to get the service used to create it's
control bean context, the ControlBeanContext.getService() method will
return null if it does not have a parent. So, for example, when a
control bean is being added to the ServletBeanContext, the
ServletBeanContext doesn't have a parent (since it is the top-level
container) and the call fails, we end up with a
java.beans.BeanContextServicesSupport context.
It seems to be a chicken/egg problem, the control bean needs to create
a control bean context using a service from a container which it is not
a member of but cannot become a member until the context has been
created.
I think a have a fix for it, I've attached a diff of ServletBeanContext
which solves the problem by overriding the
ControlBeanContext.getService() method. It will invoke the CBC's
getService() first but if that call fails and the requested service is
a BeanContextServiceProvider, it will supply the caller with the one it
has registered.
I wouldn't consider this an optimal solution, but short of a pretty large rewrite I couldn't come up with much else.
Thoughts/comments?
- Thanks,
Chad
