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

BIRT integration in exsiting C++ application

本文关键字:BIRT 集成 C++ 应用程序 现有      更新时间:2023-10-16

我希望你做得很好,非常感谢你对我的查询提供的帮助。

我们的系统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"的问题吗?我真的很感激你的回答。

问候Raju

答案取决于你对"可嵌入"的定义

BIRT是用纯Java编写的。

我可以想出三种不同的方法:

  1. 当然,可以将Java代码集成到现有的C/C++程序中(请参阅将Java嵌入C++应用程序?)。

  2. 您可以使用BIRT运行时引擎,并从命令行将报告生成为PDF或HTML(这意味着,基本上,您可以用几个参数从程序中调用java可执行文件)。请参阅Birt-如何在控制台上运行报告引擎?和http://eclipser-blog.blogspot.de/2008/02/automatic-generation-of-birt-reports.html了解更多信息。

  3. 您可以在第二个进程中运行像Tomcat这样的Java web服务器,然后通过调用httpURL来启动报告(例如,您可以使用附带的Servlet示例)。看见http://www.eclipse.org/birt/documentation/integrating/viewer-usage.php

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

一些注意事项:

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

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

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

无论如何,Java技能是必要的IMHO。

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

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

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

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

  • 该体系结构是多进程而不是多线程。我们之所以选择这样做,是因为非常大的报告可能会导致内存不足错误,而其他不相关的报告恰好同时运行。这与Oracle为其报表服务器选择的基本体系结构相同。

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

HVB:我要对你的上述解释表示感谢,我相信这些信息会为我们节省时间。Raju将在我们深入了解该项目后分享我们的经验,以便其他人能够受益。