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