使用复合组件时,OmniFaces UnmappedResourceHandler 似乎会泄漏资源

OmniFaces UnmappedResourceHandler seems to leak resources when composite components are used

似乎 UnmappedResourceHandler 正在加载资源文件夹中的复合组件 xhtml 文件。结果似乎是逐渐增加的内存泄漏。

可在 FaceletViewHandlingStrategy.metadataCache 内找到泄漏点。 它依赖于哈希图,当使用上述处理程序时,UnmappedResources 用作 CompositeComponentBeanInfo 个实例的键。

如果不使用 UnmappedResourceHandler,则密钥包含 ResourceImpl。区别在于 UnmappedResource 不像 ResourceImpl 那样实现 equals()

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }

    ResourceImpl resource = (ResourceImpl) o;
    return resourceInfo.equals(resource.resourceInfo);
}

所以问题似乎是在第一种情况下 CompositeComponentBeanInfo 一次又一次地添加到 metadataCache。在第二个中,一切都按预期工作。

还有其他人可以确认这个问题吗?

UnmappedResourceHandler 复合组件的内存泄漏已得到确认,并已由 this commit for 2.1, this commit for 1.11 and this commit 为 1.8.3 解决。

截至今天,所有版本均在 Maven 中可用。