gpt4 book ai didi

weblogic - 带有 DCEVM 和 HotSwapAgent 的 WebLogic 上的奇怪 java.beans.Introspector 行为

转载 作者:行者123 更新时间:2023-12-01 02:11:34 24 4
gpt4 key购买 nike

我在带有 DCEVM(完整实现)的 JVM 1.7 和带有自定义插件的 HotSwapAgent 上运行 WebLogic,该插件在每个 onClassLoad 上触发。

我遇到了使用 java.beans.Introspector 的 Freemarker 的问题。我发现的事实是,当我对 HotSwapAgent 调用的方法(通过 ReflectionCommand)调用 Introspector.flushCaches 时,Introspector 中的 BeanInfo 会正确失效(使用该线程中的调试器检查)。但是,当我向 WLS 应用程序服务器发出请求时,工作线程的 Introspector 会显示旧值!

这似乎是一些线程本地实现,但我无法在 java.beans.Introspector 的文档中找到任何指向该假设的内容。

有没有人知道为什么会发生这种情况以及如何解决?

目前,我将有关重新加载的类的信息存储在单独的类中,并从请求线程重新加载该缓存中的所有内容,该线程有效。

感谢您提供任何线索。

最佳答案

感谢@ddekany 和他对相关问题的回答 Freemarker removeIntrospectionInfo does not work with DCEVM after model hotswap

似乎 JVM(至少是 HotSpot 1.7)按 ThreadGroup 缓存 Introspector 的缓存。这意味着,Introspector.flushCaches必须在相应的 ThreadGroup 中运行的线程中调用.

当我对应用程序中的所有 ThreadGroup 执行此操作时,一切又开始正常工作。

我找不到任何文档为什么会出现 java.beans.IntrospectorThreadGroup 缓存因此,如果有人对此有可靠信息,请添加带有链接的评论。

谢谢。

更新:

来自 JDK7 源代码

/**
* Introspect on a Java Bean and learn about all its properties, exposed
* methods, and events.
* <p>
* If the BeanInfo class for a Java Bean has been previously Introspected
* then the BeanInfo class is retrieved from the BeanInfo cache.
*
* @param beanClass The bean class to be analyzed.
* @return A BeanInfo object describing the target bean.
* @exception IntrospectionException if an exception occurs during
* introspection.
* @see #flushCaches
* @see #flushFromCaches
*/
public static BeanInfo getBeanInfo(Class<?> beanClass)
throws IntrospectionException
{
if (!ReflectUtil.isPackageAccessible(beanClass)) {
return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
}
ThreadGroupContext context = ThreadGroupContext.getContext();
BeanInfo beanInfo;
synchronized (declaredMethodCache) {
beanInfo = context.getBeanInfo(beanClass);
}
if (beanInfo == null) {
beanInfo = new Introspector(beanClass, null, USE_ALL_BEANINFO).getBeanInfo();
synchronized (declaredMethodCache) {
context.putBeanInfo(beanClass, beanInfo);
}
}
return beanInfo;
}

这肯定是在JDK7中添加的,因为我检查了JDK6代码,它不存在!。

关于weblogic - 带有 DCEVM 和 HotSwapAgent 的 WebLogic 上的奇怪 java.beans.Introspector 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28768348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com