我在eclipse IDE中重启服务器后使用了tomd 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)
答案 0 :(得分:14)
org.jboss.weld.exceptions.IllegalStateException:WELD-000227:检出菜豆标识符索引的不一致性 - 分布式容器可能没有按'具有相同的应用程序吨工作
如果反序列化后可序列化类的Weld / CDI代理实例发生了不兼容的更改(例如,在Tomcat重新启动之后),则会抛出此异常。您很可能在开发编辑可序列化会话或查看范围内的托管bean时没有触及serialVersionUID
。或者,您已添加/更新/删除了与CDI相关的库。如果您在Eclipse中使用Tomcat,请在Eclipse的 Servers 视图中右键单击Tomcat服务器条目,然后选择 Clean Tomcat Work Directory 。这将消灭序列化会话,从而也解决了这个异常。
每当您在可序列化类中进行不兼容的更改(例如添加新的实例字段)时,您需要重新生成serialVersionUID
值(以防您在IDE中生成值),或者将其值增加1(如果您使用默认1L
)。
因此,这不一定是Weld中的错误,但在我看来,它应该放弃不兼容的代理实例,创建一个新的并打印一条警告消息,而不是完全阻止请求此异常。
如果您实际上每次都忙于开发并面临此异常,请考虑关闭服务器中的会话持久性。如何执行此操作取决于使用的服务器。对于Tomcat 7,请参阅" Disable Session Persistence"在The Manager Component的文档中。
特定消息"分布式容器可能无法使用相同的应用程序" 顺便提到您运行时的可能情况具有会话共享(例如,云)的集群环境中的web应用程序,其中显然至少一个服务器具有不同版本的web应用程序。生产中的这种情况会导致这种例外。
答案 1 :(得分:2)
这是Weld的一个错误。 https://issues.jboss.org/browse/WELD-1887
您应该可以通过在Tomcat中关闭时禁用会话钝化来解决此问题。
答案 2 :(得分:2)
自上一个答案发布以来可能已超过两年,但如果您忘记在Entity类中实现Serializable,也可能会发生这种情况。
(Java 8,Glassfish 4)
@Entity
@Table(name="questions")
public class Question {
......
}
错误org.jboss.weld.exceptions.IllegalStateException:WELD-000227:检测到Bean标识符索引不一致 - 分布式容器可能无法使用相同的应用程序
@Entity
@Table(name="questions")
public class Question implements Serializable {
......
}
答案 3 :(得分:0)
删除浏览器 cookie 并重新加载页面。