- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Wildfly 托管域上运行应用程序,该域由 2 个虚拟机组成,每个虚拟机上有 3 个服务器。
console.log 出现异常:
14:04:10,254 WARN [org.jboss.weld.Servlet] (default task-51) WELD-000717: Unable to deactivate context org.jboss.weld.context.http.HttpRequestContextImpl@2ec2ea52 when destroying request HttpServletRequestImpl [ GET /orpon/ ]
14:04:10,254 WARN [org.jboss.weld.Servlet] (default task-51) WELD-000717: Unable to deactivate context org.jboss.weld.context.http.HttpSessionContextImpl@f171e22 when destroying request HttpServletRequestImpl [ GET /orpon/ ]
14:04:10,254 ERROR [io.undertow.request] (default task-51) Undertow request failed HttpServerExchange{ GET /orpon/}: java.lang.IllegalAccessError: Can not set final int field io.undertow.util.HttpString.hashCode to (int)-1978065285
at io.undertow.util.HttpString.readObject(HttpString.java:340)
at sun.reflect.GeneratedMethodAccessor167.invoke(Unknown Source) [:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_66]
at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_66]
at org.jboss.marshalling.reflect.SerializableClass.callReadObject(SerializableClass.java:307)
at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1644)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1285)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
at org.jboss.marshalling.river.BlockUnmarshaller.readObject(BlockUnmarshaller.java:149)
at org.jboss.marshalling.river.BlockUnmarshaller.readObject(BlockUnmarshaller.java:135)
at org.jboss.marshalling.MarshallerObjectInputStream.readObjectOverride(MarshallerObjectInputStream.java:53)
at org.jboss.marshalling.river.RiverObjectInputStream.readObjectOverride(RiverObjectInputStream.java:307)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365) [rt.jar:1.8.0_66]
at java.util.HashMap.readObject(HashMap.java:1394) [rt.jar:1.8.0_66]
at sun.reflect.GeneratedMethodAccessor157.invoke(Unknown Source) [:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_66]
at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_66]
at org.jboss.marshalling.reflect.SerializableClass.callReadObject(SerializableClass.java:307)
at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1637)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1285)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224)
at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1745)
at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1658)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1285)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
at org.jboss.marshalling.river.BlockUnmarshaller.readObject(BlockUnmarshaller.java:149)
at org.jboss.marshalling.river.BlockUnmarshaller.readObject(BlockUnmarshaller.java:135)
at org.jboss.marshalling.MarshallerObjectInputStream.readObjectOverride(MarshallerObjectInputStream.java:53)
at org.jboss.marshalling.river.RiverObjectInputStream.readObjectOverride(RiverObjectInputStream.java:307)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365) [rt.jar:1.8.0_66]
at java.util.HashMap.readObject(HashMap.java:1396) [rt.jar:1.8.0_66]
at sun.reflect.GeneratedMethodAccessor157.invoke(Unknown Source) [:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_66]
at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_66]
at org.jboss.marshalling.reflect.SerializableClass.callReadObject(SerializableClass.java:307)
at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1637)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1285)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)
at org.wildfly.clustering.marshalling.SimpleMarshalledValue.get(SimpleMarshalledValue.java:101)
at org.wildfly.clustering.marshalling.SimpleMarshalledValue.get(SimpleMarshalledValue.java:45)
at org.wildfly.clustering.marshalling.MarshalledValueMarshaller.read(MarshalledValueMarshaller.java:45)
at org.wildfly.clustering.marshalling.MarshalledValueMarshaller.read(MarshalledValueMarshaller.java:32)
at org.wildfly.clustering.web.infinispan.session.coarse.CoarseSessionFactory.findValue(CoarseSessionFactory.java:127)
at org.wildfly.clustering.web.infinispan.session.coarse.CoarseSessionFactory.findValue(CoarseSessionFactory.java:56)
at org.wildfly.clustering.web.infinispan.session.InfinispanSessionManager.findSession(InfinispanSessionManager.java:232)
at org.wildfly.clustering.web.undertow.session.DistributableSessionManager.getSession(DistributableSessionManager.java:115)
at io.undertow.servlet.spec.ServletContextImpl.getSession(ServletContextImpl.java:723)
at io.undertow.servlet.spec.ServletContextImpl.getSession(ServletContextImpl.java:753)
at io.undertow.servlet.spec.ServletContextImpl.updateSessionAccessTime(ServletContextImpl.java:757)
at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:548)
at io.undertow.servlet.spec.HttpServletResponseImpl.doErrorDispatch(HttpServletResponseImpl.java:162)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:317)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:774)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_66]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_66]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_66]
我尝试使用 openjdk-1.8 和 Oracle jdk-1.8 在 wildfly 8.2.1.Final 和 9.0.2 Final 上运行应用程序,结果相同。应用程序已部署并正常运行,我已成功登录并通过负载均衡器(循环法)在服务器上工作。
In undertow sources at github类 io.undertow.util.HttpString
的字段 hashCode
声明为 final transient int
。为什么 readObject
方法试图以非常奇怪的方式改变这个字段的值?
我已经在 Internet 上进行了搜索,但没有发现任何关于此或类似错误的信息,也不知道该如何处理。
在我的应用程序中,属于此异常的地方可能在哪里?
更新:此补丁适用于 Undertow server帮助我避免问题:
From 7083c4145878f954bbde14f1f6acbb31414c88d9 Mon Sep 17 00:00:00 2001
From: fedor patlin <patlin.f@sovzond.center>
Date: Fri, 18 Dec 2015 15:55:32 +0500
Subject: [PATCH] Set field hashCodeField accessible
---
core/src/main/java/io/undertow/util/HttpString.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/core/src/main/java/io/undertow/util/HttpString.java b/core/src/main/java/io/undertow/util/HttpString.java
index cc75a0b..d21257c 100644
--- a/core/src/main/java/io/undertow/util/HttpString.java
+++ b/core/src/main/java/io/undertow/util/HttpString.java
@@ -335,7 +335,9 @@ public final class HttpString implements Comparable<HttpString>, Serializable {
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
try {
+ hashCodeField.setAccessible(true);
hashCodeField.setInt(this, calcHashCode(bytes));
+ hashCodeField.setAccessible(false);
} catch (IllegalAccessException e) {
throw new IllegalAccessError(e.getMessage());
}
--
2.5.0
最佳答案
这已在 Wildfly 中修复,请参阅 fix .
关于java - 集群 Wildfly 抛出 java.lang.IllegalAccessError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34304940/
我在运行 Android 仪器测试时收到 IllegalAccessError。 这是 Logcat 输出: java.lang.IllegalAccessError: Class ref in pr
当我运行下面的源代码时,我在 shell 窗口中看到的运行时错误如下: Exception in thread "main" java.lang.IllegalAccessError: tried t
我在我的类方法中遇到了与 IllegalAccessError 相关的问题(仅在 Android 8 设备上) 我更新了: Android Studio 到 3.3 Gradle 到 3.3.0 的
我目前正在对未记录的代码进行维护,并且在 Spring Boot 中运行类时偶然发现了一个奇怪的错误。代码在执行时会引发 IllegalAccessError,但可以正确编译。 似乎原始团队尝试访问
我正在为类(class)设置我的第一个程序,但我一直困惑为什么我的程序无法运行并尝试调试。我需要做什么来调试这个错误? 我尝试添加库,但这似乎不起作用。 import javafx.event.Act
我正在翻译 this code到 Clojure。如您所见,我必须扩展 ArthurFrame 类,但每次使用 (proxy [ArthurFrame] [] ... )。 知道为什么吗?这是 cla
我有以下情况: 同一工作区中的 2 个 Eclipse 项目:Apa 和 Bepa(为简洁起见,使用化名)。 Apa 项目引用(包括)Bepa 项目。 我在 Bepa 有一个类 X,具有公共(publ
Oracle JavaDocs 解释说 IllegalAccessError 是 "Thrown if an application attempts to access or modify a fi
我目前正在编写一个自动更新程序,它可以从 GitHub 下载最新版本的插件。我禁用了该插件,我可以替换它,现在我想启用它,但出现以下错误 java.lang.IllegalAccessError: t
我有一个简单的函数,用于从所选目录加载类“Myclass”。 // Variables File temp = new File("some path..."); String
在下面的代码中,我给出了两个主要类 - TestWorks 和 TestCompilesButFails。我不确定我是否理解失败 - 似乎 Arrays.asList() 表达式被赋予类型“Abstr
我创建了一个自定义 ParquetOutputFormat(org.apache.parquet.hadoop 中的类)来覆盖 getRecordWriter 方法。在 getRecordWriter
我正在开发一个旨在使用 Renderscript 支持库的应用程序。使用 Android Studio 0.5.4 和 Gradle 1.11 进行开发。 配置我使用的渲染脚本 android {
我的应用程序在 5+ 和 6+ 上完美运行,但在 7 上却不行。当应用程序尝试登录服务器时抛出此异常: 09-01 09:52:53.821 2654-2718/com.pipodi.italians
我昨天买了一台新电脑 (Dell XPS 13)。我刚刚安装了 JDK 并将我所有的旧 Java 项目复制到我的新设备上,但是当我尝试运行这些程序中的任何一个时,我遇到了非法访问错误。 编辑:注意:在
我正在用 jackson 开发软件,但完全卡住了......当我用 java -jar .jar 运行 spring-boot 程序时命令,我收到以下错误: ... Caused by: org.sp
IllegalAccessError 类有两个构造函数,IllegalAccessError() 和 IllegalAccessError(String s)。 为什么 IllegalAccessEr
我找到了 this JDK bug并想了解它发生的原因。 场景(取自 the bug report)非常简单:一个 class 声明一个 private 方法,一个 interface 声明一个 pu
该应用程序包含一个短暂显示的初始屏幕,该 Activity 正在使用 IdlingResource 进行插桩测试,以便测试知道初始屏幕何时关闭。问题是 SplashActivity 在运行 API 1
我是一名具有编写 PHP、python 和 ruby 经验的新手工程师。我正在尝试为一个用 clojure 编写的项目做出贡献。我正在尝试向项目添加一个库,但在添加库并运行后 lein uberj
我是一名优秀的程序员,十分优秀!