That pretty much sums up the issue.

When the app starts, the current thread is main.
When the webapp launches, it doesn't seem to load it properly.  The good
news is if I override to the main class's thread, it still doesn't work.
So there's some inherent flaws.  This was by overriding SingletonService to
use the same OWB container.

I was able to replicate the issue using pain container start up using an
older pattern as well

lifecycle =
WebBeansContext.currentInstance().getService(ContainerLifecycle.class);
lifecycle.startApplication(null);

I'm going to test to see if I see this fixed on 1.x and broken on 2.x.

John

On Mon, Mar 5, 2018 at 8:04 AM Mark Struberg <strub...@yahoo.de.invalid>
wrote:

> Hmm, that should not be necessary at all.
>
> The containers should resolve to the same BeanManager, UNLESS you have a
> different ClassLoader!
> But in that case almost everything will be broken anyways.
>
> LieGrue,
> strub
>
> > Am 05.03.2018 um 12:31 schrieb John D. Ament <johndam...@apache.org>:
> >
> > Yes, so that's basically what I'm seeing at issue.  The TCCL's are
> different, different hierarchies, and as a result it cannot find the
> BeanManagerImpl.
> >
> > So here's the tricky part.  I want to go from the SeContainer to the
> WebBeansContext.  Do I just use WebBeansContext.getCurrentInstance() and
> then override the SingletonService?
> >
> > On 2018/03/05 07:40:05, Mark Struberg <strub...@yahoo.de.INVALID> wrote:
> >> +1
> >>
> >> The 'core' object in OWB is the WebBeansContext. This contains the 1
> BeanManager for the 'application'.
> >>
> >> The lookup is done through the Finder. By default it's basically a
> Map<ClassLoader, WebBeansContext>.
> >> But you can change this to a custom one.
> >>
> >> Btw CDI.current() will always give you an InjectableBeanManager which
> is basically a thin wrapper which is Serializable.
> >>
> >> LieGrue,
> >> strub
> >>
> >>
> >>
> >>> Am 05.03.2018 um 06:44 schrieb Romain Manni-Bucau <
> rmannibu...@gmail.com>:
> >>>
> >>> Hi John
> >>>
> >>> The lookup is done depending your finder impl. By default it is by
> >>> classloader which means, if you dont end up using the same
> beanmanagerimpl,
> >>> you dont have the right tccl in different places - which has impacts as
> >>> well.
> >>>
> >>> The wrapper instance is not that important here, only the delegate one
> >>>
> >>>
> >>> Le 5 mars 2018 02:19, "John D. Ament" <johndam...@apache.org> a
> écrit :
> >>>
> >>>> Hi
> >>>>
> >>>> So I'm noticing when CDI.current().getBeanManager() is called, it
> returns a
> >>>> new InjectableBeanManager instance.  I have a custom OWBListener (
> >>>> https://github.com/hammock-project/hammock/blob/master/
> >>>> bootstrap-owb2/src/main/java/ws/ament/hammock/bootstrap/
> >>>> owb/OWBListener.java)
> >>>> which handles the lifecycle references in the servlet container.  I
> don't
> >>>> want to start the application, because its already been started by
> the SE
> >>>> container so my custom version doesn't do that.
> >>>>
> >>>> However, I've noticed that the underlying BeanManager is not the same
> as
> >>>> the one used by the SE initialization.  Is this on purpose?  Is there
> >>>> something special that has to be done so that the underlying
> >>>> BeanManagerImpl on WebBeansContext.getInstance().getBeanManagerImpl()
> >>>> returns the one created via SE?
> >>>>
> >>>> John
>
>

Reply via email to