BLUF:我得到一个stackoverflow,在它到达我的任何代码之前,用一个war文件启动我的Liberty服务器。我无法调试导致问题的原因。我尝试将trace语句添加到server.xml但是从来没有得到我可以解释的文件(二进制文件)并且尝试打开日志文件没有可用选项(灰色)。如果有人有任何想法如何确定导致堆栈溢出的原因我会很感激帮助。提前致谢。我的代码确实使用了@Inject,但我不认为这是问题,因为如果我将代码从一个单独的项目/ jar转移到war项目中,一切正常。
在使用共享库启动单个war到单个目录中的jar文件时运行wlp 17.0.0.1,在到达任何代码之前得到StackOverflowError(基于RestServicesApplication和任何静态初始化器中的设置断点)。 / p>
只有当某些类被移动到一个单独的项目并因此被移动到一个单独的jar中时才会出现此问题(例如,将它们移回war项目允许所有类运行正常)。
我检查过所有类和方法引用都是公开的。我在新的jar文件中调用公共静态方法。
我不知道如何找出问题,因为堆栈跟踪中的ffdc文件中没有对我的代码的引用。
我已经验证了jar文件中所需的类,并且没有引用重复的类。
基本上,war文件中的类有一个调用:
public static JSONObject processFuzzyMatch(ID session,
ID userID, JSONObject request)
throws ILDException {
try {
return NLUFuzzyEntityMatcherFunction.processFuzzyMatch(request);
} catch (Exception e) {
throw new ILDException(e);
}
}
和NLUFuzzyEntityMatcherFunction在声明为:
的jar文件中public static JSONObject processFuzzyMatch(JSONObject request)
throws Exception
以下是最后一行重复报告问题的示例(对于堆栈溢出...)
Stack Dump = com.ibm.ws.container.service.state.StateChangeException: java.lang.StackOverflowError
at com.ibm.ws.container.service.state.internal.ApplicationStateManager.fireStarting(ApplicationStateManager.java:33)
at com.ibm.ws.container.service.state.internal.StateChangeServiceImpl.fireApplicationStarting(StateChangeServiceImpl.java:51)
at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.preDeployApp(DeployedAppInfoBase.java:376)
at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.deployApp(DeployedAppInfoBase.java:403)
at com.ibm.ws.app.manager.war.internal.WARApplicationHandlerImpl.install(WARApplicationHandlerImpl.java:66)
at com.ibm.ws.app.manager.internal.statemachine.StartAction.execute(StartAction.java:141)
at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.enterState(ApplicationStateMachineImpl.java:1253)
at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.run(ApplicationStateMachineImpl.java:866)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.StackOverflowError
at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242)
at java.io.File.exists(File.java:819)
at com.ibm.wsspi.kernel.service.utils.FileUtils$3.run(FileUtils.java:88)
at com.ibm.wsspi.kernel.service.utils.FileUtils$3.run(FileUtils.java:85)
at java.security.AccessController.doPrivileged(Native Method)
at com.ibm.wsspi.kernel.service.utils.FileUtils.fileExists(FileUtils.java:85)
at com.ibm.ws.artifact.loose.internal.LooseArchive$DirEntryInfo.matches(LooseArchive.java:232)
at com.ibm.ws.artifact.loose.internal.LooseArchive$DirEntryInfo.matches(LooseArchive.java:207)
at com.ibm.ws.artifact.loose.internal.LooseArchive.getEntry(LooseArchive.java:782)
at com.ibm.ws.artifact.overlay.internal.DirectoryBasedOverlayContainerImpl.getEntry(DirectoryBasedOverlayContainerImpl.java:838)
at com.ibm.ws.adaptable.module.internal.AdaptableContainerImpl.getEntry(AdaptableContainerImpl.java:113)
at com.ibm.ws.jsp.taglib.TagLibraryCache.loadWebInfMap(TagLibraryCache.java:613)
at com.ibm.ws.jsp.taglib.TagLibraryCache.loadWebInfMap(TagLibraryCache.java:629)
at com.ibm.ws.jsp.taglib.TagLibraryCache.loadWebInfMap(TagLibraryCache.java:629)
(above line repeats due to stack overflow)
答案 0 :(得分:1)
这是Liberty上的一个已知问题。 Liberty 17.0.0.3上将提供对该问题的修复。
您可以使用一些解决方法:
答案 1 :(得分:0)
不知怎的,我搞砸了jar项目的项目设置(可能是因为我从Web项目中复制了pom.xml,忘了把它改成jar ......)。这可能导致/ apps文件夹中的xml文件被搞乱,并且嵌入了对不存在的war文件的引用(见下文):
<?xml version="1.0" encoding="UTF-8"?>
<archive>
<archive targetInArchive="/WEB-INF/lib/ildMicroServices-1.0.0-SNAPSHOT.jar">
<dir sourceOnDisk="/csnext/ild/ild_framework/ildMicroServices/WebContent" targetInArchive="/"/>
<dir sourceOnDisk="/csnext/ild/ild_framework/ildMicroServices/target/classes" targetInArchive="/WEB-INF/classes"/>
<dir sourceOnDisk="/csnext/ild/ild_framework/ildMicroServices/target/test-
classes" targetInArchive="/WEB-INF/classes"/>
</archive>
<dir sourceOnDisk="/csnext/ild/ild_framework/ildRESTServices/target/m2e-wtp/web-resources" targetInArchive="/"/>
<dir sourceOnDisk="/csnext/ild/ild_framework/ildRESTServices/WebContent" targetInArchive="/"/>
<dir sourceOnDisk="/csnext/ild/ild_framework/ildRESTServices/target/classes" targetInArchive="/WEB-INF/classes"/>
<dir sourceOnDisk="/csnext/ild/ild_framework/ildRESTServices/target/test-classes" targetInArchive="/WEB-INF/classes"/>
</archive>
通过删除此嵌入式存档,问题就消失了。
我从Neon升级到Oxygen,17.0.0.1升级到17.0.0.2之后才发现这个,当使用旧服务器的工件设置新服务器时,我注意到/ apps中的xml文件没有&#39 ;看起来不错。
我希望这有助于某人。