一尘不染

WELD-000227:检测到Bean标识符索引不一致-分布式容器可能不适用于相同的应用程序

tomcat

我在Eclipse IDE中重新启动服务器并重新加载页面后,将Tomcat v7与Weld v2.2.9.Final和myFaces
v2.2.7一起使用,却收到此错误。我不知道为什么这个错误出现在我身上。它必须与http请求等连接。如果我打开关闭浏览器,它将开始工作。

SEVERE: Exception sending request initialized lifecycle event to listener instance of class org.jboss.weld.environment.servlet.Listener
org.jboss.weld.exceptions.IllegalStateException: WELD-000227: Bean identifier index inconsistency detected - the distributed container probably doesn't work with identical applications
    at org.jboss.weld.context.http.HttpSessionContextImpl.checkBeanIdentifierIndexConsistency(HttpSessionContextImpl.java:88)
    at org.jboss.weld.context.http.HttpSessionContextImpl.associate(HttpSessionContextImpl.java:42)
    at org.jboss.weld.context.http.HttpSessionContextImpl.associate(HttpSessionContextImpl.java:19)
    at org.jboss.weld.servlet.HttpContextLifecycle.requestInitialized(HttpContextLifecycle.java:217)
    at org.jboss.weld.servlet.WeldInitialListener.requestInitialized(WeldInitialListener.java:160)
    at org.jboss.weld.servlet.api.helpers.ForwardingServletListener.requestInitialized(ForwardingServletListener.java:42)
    at org.apache.catalina.core.StandardContext.fireRequestInitEvent(StandardContext.java:6189)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

阅读 276

收藏
2020-06-16

共1个答案

一尘不染

org.jboss.weld.exceptions.IllegalStateException:WELD-000227:检测到Bean标识符索引不一致-
分布式容器可能不适用于相同的应用程序

当可序列化的类的Weld /
CDI代理实例反序列化后(例如,在Tomcat重新启动后)发生不兼容的更改时,将引发此异常。在开发过程中,您很可能在未触及的情况下就编辑了可序列化会话或查看范围托管的bean
serialVersionUID。或者,您已经添加/更新/删除了与CDI相关的库。如果您在Eclipse中使用Tomcat,请在Eclipse的
Servers 视图中右键单击Tomcat服务器条目,然后选择 Clean Tomcat Work Directory
。这将清除序列化的会话,从而解决此异常。

每当您在可序列化的类中进行不兼容的更改(例如添加新的实例字段)时,都需要重新生成该serialVersionUID值(以防您正在IDE生成该值),或将其值加1(以防万一)您使用的是默认设置1L)。

因此,这不一定是Weld中的错误,但在我看来,它应该已经丢弃了不兼容的代理实例,创建了一个新的实例并打印了警告消息,而不是将此异常完全阻止了该请求。

如果您实际上正忙于开发并且每次都遇到此异常,请考虑关闭服务器中的会话持久性。如何执行此操作取决于所使用的服务器。对于Tomcat 7,请参阅The
Manager
Component
文档中
Disable Session
Persistence

部分

特定消息 “分布式容器可能无法与相同的应用程序一起使用”
顺便说一句,指的是当您在具有会话共享(例如云)的群集环境中运行Web应用程序时的可能情况,其中至少有一个服务器具有不同版本的Web应用程序。这种情况将在生产中导致此异常。

也可以看看:

2020-06-16