2018-04-09 14:07 GMT+02:00 John D. Ament <johndam...@apache.org>:

> On Mon, Apr 9, 2018 at 7:55 AM Romain Manni-Bucau <rmannibu...@gmail.com>
> wrote:
>
> > 2018-04-09 13:34 GMT+02:00 John D. Ament <johndam...@apache.org>:
> >
> > > Yeah, I hit that.  I was able to get around the listener issue, but
> then
> > > this still occurred (its actually within OwbCDI where it fails next).
> > >
> > > Basically, TCCLs don't make sense in SE, and its pretty key to how OWB
> > > works.
> > >
> >
> > Hmm why? it is as important than in other cases.
> >
> >
> > >
> > > Is there a way that CDI.current() could resolve to the OWBContainer
> that
> > > was used to bootstrap?  Since SeContainer implements Instance, most of
> > the
> > > work would be there already for the CDI object.
> > >
> > > Or should OWB somehow override the finder in OWBInitializer (initialize
> > or
> > > newContainer methods I had in mind).
> > >
> >
> > Think you really want to impl a finder for your particular case. Sounds
> > like you want a singleton and not a webapp instance but still deploying a
> > webapp, no?
> >
> >
> I was thinking its blocked by the spec, but you have
> your SeContainerSelector so I can replace with my own impl.  Not ideal,
> since SE really should just mean single container but I suppose it will
> work.
>

Not sure, in meecrowave or tomee (to come) we support it for N contexts
potentially.
Spec allows to manipulate one context but still deploy N (N>1) which is
important for packaged apps (=including N elementary apps).

If you don't respect the TCCL then you are probably broken with most
mainstream libs - it is sadly common to use the classloader as a key of a
cache - so maybe the first step is to fix that?
Forcing tomcat or jetty to reuse the launching classloader is quite easy so
maybe the way to go for your case?


>
>
> >
> > >
> > > John
> > >
> > > On Mon, Apr 9, 2018 at 3:21 AM Mark Struberg <strub...@yahoo.de.invalid
> >
> > > wrote:
> > >
> > > > This is kind of a circular issue.
> > > >
> > > > Look at WebBeansContext#getInstance()
> > > >
> > > > public static WebBeansContext getInstance()
> > > > {
> > > >     WebBeansContext webBeansContext =
> > > > WebBeansFinder.getSingletonInstance();
> > > >
> > > >
> > > > And WebBeansFinder.getSingletonInstance() in turn again uses the
> TCCL
> > to
> > > > look up the WebBeansContext.
> > > >
> > > > So even if you create a WebBeansContext with an explicit
> FinderService,
> > > it
> > > > would not make much difference I fear.
> > > >
> > > > LieGrue,
> > > > strub
> > > >
> > > >
> > > > > Am 09.04.2018 um 08:25 schrieb Romain Manni-Bucau <
> > > rmannibu...@gmail.com
> > > > >:
> > > > >
> > > > > Le 9 avr. 2018 02:33, "John D. Ament" <johndam...@apache.org> a
> > écrit
> > > :
> > > > >
> > > > > On Wed, Mar 7, 2018 at 1:33 AM Romain Manni-Bucau <
> > > rmannibu...@gmail.com
> > > > >
> > > > > wrote:
> > > > >
> > > > >> Is it in hammock? Did you force the webapp container to use the
> > > > >> appclassloader in case of a secontainer?
> > > > >>
> > > > >
> > > > > How would I do that?  You mean inside of Tomcat?  I'd much rather
> put
> > > > > together a solution that works independent of a container, and in
> SE
> > > > since
> > > > > I really want there to be a single context for the JVM.
> > > > >
> > > > >
> > > > >
> > > > > Yes. It is actually the cleanest if you dont support multi apps
> > > > deployment
> > > > > cause this way you unify all libs look ups (ds, beanutils, mp
> config,
> > > > ....)
> > > > >
> > > > >
> > > > > I've narrowed the issue down to the classloader used once the
> servlet
> > > > > listener starts up.  It is in fact using the webapp classloader at
> > that
> > > > > point.
> > > > >
> > > > > I was thinking a cleaner solution would be to create an additional
> > > > > constructor in WebBeansConfigurationListener that took the proper
> > > > > WebBeansContext to look up, instead of relying on the singleton
> > service
> > > > to
> > > > > look one up.
> > > > >
> > > > >
> > > > > It is the same, you just have to set the singleton service matching
> > > your
> > > > > environment.
> > > > >
> > > > > You can also delay the cdi startup to be done in the web context
> with
> > > the
> > > > > right tccl.
> > > > >
> > > > >
> > > > >
> > > > >>
> > > > >> Le 7 mars 2018 03:27, "John D. Ament" <johndam...@apache.org> a
> > > écrit :
> > > > >>
> > > > >>> 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