Announcement Announcement Module
No announcement yet.
Jasper Reports Thread Interruption Page Title Module
Move Remove Collapse
Conversation Detail Module
  • Filter
  • Time
  • Show
Clear All
new posts

  • Jasper Reports Thread Interruption

    I have a problem relate to jasper report, i have tried some solutions but i 'm still not solve this problem.
    It's a web application, i used Jboss 3.2.3, tomcat 5.0 integrate in jboss. In EJBs, first i call to DAO layer to get datasource, parameters.
    then i call to jasper report function: JasperFillManager.fillReportToStream(jasperreport, outputstream, parameters, datasource),
    If the data source is small, the method call is ok. But with huge datasource, i am seeing this problem of Thread Interruption.
    "The report filling thread was interrupted"!!!
    I just do not understand why the Thread was interrupted and by whom…” is it by the container “ . To give you more context, the jasper code was invoked within a stateless session bean and that bean has transaction timout set to 600. Does the Container managed transaction timeout has anything to do with this Thread Interruption ? . My initial guess is not...maybe i might be wrong.
    I open source code code of jasper report, i I that the thread generate report was interrupted at statement:
    "if (Thread.currentThread().isInterrupted())
    throw new JRException("Current thread interrupted.");
    Have you had experience with this problem? Could you share with me? Why we have to check the thread by statements: "Thread.currentThread().isInterrupted()"?

    Pls see the printstackstrace for details.

    19:58:20,311 ERROR [STDERR] dori.jasper.engine.JRException: The report filling t
    hread was interrupted.
    19:58:20,311 ERROR [STDERR] at dori.jasper.engine.fill.JRFiller.fillReport(J
    19:58:20,311 ERROR [STDERR] at dori.jasper.engine.JasperFillManager.fillRepo
    19:58:20,311 ERROR [STDERR] at dori.jasper.engine.JasperFillManager.fillRepo
    19:58:20,311 ERROR [STDERR] at dori.jasper.engine.JasperFillManager.fillRepo
    19:58:20,311 ERROR [STDERR] at com.dlv.inmpp.system.ReportManager.generateRe
    19:58:20,311 ERROR [STDERR] at
    19:58:20,311 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(
    Native Method)
    19:58:20,311 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(N
    19:58:20,311 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invo
    19:58:20,311 ERROR [STDERR] at java.lang.reflect.Method.invoke(
    19:58:20,311 ERROR [STDERR] at org.jboss.ejb.StatelessSessionContainer$Conta

  • #2
    I would guess that the thread is being interrupted by JBoss given that the EJB specification explicitly states that an EJB can't spawn its own threads, which is effectively happening here when using JasperReports.

    Try testing the code outside of an EJB, perhaps in a servlet, to see if you get the same error.

    You should consider moving this out of an EJB since I don't think you can guarantee how this will run in any container. I am sure some containers will fare better than others, but the fact is containers are working to a spec that is forbidding EJBs from creating threads.



    • #3
      Does JasperFillManager.fillReportToStream() create a new Thr

      Thanks for the reply and actually i have a basic question.

      Does this following method in Jasper actually create a new thread ?

      JasperFillManager.fillReportToStream(jasperreport, outputstream, parameters, datasource),


      • #4
        I think that's what robh was saying...


        • #5
          Actually, I am not entirely sure what it does. I know there is some thread signalling going on, but I haven't looked in detail to see what is happening. I suggest posting this on the JR mailing list.