现有 C++ 应用程序中的 BIRT 集成

BIRT integration in exsiting C++ application

希望您一切顺利,非常感谢您对我的查询提供的帮助。

我们的系统 T3000 是用 C++ 编写的 (http://www.temcocontrols.com/ftp/software/9TstatSoftware.zip and codes are available here https://github.com/temcocontrols/T3000_Building_Automation_System)。

我正在尝试将 'BIRT reporting tool' 集成到我的 C++ 应用程序中。我想根据 T3000 系统中可用的数据创建报告。我认为 BIRT 是可嵌入的(??)。我们不需要编译和更改项目,主要是能够从T3000.exe中调用它。 我的想法是我们可以在现有的 T3000 中放置一个菜单标签,并尝试在用户单击时显示报告。

你能帮我解决 'BIRT' 的问题吗?非常感谢您的回答。

问候 拉朱

嗯,答案取决于你对 "embeddable" 的定义。

BIRT 是用纯 Java.

编写的

我可以想到 3 种不同的方式:

  1. 当然可以将 Java 代码集成到现有的 C/C++ 程序中(参见 Embed Java into a C++ application?)。

  2. 您可以只使用 BIRT 运行时间引擎并从命令行生成报告为 PDF 或 HTML(这意味着,基本上您调用 java 可从您的程序中使用多个参数执行)。有关详细信息,请参阅 Birt - How to run report engine on the console? and http://eclipser-blog.blogspot.de/2008/02/automatic-generation-of-birt-reports.html

  3. 您可以在第二个进程中 运行 像 Tomcat 这样的 Java 网络服务器,然后通过调用 http URL(例如,您可以使用包含的 Servlet 示例)。参见 http://www.eclipse.org/birt/documentation/integrating/viewer-usage.php

  4. 类似于3。(见下文)

一些注意事项:

由于 Java 和 BIRT 引擎启动开销(这可能需要几秒钟),第二个选项很慢。使用第一个和第三个选项,启动开销被或可以最小化到只有一次(并且对于每个报告)。

对于第二个和第三个选项,可能需要修改示例程序的现有代码以满足您的需要。

第一个选项可能是行业质量解决方案的最佳选择,但它也是最难开发的。

无论如何,恕我直言,Java 技能是必需的。

如果您打算 运行 在 SOC 而不是 PC 上进行此操作,请考虑性能。 基于 Java 的解决方案是否适合这种硬件? BIRT 需要相当多的 RAM 和 CPU(对于 SOC)。我认为像 Raspi 3 这样的硬件应该很容易处理这个问题。

我以第四种方式将 BIRT 运行time 集成到现有的 Python 应用程序中(所有这些 运行ning 在应用程序服务器上):我编写了一个监听器程序来监听在用于 BIRT 任务的 TCP 套接字上。它使用一个工作进程池(写在 Java 中),然后使用 BIRT 报告引擎生成输出。客户端程序(这里:写在Python)打开一个到监听器的TCP连接,并使用这个套接字告诉它要生成哪个报告(包括报告参数和目标文件名)。然后侦听程序依次为该任务选择一个工作进程,并将该任务交给该工作进程。

所以,基本上,这第四个选项与第三个选项类似,但有两个区别:

  • 通信是基于套接字的(而不是 http),允许双向通信。

  • 架构是多进程而不是多线程。我们选择这个是因为非常大的报告可能会导致恰好同时发生在 运行 上的其他不相关报告的内存不足错误。它与 Oracle 为其报表服务器选择的基本架构相同。

然而,开发程序花了几个月时间。

HVB:对于上面的解释,我要给你的不仅仅是简单的感谢,我相信这些信息会节省我们的时间。在我们更深入地参与项目后,Raju 将分享我们的经验,以便其他人可以受益。