当前位置: 代码迷 >> java >> 当对象保留的内存和共享的类高速缓存在WebSphere7中100%已满时,Dozer中的ClassCastException
  详细解决方案

当对象保留的内存和共享的类高速缓存在WebSphere7中100%已满时,Dozer中的ClassCastException

热度:22   发布时间:2023-07-25 19:44:58.0

我们正在IBM websphere7上运行的J2EE应用程序中使用推土机映射来映射两个类。 我们将其用作

mapper.map(classA, Class.forName(classB));

它总是可以正常工作,除非非常偶然,它会因ClassCastException失败而失败(两年内在生产中发生一次,在测试区域中每3或4个月发生一次)。 当发生此异常时,我们将继续获取它,直到回收节点为止。 (其他节点当时可以正常工作)。 在检查生成的转储时,我们注意到以下内容。

  • 对象(保留)内存已使用100%
  • 共享类缓存已满100%

所有其他参数似乎都很好。

我们的假设是,当源类和目标类由不同的类加载器加载时,将发生ClassCastException。

这是一个正确的假设吗? 如果是这样,我们如何确定它(我们当时有堆转储和线程转储)。

还有什么会导致这样的问题?

还有什么需要研究的吗?

有任何可能的解决方案吗?

如回答

这可能是正确的假设吗? 是的,很有可能,您可以尝试确保像Thread.currentThread()。setContextClassLoader(paramClassLoader);之前那样对类加载器进行压缩。 然后将其重置。

要设置正确的类加载器,请通过org.dozer.util.DozerClassLoader显式设置推土机的类加载器,并设置classB.getClass()。getClassLoader()或在线程上下文中使用mapper.getClass()。getClassLoader()设置classLoader。 不要忘记放回原来的一个,否则您的应用程序会出现CNF异常

  相关解决方案