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

两个类都是相同的,它是用作会话bean的类。我无法用Google搜索涵盖我的问题的任何内容。通常的解释是设计元素的变化,而不是我的情况。

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

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

此行为的背后是什么?

有帮助吗?

解决方案

Philippe Riand通过电子邮件对其进行了解释:

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

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

最后,保存faces-config.xml是一种解决方法。保存此文件后,整个模块(包括作用域)都将从内存中丢弃,这说明了其工作原理。更改自定义Java类应重新加载模块并消除问题。

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

其他提示

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

只需将我的经验放在这里。

遇到此问题时,我正在具有多个JVM的CAT环境上运行我的应用程序。因为同一构建在ITG环境中为我成功运行,所以我在CAT上重新启动了两个JVM,并且错误已解决。不确定是什么原因造成的。

清理项目也可以使之工作!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top