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>