Did you mean ClassLoaderLock in meecrowave?  Or something like the Rule
defined by MonoMeecrowave?

John

On Mon, Apr 9, 2018 at 8:27 AM Mark Struberg <strub...@yahoo.de.invalid>
wrote:

> John, another proposal. I've implemented the same for the Meecrowave JUnit
> integration.
> Could you create a 'client' UrlClassLoader with no own URLs?
> And then per your 'slice' switch the TCCL accordingly?
>
> That way you will get perfect isolation.
>
> LieGrue,
> strub
>
>
> > Am 09.04.2018 um 14:10 schrieb Romain Manni-Bucau <rmannibu...@gmail.com
> >:
> >
> > 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