gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:28:33 24 4
gpt4 key购买 nike

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

我们的系统 T3000 是用 C++ 编写的(http://www.temcocontrols.com/ftp/software/9TstatSoftware.zip,代码可在此处获得 https://github.com/temcocontrols/T3000_Building_Automation_System)。

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

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

问候拉朱

最佳答案

好吧,答案取决于您对“可嵌入”的定义。

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?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 运行时集成到现有的 Python 应用程序(所有这些都在应用程序服务器上运行):我编写了一个监听器程序,用于监听 BIRT 任务的 TCP 套接字。它使用工作进程池(用 Java 编写),这些进程轮流使用 BIRT 报告引擎生成输出。客户端程序(此处:用 Python 编写)打开一个到监听器的 TCP 连接,并使用此套接字告诉它要生成哪个报告(包括报告参数和目标文件名)。然后监听程序依次为该任务选择一个工作进程并将该任务交给该工作进程。

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

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

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

但是,开发程序需要数月时间。

关于c++ - 现有 C++ 应用程序中的 BIRT 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com