当前位置: 首页 > 知识库问答 >
问题:

在同一个TomEE实例上的并行应用程序中使用JasperReport是不可能的吗?

汪鸿波
2023-03-14

在刚刚下载的TomEE应用服务器中,我们有一个奇怪的行为。我们的情况:我们运行了两个应用程序(我们称之为v1和v2),它们通过使用JasperReports的RESTAPI向我们提供一些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)

到目前为止,我们考虑了缺少依赖项或缺少lib,但是:当我们首先访问v2api时,我们在v1api中得到了相同的错误。

因此,首先被调用的API应用程序似乎“绑定”了JasperStuff,而其他API无法访问它。事实上,我们的知识已经结束,我们希望在这里能得到som的帮助。

一点背景信息:我们使用一个核心包,它提供一些核心功能,如DB访问和JDNI资源、CORS过滤器和安全接口。我不认为核心包(在每次战争中单独提供)会造成一些混乱,但由于我们有两个同名的JDNI资源(但在不同的应用程序中,因此在不同的上下文中),我认为我需要将此信息留在这里。

提前感谢您的帮助。

共有1个答案

孔寒
2023-03-14

因此,在仔细研究并尝试不同的方法来解决这个问题之后,我们终于找到了一个有效的解决方案:我们将JasperReports(以及必要的)libs包含到tomcatcommon中。加载器属性。

其效果是,我们没有一致的JasperReport库(尽管它们是相同的版本)。对我来说有点困惑,这应该是原因,但它给我们带来了预期的结果。这样做的提示是AsyncFileHandlerWriter和第一个使用的上下文可以很好地使用JasperReport库的感觉。这感觉有点像上下文并发,但老实说,我们不确定这是正确的解决方案,还是只是一个底层问题的解决方案。

如果有人有进一步的提示,我们将感谢每一个提示!提前谢谢。

 类似资料:
  • 我在dockerized应用程序和Memcached上遇到了一个问题,要存储一些值,显然,当a启动一个运行Spymemcached客户端的新Docker实例时,所有存储在缓存中的数据都是无效的,所以如果我之前在节点1的缓存中存储了一些值,然后启动节点2,这些值将从Memcached服务器中清除,最后如果a在节点1上再次存储相同的值,并在节点2上查询,它们将共享到两个节点之外,而不清除数据。是预期的

  • 我正在努力学习vue。因此,我制作了一个小应用程序,可以显示来自API的新闻文章,并在另一个视图中允许用户登录到另一台服务器。 为此,我使用Axios。我知道我在某个时候让它工作得很好,但是今天当我开始我的项目时,让两个API同时工作是不可能的。 这是我的登录服务: 这是我的新闻服务: 这两个服务都位于不同的JS文件中,并导入到不同的vue文件中,但现在它们似乎无法共存,并且总是有一个服务覆盖另一

  • 我试图在不同的机器上运行kafka streams应用程序的多个实例,但出现以下错误: 无法锁定全局状态目录。如果多个KafkaStreams实例使用同一状态目录在同一主机上运行,则可能会发生这种情况。kstream-test-prod-6f9bc47d9c-bmq2z:org.apache.kafka.streams.errors。锁定异常:无法锁定全局状态目录:/tmp/kafka-strea

  • 问题内容: 我正在使用Flamingo功能区和Substance Office 2007外观。 当然,现在 每个 控件都具有这种外观,即使对话框上也是如此。 我想要的是Office 2007中的功能,功能区具有Office 2007的外观,但其他控件保留其本机Vista / XP的外观。 是否可以为某些控件分配不同的外观?也许使用某种链接或代理外观? 问题答案: 我刚刚发现:由于物质5.0的SKI

  • 这是我的节点文件 我在上有HTML 和上的节点应用程序 我也转发了3000端口到80; 我想在这个服务器上的一个不同的端口上运行多个应用程序。 我应该为其他应用程序配置什么。

  • 这可能不是典型的设置,但由于更高的决策,我们最终在一个应用程序中有多个 kafka 集群,每个集群有多个主题,每个集群可能具有不同的序列化策略。Json/avro.avro可能与融合的架构注册表一起使用,或者使用单个对象编码。 好吧,我通过构建自己的抽象和注册中心,分析配置并手动创建大部分内容,以某种方式实现了它,但我觉得我需要在几个地方多次重复主题名称、模式注册url等内容,以便创建所有需要的b