Mam wiele Jasper Reports (z sub-raportów) w całej mojej aplikacji. Z jakiegoś powodu jeden raport (który zawiera również pod-raporty) nie działa. Po debugowaniu dłuższym niż 1 dzień odkryłem, że wchodzi on w nieskończoną pętlę i tworzy wątki do wypełniania podraportów.Raporty Jaspera: sub-raporty powodują nieskończoną pętlę
Debugger utrzymuje pętli pomiędzy:
JRSubReportRunnable.java
public void run()
{
running = true;
error = null;
try
{
fillSubreport.fillSubreport();
}
catch (JRFillInterruptedException e)
{
//If the subreport filler was interrupted, we should remain silent
}
// we have to catch Throwable, because it is difficult to say what would happen with the master
// filler thread in case we don't
catch (Throwable t) //NOPMD
{
error = t;
}
running = false;
}
Powyższa metoda rozpoczyna wątek w celu wypełnienia sub-raport. Gdy to zrobisz, ustawia running = false
i debugger dostaje:
JRThreadSubreportRunner.java
public void run()
{
super.run();
if (log.isDebugEnabled())
{
log.debug("Fill " + subreportFiller.fillerId + ": notifying of completion");
}
synchronized (subreportFiller)
{
//main filler notified that the subreport has finished
subreportFiller.notifyAll();
}
}
Po zakończeniu wątku, to dostaje się do powyższej metody subreportFiller.notifyAll();
za linią. Następnie debugger powraca do JRSubreportRunnable.java i tak dalej.
Teoretycznie, jeśli mam 5 podraportów, powinien utworzyć 5 wątków (działa dla mnie w przypadku innych raportów). Niestety, w tym przypadku ciągle tworzy wątki, a mój debugger "utknął" pomiędzy 2 metodami wymienionymi powyżej (FYI: klasy są z jasperreports-3.7.6-sources.jar).
próbował również:
znalazłem similar StackOverflow question, ale odpowiedź zaproponowano tam nie działa dla mnie. Żadne z proponowanych rozwiązań nie było dostępne od this thread on the JasperSoft Community.
Naprawdę nie rozumiem, dlaczego pojawia się ten problem. Jestem pewien, że jest to coś mniejszego, niż kiedyś. Mam nadzieję, że ktoś inny natknął się na to i może mieć rozwiązanie. Z góry dziękuję za odpowiedź. (Wiem, że nie dostarczyłem zbyt wielu informacji o zawartości moich podraportów, ale jest to całkiem prywatne, niemniej jednak mogę zapewnić, że zawartość raportu i powiązanych sub-raportów nie uległa zmianie - sprawdzono z Git)
Dzięki za downvote. Czy mógłbyś skomentować wyjaśnienie, dlaczego obniżyłeś pozycję? –