2011-03-18 65 views
12

不相容的,我遇到了XPages中的应用偶然的例外:含义java.lang.ClassCastException的:SomeClass的与SomeClass的

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 

这背后有什么行为?

+0

也许这是一个Serializable对象的问题?是否涉及远程通信? – Yashima 2011-03-18 13:27:39

+0

这也是我的想法,但我已经从IBM提出了一个答案,这解释了它 - 问题是特定于XPages的。 – 2011-03-18 13:40:31

+0

反向链接/更新:[链接](http://www-10.lotus.com/ldd/xpagesforum.nsf/topicThread.xsp?action=openDocument&documentId=C7A145A053E99AB5852578C0004D872A) – 2011-07-16 20:23:00

回答

14

菲利普Riand explaned此电子邮件:

这个类转换是因为同一类已经由两个不同的类加载器加载的两倍。因此,从Java的角度来看,它们是不同的,并且演员失败。

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

最后,保存faces-config.xml作为解决方法。当这个文件被保存时,整个模块将从内存中被丢弃,包括范围。这解释了它的工作原理。对您的自定义Java类进行更改应重新加载模块并删除该问题。

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

+0

对于使用变量解析器或参数来使用另一个受管bean的Java对象,情况也是如此。从SSJS调用此Java对象并修改包含SSJS代码的XPage时,它将会失败,直到您修改Java类,clean项目或保存faces-config.xml。 – 2013-03-20 09:58:45

+0

因此,如果我将faces-config.xml文件保存在我的模板中,设计刷新是否会对我刷新设计的数据库产生影响? – 2014-01-17 16:44:33

+1

@DavidNavarre正确:http://stackoverflow.com/questions/20268457/serverside-xpages-application-update-causes-my-browser-page-partial-refresh-acti,http://stackoverflow.com/questions/20268457 /服务器端-的XPages应用程序更新 - 原因 - 我的浏览器,页面局部刷新,ACTI – 2014-01-18 20:21:01

5

如果在不同的类加载器中加载了相同的类文件,则产生的两个Java类是而不是相同的类;你不会被允许将一个实例传递给期望另一个的实例。一般来说,如果你看到这样的问题,那是因为你有多个子类加载器可以访问一个jar文件,这对他们的公共父类加载器是不可见的。您可能需要将包含“someclass”的jar移动到公用库目录,而不是(例如)特定的webapp目录。

+1

您的答案对于J2EE是100%正确的,但不是XPage的选项。使用XPage特定代码时,应用程序上下文之外的类(Domino服务器上的目录jvm/lib/ext)不可用。 – 2011-03-18 13:43:32

0

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

当我遇到此问题时,我在具有多个JVM的CAT环境中运行我的应用程序。由于在ITG环境下,我的同一个构建成功运行,我重新启动了CAT上的两个JVM,并且错误得到解决。不完全确定是什么导致了它。

相关问题