【问题标题】:Meaning of java.lang.ClassCastException: someClass incompatible with someClassjava.lang.ClassCastException 的含义:someClass 与 someClass 不兼容
【发布时间】:2018-07-20 06:36:50
【问题描述】:

我在 XPages 应用程序中偶尔遇到异常:

java.lang.ClassCastException: someClass incompatible with someClass.

上面提到的两个类都是一样的,都是用作会话bean的类。我无法搜索任何涵盖我的问题的内容。通常对此的解释是设计元素的变化,而不是我的情况。

从那一刻起,XPage 应用程序变得不可用(使用会话 bean someClass 的页面),直到重新启动 http 任务或重新保存 faces-config.xml。

在某些情况下,这与其他异常有关:

com.ibm.jscript.InterpretException: Script interpreter error, line=x, col=y: 
Java method 'method(signature containg someClass)'
on java class 'someOtherClass' not found

这种行为背后的原因是什么?

【问题讨论】:

  • 也许这是 Serializable 对象的问题?是否涉及远程通信?
  • 这也是我的想法,但我已经给出了 IBM 的答案,它解释了它 - 问题是 XPages 特有的。
  • 反向链接/更新:link

标签: java lotus-domino classcastexception xpages


【解决方案1】:

Philippe Riand 通过电子邮件解释了这一点:

发生这种类转换是因为同一个类被 2 个不同的类加载器加载了两次。因此,从 Java 的角度来看,它们是不同的,并且转换失败。

现在,每个 XPages 应用程序都有自己的类加载器。但是,每当应用程序发生设计更改时(例如通过 Domino Designer),都会丢弃此类加载器。这是必需的,因为对 XPages 的更改会生成一个新的 Java 类,然后应该加载该类而不是之前的类。发生这种情况时,类加载器将被丢弃并创建一个新的。然后根据需要重新加载所有与应用程序相关的类,即使它们没有更改。这是 J2EE 服务器实现的常见行为。 也就是说,如果您的代码在发生设计更改时丢弃的范围内缓存对象,那么很可能会发生这种情况。例如,当设计更改发生时,applicationScope 和 sessionScope 目前不会被丢弃,这可能会导致这个问题。这是一种设计选择,因为放弃作用域有时会给开发人员带来不好的体验,但也有这个缺点。

最后,保存 faces-config.xml 作为一种解决方法。保存此文件后,整个模块都会从内存中丢弃,包括范围,这解释了它为什么起作用。对自定义 Java 类进行更改应该重新加载模块并消除问题。

所以似乎将 bean(甚至是间接地)放入 sessionScope 或 applicationScope 是原因。

【讨论】:

  • 这也是Java对象通过变量解析器或作为参数使用另一个托管bean的情况。当您从 SSJS 调用此 Java 对象并修改包含 SSJS 代码的 XPage 时,它​​将失败,直到您修改 Java 类、清理项目或保存 faces-config.xml。
  • 那么,如果我将 faces-config.xml 文件保存在我的模板中,设计刷新会对我刷新设计的数据库产生这种影响吗?
【解决方案2】:

如果在不同的类加载器中加载同一个类文件,则生成的两个Java类不是同一个类;不允许您将一个实例传递给期望另一个的函数。通常,如果您遇到此类问题,那是因为您有多个子类加载器可以访问其公共父类加载器不可见的 jar 文件。您可能需要将包含“someclass”的 jar 移动到公共库目录而不是(例如)特定的 webapp 目录。

【讨论】:

  • 您的答案对于 J2EE 是 100% 正确的,但对于 XPages 则不是一个选项。使用 XPage 特定代码时,应用程序上下文之外的类(Domino 服务器上的目录 jvm/lib/ext)不可用。
【解决方案3】:

只是把我的经验放在这里。

当我遇到这个问题时,我正在使用多个 JVM 的 CAT 环境中运行我的应用程序。因为相同的构建在 ITG 环境中为我成功运行,所以我在 CAT 上重新启动了两个 JVM,错误得到解决。不完全确定是什么原因造成的。

【讨论】:

    【解决方案4】:

    清理项目也可以让它工作!

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 2020-06-01
      • 2018-12-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多