2012-10-18 21 views
5

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)

+1

Dzięki za downvote. Czy mógłbyś skomentować wyjaśnienie, dlaczego obniżyłeś pozycję? –

Odpowiedz

4

miałem dokładnie ten sam problem i rozwiązać go przez zmianę właściwości isPrintWhenDetailOverflows mojego podraportu z true na false jak sugeruje tutaj: http://community.jaspersoft.com/questions/527078/infinite-loop-subreport-fill

nadzieję, że pomoże

+0

Dzięki za spóźnioną odpowiedź. Próbowałem tego, szczerze, próbowałem wszystkiego, co mogłem znaleźć na ten temat w SO i na JasperSoft Community, ale to nie działało dla mnie. Obecnie problem ten nie był uważany za duży priorytet dla mojego projektu, więc przestałem (przez jakiś czas) go przeglądać. Mimo to, jeśli ktoś wymyśli jakieś rozwiązania, których nie znalazłem, przejrzę je. Z góry dziękuję ! –

+0

To działało dla mnie, więc musi istnieć jakiś scenariusz, który jest inny, ale ponieważ ten wpis był sprzed 4 lat, to nie ma znaczenia, tylko że działa w pewnych okolicznościach :) – CodeMonkey

Powiązane problemy