2009-07-24 70 views
3

我正在尝试使用Jasper Reports(v3.5.2)以PDF/HTML格式向浏览器生成并打印报告以获取Web应用程序。这个webapp已经使用JSF(Woodstock)作为前端和EJB 3(使用JPA和Hibernate作为MySQL数据库的持久性提供者)。适合贾斯珀报告 - 前端还是业务?

我的问题是 - 生成基于Jasper的报告的代码应该在哪里?我完全对此感到困惑。我应该把它放在JSF的前端吗?还是应该将它作为业务逻辑中的“报告”模块作为会话bean?

我认为这是合适的地方是业务层作为一个单独的模块。我将调用一个带有报告名称的业务方法,输入参数映射和报告格式作为业务方法的参数,然后将生成的PDF/html作为回报,然后发送给浏览器。我在这条正确的轨道上?

你能提出一个如何去做这件事的模式吗?

另外,我想使用EJBQL,因为我已经在使用JPA。

谢谢。

回答

3

如果你要嵌入碧玉产生作为你的耳朵的一部分,那么我会说它应该在你的建议中抽象出一类。我不确定我会为它创建一个单独的EJB,除非您正在执行集群或以其他方式将报表生成转移到另一个JVM上,或者您有一些特殊的事务需求。

另一个常见的选择是有一个完全独立的报告服务器,您可以远程调用它,并且它会接管与用户的交互。

1

我在这里假设'代码生成'='api来调用报告'。

你最想通过表示层来做到这一点 - 在表示层接触的报表层资源库到用户流报告。

这样一来,您就可以避免为来保存数据,并保持它传递跨层之前您实际上将其发送给请求者(客户端)

0

有几种方法去这个问题。您可以从托管bean生成报告,请注意,您可能必须在浏览器中呈现报告之前通过调用facesContext.responseComplete()来打破JSF生命周期。

另一种解决方案可能是在您需要生成报告时,可以从JSF输出链接调用报告servlet。