Le dim. 1 mars 2020 à 21:00, Mark Struberg <strub...@yahoo.de.invalid> a
écrit :

> We do not leak if the ApplicationBoundary is setup correctly.
>

We do, start/stop/start. You leaked all proxies of the first run.

And nowadays one almost always restarts the full container, not a single
> webapp anyway.
>

The opposite since se api is there actually. It is not uncommon to reuse
the jvm.
Clearly not mainstream but exists.
Also quite very common in tests - with ds, arquillian or evzn our own
junit5 module - so we allocate too much mem (even if out of the heap these
days, still affects CI pods).
Not my immediate concern but shows a design issue or at least potential
enhancement.


> I dig the compile time part.
>

Thks, ping me if needed. One goal is to make geronimo arthur supporting owb.
For ref started
https://github.com/rmannibucau/geronimo-arthur/commit/5316053bdb866ac20b2c1f6a5f6f1c3995af4592
some months ago.



> LieGrue,
> strub
>
> > Am 01.03.2020 um 14:25 schrieb Romain Manni-Bucau <rmannibu...@gmail.com
> >:
> >
> > Le dim. 1 mars 2020 à 13:36, Mark Struberg <strub...@yahoo.de.invalid> a
> > écrit :
> >
> >>>> Am I missing something?
> >>
> >> Yes, the problem is imo the name.
> >> What we might try is to have a long string where we concatenate all
> >> criterias together, and then do a md5 over it.
> >> That means there is a low chance of clashes but a high chance of the
> being
> >> able to re-create the same class name.
> >> Although once we hit the field of CDI Extension modifications it is not
> >> 100% anymore.
> >>
> >
> > We can also do it like weld: a generic proxy for everything so single
> proxy
> > per class per classloader. Would be a bit less optimized but would be
> > better if you start/stop containers in the same classloader, today we
> leak
> > until you configure the class unloading.
> >
> >
> >> That was the reason why we bound the generated procy classes to their
> >> beans. What's wrong with this approach?
> >> Why don't you like that?
> >>
> >
> > I didnt say I dont like that, I said it doesnt work some times.
> > Point is we must today enable a new use case: build time proxy generation
> > (2-3 sub use cases: 1. Graalvm/aot, 2. optimized startup/cloud (we
> already
> > have optims for other area) and 3. better support of future jvm where
> > unsafe can be broken before we fix its replacement (intermediate built
> time
> > replacement of defineClass by generating proxies).
> >
> > High level, it is about scanning at build time somehow (can even be
> > explicit class or beans listing but i expect a mvn plugin hooked through
> > our metadata discovery), generate all proxy .class and be able to load
> them
> > by name instead of generate them.
> > A trivial option can be to have a mapping file, bean#id -> proxyname
> maybe?
> >
> > A spi plugged into abstractproxyfactory is fine but having something
> built
> > in sounds better since it is not really about changing the behavior but
> > more being ~reentrant.
> >
> > Hope it is clearer.
> >
> >
> >
> >> LieGrue,
> >> strub
> >>
> >>> Am 01.03.2020 um 08:16 schrieb Romain Manni-Bucau <
> rmannibu...@gmail.com
> >>> :
> >>>
> >>> Up, I'd like to get it - worse case with a spi - for next release to at
> >>> least enable to become native even if not yet trivial.
> >>>
> >>> Romain Manni-Bucau
> >>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> >>> <https://rmannibucau.metawerx.net/> | Old Blog
> >>> <http://rmannibucau.wordpress.com> | Github <
> >> https://github.com/rmannibucau> |
> >>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> >>> <
> >>
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> >>>
> >>>
> >>>
> >>> Le lun. 11 nov. 2019 à 20:40, Romain Manni-Bucau <
> rmannibu...@gmail.com>
> >> a
> >>> écrit :
> >>>
> >>>> @Mark: so it means my proposal work, right? ;). Joke apart my proposal
> >> was
> >>>> not to have 1 proxy per type but 1 stable name per proxy without
> >> changing
> >>>> the number of classes and reuse the existing one if it already exists
> in
> >>>> the classloader.
> >>>> The only part which can fail is this last one since you can start
> twice
> >> a
> >>>> container in the same classloader and change the meta so the proxy but
> >>>> since the proxy contains the intercepted method markers in its name
> the
> >>>> reuse is safe.
> >>>>
> >>>> So I think it is ok even if the naming convention can likely be
> refined
> >> a
> >>>> lot, no? Am I missing something?
> >>>>
> >>>> Romain Manni-Bucau
> >>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> >>>> <https://rmannibucau.metawerx.net/> | Old Blog
> >>>> <http://rmannibucau.wordpress.com> | Github
> >>>> <https://github.com/rmannibucau> | LinkedIn
> >>>> <https://www.linkedin.com/in/rmannibucau> | Book
> >>>> <
> >>
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> >>>
> >>>>
> >>>>
> >>>> Le lun. 11 nov. 2019 à 20:28, Mark Struberg <strub...@yahoo.de.invalid
> >
> >> a
> >>>> écrit :
> >>>>
> >>>>> Sure!
> >>>>>
> >>>>> Think about having an interface and 3 producer methods. Each with
> >>>>> different proxy configuration. Means 3 different bytecode
> >> optimisations for
> >>>>> the same class.
> >>>>> Or having an interface in an EAR and 4 WARs which have their own
> impls.
> >>>>> Still the proxy gets generated and loaded via the shared
> >> EarClassLoader for
> >>>>> class visibility reasons.
> >>>>>
> >>>>> So there are scenarios where you end up with n proxies - each with
> >>>>> different bytecode - for the same class.
> >>>>>
> >>>>> LieGrue,
> >>>>> strub
> >>>>>
> >>>>>> Am 11.11.2019 um 20:16 schrieb Romain Manni-Bucau <
> >>>>> rmannibu...@gmail.com>:
> >>>>>>
> >>>>>> @Mark: not sure what you mean and which case you have in mind. Can
> you
> >>>>>> precise your answer please and what prevents my patch to work?
> >>>>>>
> >>>>>> Le lun. 11 nov. 2019 à 20:13, Mark Struberg
> <strub...@yahoo.de.invalid
> >>>
> >>>>> a
> >>>>>> écrit :
> >>>>>>
> >>>>>>> no we still need it imo
> >>>>>>>
> >>>>>>>> Am 09.11.2019 um 16:30 schrieb Romain Manni-Bucau <
> >>>>> rmannibu...@gmail.com
> >>>>>>>> :
> >>>>>>>>
> >>>>>>>> Hi everyone,
> >>>>>>>>
> >>>>>>>> I wonder if we can drop the loop
> >>>>>>>> in
> >>>>>
> org.apache.webbeans.proxy.AbstractProxyFactory#getUnusedProxyClassName
> >>>>>>>> to ensure we have stable names for proxies.
> >>>>>>>> The rational behind that is to:
> >>>>>>>>
> >>>>>>>> 1. Stop creating the same class again and again when we
> >>>>>>>> start/stop/restart/restop/... a container in the same classloader
> >>>>>>>> 2. Ensure we have deterministic names for the same proxy
> (currently,
> >>>>> when
> >>>>>>>> the name are conflicting, it depends what was executed before,
> even
> >> in
> >>>>>>> the
> >>>>>>>> same app!).
> >>>>>>>>
> >>>>>>>> From a quick review we only need to mark the intercepted methods
> in
> >>>>> the
> >>>>>>>> proxy name to ensure we can reuse the existing class. Therefore a
> >>>>> quick
> >>>>>>>> proposal for the proxy name suffix is:
> >>>>>>>>
> >>>>>>>> +    protected String getProxySuffix(final Method[]
> >>>>> interceptedMethods,
> >>>>>>>> +                                    final Method[]
> >>>>>>> nonInterceptedMethods) {
> >>>>>>>> +        return "__i_" + getMethodsId(interceptedMethods);
> >>>>>>>> +    }
> >>>>>>>> +
> >>>>>>>> +    private String getMethodsId(final Method[] methods, final
> >>>>>>>> Predicate<Method> filter) {
> >>>>>>>> +        return Stream.of(methods)
> >>>>>>>> +                .filter(filter)
> >>>>>>>> +                .map(m -> m.getName() +
> >>>>>>>> +
> >>>>>>>>
> >>>>>>>
> >>>>>
> >>
> Stream.of(m.getParameterTypes()).map(Class::getSimpleName).collect(joining()))
> >>>>>>>> +                .collect(joining("_"));
> >>>>>>>> +    }
> >>>>>>>>
> >>>>>>>> Full patch is available here:
> >>>>>>>>
> >> https://gist.github.com/rmannibucau/6f6cdf8d605387ac8820dcbc76e67909
> >>>>>>>>
> >>>>>>>> Wdyt?
> >>>>>>>>
> >>>>>>>> If not desired, should I
> >>>>>>>> enrich org.apache.webbeans.spi.DefiningClassService with that
> >> feature?
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Romain Manni-Bucau
> >>>>>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> >>>>>>>> <https://rmannibucau.metawerx.net/> | Old Blog
> >>>>>>>> <http://rmannibucau.wordpress.com> | Github <
> >>>>>>> https://github.com/rmannibucau> |
> >>>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> >>>>>>>> <
> >>>>>>>
> >>>>>
> >>
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>>
> >>
> >>
>
>

Reply via email to