无法在同一TomEE实例上的并行应用程序中使用JasperReports(JasperReports上下文吗?

问题描述 投票:0回答:1

我们在刚刚下载的TomEE应用服务器中有一个奇怪的行为。我们的情况:我们已经运行了两个应用程序(分别称为v​​1v2),它们通过使用JasperReports的REST API为我们提供了一些pdf文件。在发布v1时,一切正常。

当我们更新一些内部代码并将其发布到v2时,混乱开始了……(我们代码中的更改几乎不是问题的根源,这些只是计算更改。)

[混乱的是,当我们首先在v1中访问代码时,v1 API可以很好地提供我们的报告。当我们尝试从v2 API获取新报告时,遇到了“未发现异常”类。

Exception in thread "AsyncFileHandlerWriter-2081853534" java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.extensions.ExtensionsEnvironment
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.getExtensions(DefaultJasperReportsContext.java:277)
    at net.sf.jasperreports.engine.util.MessageUtil.getMessageProvider(MessageUtil.java:70)
    at net.sf.jasperreports.engine.JRRuntimeException.resolveMessage(JRRuntimeException.java:166)
    at net.sf.jasperreports.engine.JRRuntimeException.getMessage(JRRuntimeException.java:147)
    at net.sf.jasperreports.engine.JRRuntimeException.getMessage(JRRuntimeException.java:138)
    at java.base/java.lang.Throwable.getLocalizedMessage(Throwable.java:396)
    at java.base/java.lang.Throwable.toString(Throwable.java:485)
    at java.base/java.lang.String.valueOf(String.java:2801)
    at java.base/java.lang.StringBuilder.append(StringBuilder.java:135)
    at java.base/java.lang.Throwable.printEnclosedStackTrace(Throwable.java:699)
    at java.base/java.lang.Throwable.printEnclosedStackTrace(Throwable.java:713)
    at java.base/java.lang.Throwable.printStackTrace(Throwable.java:671)
    at java.base/java.lang.Throwable.printStackTrace(Throwable.java:725)
    at org.apache.juli.OneLineFormatter.format(OneLineFormatter.java:150)
    at org.apache.juli.FileHandler.publish(FileHandler.java:294)
    at org.apache.juli.AsyncFileHandler.publishInternal(AsyncFileHandler.java:146)
    at org.apache.juli.AsyncFileHandler$LogEntry.flush(AsyncFileHandler.java:185)
    at org.apache.juli.AsyncFileHandler$LoggerThread.run(AsyncFileHandler.java:161)

到目前为止,我们考虑缺少依赖项或缺少库,但是:当我们首先访问v2 API时,我们在v1 API中也会遇到相同的错误。

因此,似乎首先被调用的API应用程序“绑定”了JasperStuff并导致其他API无法访问它。我们实际上已经以我们的知识而告终,我们希望可以在这里获得som帮助。

一点背景信息:我们使用一个核心软件包,该软件包提供一些核心功能,例如DB-Access和JDNI资源,CORS筛选器和安全接口。我认为核心软件包(在每场战争中单独提供)不会造成一些混乱,但是由于这样的事实,我认为除其他外,我们拥有2个同名的JDNI资源(但在不同的应用程序中,因此在不同的上下文中)我需要在此处保留此信息。

谢谢您的帮助。

java tomcat jasper-reports noclassdeffounderror tomee
1个回答
0
投票

因此,在苦苦挣扎并尝试了不同的方法来解决该问题之后,我们终于找到了一个可行的解决方案:我们将我们的JasperReports(并且需要依赖)库包含在tomcats common.loader属性中。

结果是,我们没有并发的JasperReports库(尽管它们是相同的版本)。对我来说,这应该是令人困惑的原因,但这给我们带来了预期的结果。这样做的提示是AsyncFileHandlerWriter和“感觉”,即第一个使用的上下文可以与JasperReports库一起正常工作。感觉有点像上下文并发,但是老实说,我们不确定这是正确的解决方案还是只是解决底层问题的解决方法。

如果有人有其他提示,我们将感谢您的所有提示!预先感谢。

© www.soinside.com 2019 - 2024. All rights reserved.