10 Replies Latest reply on Jan 25, 2007 5:15 AM by Pete Muir

    Using Jasper Reports with Seam/JBoss

    Tom Blockley Newbie

      Hi,

      I'm trying to integrate JasperReports with a Seam application. I can compile and fill the reports, but I can't find any documentation on how to return the generated report to a web-page, especially using the Seam forwarding methods.

      Can anybody please advise? I feel like I'm punching around in the dark a bit here.

        • 1. Re: Using Jasper Reports with Seam/JBoss
          Pete Muir Master

          http://wiki.jboss.org/wiki/Wiki.jsp?page=SeamResourceLoader

          or better, consider using Seam's built in PDF generation.

          • 2. Re: Using Jasper Reports with Seam/JBoss
            Tom Blockley Newbie

            That looks like it may just work. Don't want to return a pdf though - ideally I want to just return a HTML/jsf page that displays the report.

            Could I just use the same method but return a HTML version? Or is there a simpler way?

            • 3. Re: Using Jasper Reports with Seam/JBoss
              Pete Muir Master

              For an HTML doccument yes, AFAICS. If you have a (generated?) JSF view, then you would need to run it through the correct (JSP/facelets) renderer first - which the example resource loader won't do.

              Set the disposition to INLINE, the type to text/html, and don't override the filename and your browser should interpret it properly.

              • 4. Re: Using Jasper Reports with Seam/JBoss
                Norman Richards Master

                 

                "petemuir" wrote:
                http://wiki.jboss.org/wiki/Wiki.jsp?page=SeamResourceLoader

                or better, consider using Seam's built in PDF generation.


                We're not there yet, but I am planning to add charting to the PDF generation.

                • 5. Re: Using Jasper Reports with Seam/JBoss
                  Tom Blockley Newbie

                  Hi,

                  Been working on this, and can create the filled in html report, and load it to a byte[] in the Resource, but I keep hitting this error:

                  javax.faces.el.EvaluationException: Exception while invoking expression #{reporting.file.render}
                   at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:165)
                   at org.jboss.seam.actionparam.ActionParamBindingHelper.invokeTheExpression(ActionParamBindingHelper.java:59)
                   at org.jboss.seam.actionparam.ActionParamMethodBinding.invoke(ActionParamMethodBinding.java:71)
                   at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:98)
                   at org.jboss.seam.core.Pages.callAction(Pages.java:343)
                   at org.jboss.seam.core.Pages.callActions(Pages.java:322)
                  ...
                  Caused by: javax.faces.el.EvaluationException: Exception getting value of property file of base of type : org.jboss.seam.intercept.Proxy$$EnhancerByCGLIB$$99e6343c
                   at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:96)
                  ...
                  Caused by: javax.faces.el.EvaluationException: Bean: org.jboss.seam.intercept.Proxy$$EnhancerByCGLIB$$99e6343c, property: file
                   at org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:442)
                  ...
                  Caused by: java.lang.reflect.InvocationTargetException
                   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                  ...
                  Caused by: java.lang.RuntimeException: org.hibernate.TransactionException: Could not register synchronization
                   at org.jboss.ejb3.stateful.StatefulBeanContext.remove(StatefulBeanContext.java:273)
                   at org.jboss.ejb3.AbstractPool.remove(AbstractPool.java:171)
                   at org.jboss.ejb3.cache.simple.SimpleStatefulCache.remove(SimpleStatefulCache.java:299)
                  


                  The reporting bean is session scoped, and stateful. The Resource is (I think) working fine, I can create the new one, and print the contents to my log, but it fails when I try access it through pages.xml wiring.

                  I'm fairly new to seam so apologies if this is a stupid question.

                  • 6. Re: Using Jasper Reports with Seam/JBoss
                    Pete Muir Master

                    Looks like there is some transaction related problem going on. My best guess would to try marking the render method @Transactional. Or, better yet, do it in a JavaBean as a Seam component

                    • 7. Re: Using Jasper Reports with Seam/JBoss
                      Tom Blockley Newbie

                      hmm. I think the transaction exception is a bit of a red herring - it seems to appear at the bottom of all stack traces now.

                      I'm getting the same error now even when trying to access a simple string in my reporting bean:

                      reporting.java:

                      @Stateful
                      @Name("reporting")
                      @Scope(ScopeType.SESSION)
                      public class ReportManager implements ReportManagerI {
                      
                      ...
                      
                      @Out
                      public String hello="hello";
                      
                      ...
                      }
                      


                      reporting.xhtml:
                      ...
                      
                      <h:outputText value="#{reporting.hello}" />
                      
                      ...
                      


                      Is also giving me:
                      javax.faces.el.PropertyNotFoundException: /reporting.xhtml @37,53 value="#{reporting.hello}": Bean: org.jboss.seam.intercept.Proxy$$EnhancerByCGLIB$$3196fd0, property: hello
                       at com.sun.facelets.el.LegacyValueBinding.getValue(LegacyValueBinding.java:58)
                       at javax.faces.component.UIOutput.getValue(UIOutput.java:77)
                       at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue(RendererUtils.java:217)
                       at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.renderOutput(HtmlTextRendererBase.java:69)
                       at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:57)
                      


                      I think maybe there's something wrong with my bean?

                      • 8. Re: Using Jasper Reports with Seam/JBoss
                        Gavin King Master

                        What version of JBoss or EJB3 are you using. This is a bug in EJB3/Hibernate that was fixed a while ago. It just hides the real exception.

                        • 9. Re: Using Jasper Reports with Seam/JBoss
                          Tom Blockley Newbie

                          I'm using:
                          EJB3
                          Jboss IDE 2.0.0.Beta2
                          JBoss Server 4.0.5.GA
                          JBoss Seam 1.0.1.GA2

                          Is that the appropriate setup to encounter this bug?

                          • 10. Re: Using Jasper Reports with Seam/JBoss
                            Pete Muir Master

                            Yes. Get Seam 1.1.1.GA - which is the latest release :)