Проблема Jasperreport с подотчетом с использованием javaflow
У меня есть проблема с подотчетом, использующим javaflow с Jasperreport 6.7.0 в соответствии с "Полным руководством по JasperReports" - Теодор Данчу, Лучиан Чирита, стр. 130. Мне нужно, чтобы избежать вызова различных потоков, когда отчет вызывается в нашем приложении, по важным причинам,
Есть настройка на default.jasperreport.properties
net.sf.jasperreports.subreport.runner.factory=net.sf.jasperreports.engine.fill.JRContinuationSubreportRunnerFactory
И когда я запускаю свой отчет с более чем 5 строками, появляется ошибка:
java.lang.IllegalStateException: повреждение стека при приостановке (пустой стек). Инструментарий net.sf.jasperreports.engine.fill.JRContinuationSubreportRunner@2024896527/org.apache.catalina.loader.WebappClassLoader@1847497893 предназначен для javaflow? в org.apache.commons.javaflow.core.StackRecorder.execute(StackRecorder.java:131) в org.apache.commons.javaflow.api.Continuation$MultiShotContinuation.resumeWith(Continuation.java:521) в org.apache.commons.javaflow.api.Continuation.resume(Continuation.java:314) в org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:219) в org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:169) по адресу org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:148) по адресу net.sf.jasperreports.engine.fill.JRContinuationSubreportRunner.start(JRContinuationSubreportRunner.java:53).NET.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:931) в net.sf.jasperreports.components.table.fill.FillTableSubreport.prepareSubreport(FillTableSubreport.java:1jjasreport.java:1j) в net.sf.components.table.fill.FillTable.prepare(FillTable.java:424) в net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:152) at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:542) в net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:453) в net.sf.jasperreports.fill..java:813) по адресу net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:264) по адресу net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:110).sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:615) на net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:413) на net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:120) в net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:103) в org.wgsoftpro.reposerver.SetReport.fillReport(SetReport.java:469) в org.wgsoftpro.reposerver.SetReport.runReport(SetReport.java:190) в org.wgsoftpro.reposerver.CreateReport.run(CreateReport.java:454) в org.apache.catalina.core.AsyncContextImpl$RunnunWyn.java:557) на java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) на java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) на java.runTh..java:748)
Если строк меньше, отчет запускается без проблем.
У меня есть зависимость в pom.xml, чтобы получить org.apache.commons.javaflow.api
<dependency>
<groupId>net.tascalate.javaflow</groupId>
<artifactId>net.tascalate.javaflow.api</artifactId>
<version>2.4.0</version>
</dependency>
Любое предложение будет оценено.
ОБНОВЛЕНИЕ: я получил ту же ошибку с net.tascalate.javaflow.api версии 2.2.1
ОБНОВЛЕНИЕ 2: Я обнаружил, что если мы увеличим высоту страницы и все данные уместятся на одной странице, все будет работать. Так что проблема связана с инициализацией второй страницы
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="vetmed" language="javascript" pageWidth="595" ***pageHeight="1500"*** columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c2935bae-a905-4770-8aca-21bb3b76afde">
2 ответа
Ванильный JasperReports jar (опубликованный на Maven) не предназначен для JavaFlow.
Существует вариант jar, который можно скачать с SourceForge, см. Jasperreports-javaflow-6.7.0.jar
Но этот файл не публикуется в Maven, поэтому вам нужно найти способ использовать его в своей сборке. Посмотрите этот ответ для некоторых способов сделать это.
Раскрытие информации: я поддерживаю библиотеку Tascalate JavaFlow. Похоже, вы не использовали необходимые продолжающиеся классы во время сборки.
Tascalate Javaflow предоставляет как задачу Ant, так и плагин Maven, я не уверен, что лучше всего работает с Jasper Reports, но у вас есть: - включить плагин сборки Maven, как описано здесь. - настроить Ant как в этом примере.
Или, возможно, у вас есть смесь продолжаемых / непродолжаемых методов в цепочке вызовов.
Кроме того, согласно информации о Maven Central, Jasper Reports 6.7 использует Tascalate JavaFlow 2.2.1 - плохая идея - создать ад контроля версий с добавлением более высокой версии (2.4.0).