2016-04-21 51 views
1

我希望你们做得很好,我真的很感谢你们的帮助。BIRT集成在现有的C++应用程序中

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

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

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

问候 拉朱

回答

1

那么,答案取决于你的“嵌入”的定义。

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

因此,基本上,该第四选项类似于第三个,有两点不同:

  • 的通信是插座基(而不是HTTP),允许双向通信二。

  • 该架构是多进程而不是多线程。我们选择这种方式是因为非常大的报表可能会导致内存不足错误,而这些错误只会在同一时间运行。这是Oracle为其报告服务器选择的基本架构。

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

+0

感谢中心的解释。 – Raju

0

HVB:我不得不给你一个简单的感谢以上解释,这个信息将节省我们的时间,我相信。 Raju将在我们进入项目之后分享我们的经验,让他人受益。

相关问题