2016-04-21 23 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將在我們進入項目之後分享我們的經驗,讓他人受益。

相關問題