2011-08-25 77 views
0

我需要在我的一个应用程序中集成BIRT图表引擎。 Birt可以生成图表作为图表输出。我的想法是生成这个图表图像,然后将其发送到客户端进行显示。也许在服务器上的RemoteServiceServlet中。这是做这件事的最好方法吗?还是有其他技术可以做到这一点?如何将BIRT整合到GWT中?

在此先感谢,

回答

0

最可靠的方法来生成“报道,”无论是图像,PDF,或任何字节序列需要通过浏览器的响应下载到用户操作是让客户端的RPC调用立即返回一个URL或令牌,在该令牌中稍后将提供报告的内容。后来,在这种情况下,仅仅意味着需要后续请求来检索报告的内容,但是该模式可以很好地适用于需要花费不少量时间来创建报告的情况。

  1. 客户端使用报告的参数向服务器发送RPC请求。
  2. 服务器将这些参数添加到报告队列中,并用一些可用于稍后检索报告内容的标记作出响应。
    • 如果报告计算成本很高,报告的内容将在单独的线程中生成,或者也可能在单独的计算机上生成。
    • 如果报告只保证一小段时间才能完成,可以立即生成报告,但无论如何,报告内容必须写入存储机制以便以后检索。
  3. (可选)客户端轮询一些服务以确定报告是否准备就绪。
  4. 客户端向用户呈现报告。
    • 对于您的情况,演示文稿将包含创建一个Image小部件,或许使用URL模式http://example.com/getReportImage/<Generated Token>。该请求可能会阻止,直到报告完成。

如果报告标识符的选择是报告参数的功能,并具有稳定的语义,你可以得到缓存和工作有一点额外的努力去重复。

至于使用data:网址的选择,只有在您的用户使用现代浏览器并且图像尺寸很小时才有意义。一般情况不适合。

+0

你的想法看起来不错:我会试试看,让你知道我的小实验。 – kaffein

+0

你的想法看起来很棒:我会尝试一下,让你知道我的小实验。实际上,我不需要存储结果图表,因为我即将实施的服务将不得不从数据库检索数据以绘制图表。所以为了确保数据是最新的,恕我直言,让它获取数据并动态生成图表是很有趣的。 我可能遇到的唯一问题是,我正在使用的屏幕将不得不显示多个图表。其实,这是一个有趣的结果页面,结果按“问题类别”分组... – kaffein

+0

因此,例如,如果其中一个应用用户已对4个类别做出响应,那么我将不得不生成4个图表(每个类别)。我可能会有一些循环做** ServiceCall **:它可能是性能瓶颈吗? – kaffein