Skip to content

Commit

Permalink
FISH-10136 Remove now redundant code
Browse files Browse the repository at this point in the history
Mojarra handles this itself now, we should no longer need this on our side

Signed-off-by: Andrew Pielage <[email protected]>
  • Loading branch information
Pandrex247 committed Nov 26, 2024
1 parent dac70f4 commit dc83a6a
Showing 1 changed file with 0 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2051,7 +2051,6 @@ public void stop() throws Exception {
// START SJSAS 6258619
ClassLoaderUtil.releaseLoader(this);
// END SJSAS 6258619
clearBeanELResolverCache();
clearJaxRSCache();

synchronized(jarFilesLock) {
Expand Down Expand Up @@ -2659,69 +2658,6 @@ private void clearReferencesRmiTargets() {
}
}

private void clearBeanELResolverCache() {
try {
Class<?> elUtilsClass = CachingReflectionUtil.getClassFromCache("com.sun.faces.el.ELUtils", this);
if (elUtilsClass != null) {
clearBeanResolver(elUtilsClass);
}
} catch (Exception e) {
logger.log(Level.WARNING, "Error clearing BeanELResolver cache", e);
}
}

private void clearBeanResolver(Class<?> elUtilsClass) throws Exception {
Optional<Class<?>> elResolverClass = Optional.ofNullable(CachingReflectionUtil
.getClassFromCache("jakarta.el.BeanELResolver", this));

Field field = CachingReflectionUtil.getFieldFromCache(elUtilsClass, "BEAN_RESOLVER", false);
if (field == null) {
logger.log(Level.FINE, "Could not find BEAN_RESOLVER field on {0}", elUtilsClass.getName());
return;
}

// TODO: Review whether this is still required; Mojarra may have fixed this themselves in PR#5479?
// Is there solution enough? Do we need to retain this for cases where another Faces implementation is being provided?
Object resolver = field.get(null);
if (resolver != null && elResolverClass.isPresent()) {
logger.fine(String.format("Fields: %s", Arrays.stream(elResolverClass.get().getDeclaredFields())
.map(Field::toString).collect(Collectors.toList())));
Method clearPropertiesMethod = CachingReflectionUtil.getMethodFromCache(elResolverClass.get(),
"clearProperties", false, ClassLoader.class);
if (clearPropertiesMethod != null) {
clearPropertiesMethod.invoke(resolver, this);
} else {
clearBeanELResolverPropertiesCache(resolver, elResolverClass.get());
}
} else {
logger.warning("BeanELResolver not found");
}
}

/**
* Workaround until clearProperties() is available in Jakarta EL
* @see <a href="https://github.com/jakartaee/expression-language/pull/215">Jakarta EL Pull Request</a>
*/
private void clearBeanELResolverPropertiesCache(Object resolver, Class<?> elResolverClass) throws Exception {
Optional<Class<?>> elResolverCacheClass = Optional.ofNullable(CachingReflectionUtil
.getClassFromCache("jakarta.el.BeanELResolver$SoftConcurrentHashMap", this));
var propertiesField = Optional.ofNullable(CachingReflectionUtil
.getFieldFromCache(elResolverClass, "properties", true));
@SuppressWarnings("unchecked")
ConcurrentHashMap<Class<?>, Object> properties =
(ConcurrentHashMap<Class<?>, Object>) propertiesField.get().get(resolver);
properties.entrySet().removeIf(entry -> entry.getKey().getClassLoader() == this);
var mapField = Optional.ofNullable(CachingReflectionUtil
.getFieldFromCache(elResolverCacheClass.get(), "map", true));
@SuppressWarnings("unchecked")
ConcurrentHashMap<Class<?>, Object> map =
(ConcurrentHashMap<Class<?>, Object>) mapField.get().get(propertiesField.get().get(resolver));
map.entrySet().removeIf(entry -> entry.getKey().getClassLoader() == this);
var cleanupMethod = Optional.ofNullable(CachingReflectionUtil
.getMethodFromCache(elResolverCacheClass.get(), "cleanup", true));
cleanupMethod.get().invoke(propertiesField.get().get(resolver));
}

private void clearJaxRSCache() {
try {
Class<?> cdiComponentProvider = CachingReflectionUtil
Expand Down

0 comments on commit dc83a6a

Please sign in to comment.