Я надеюсь, что у вас все хорошо, и я очень ценю вашу помощь по моему запросу.
У нас есть система 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 разных способа:
Конечно, можно интегрировать код Java в существующую программу C / C ++ (см. Встраивать Java в приложение C ++?).
Вы можете просто использовать механизм выполнения BIRT и сгенерировать отчет в виде PDF или HTML из командной строки (это означает, что в основном вы вызываете исполняемый файл Java из вашей программы с несколькими аргументами). Увидеть Birt — Как запустить движок отчетов на консоли? а также http://eclipser-blog.blogspot.de/2008/02/automatic-generation-of-birt-reports.html для дополнительной информации.
Вы можете запустить веб-сервер Java, такой как Tomcat, во втором процессе, а затем запустить свой отчет, вызвав URL-адрес http (например, вы можете использовать прилагаемый пример сервлета). Увидеть http://www.eclipse.org/birt/documentation/integrating/viewer-usage.php
Аналогично 3. (см. Ниже)
Некоторые заметки:
Второй вариант медленный из-за накладных расходов при запуске движка Java и BIRT (это может занять несколько секунд). При первом и третьем параметре накладные расходы при запуске уменьшаются или могут быть сведены к минимуму до одного раза (и для каждого отчета).
Для второго и третьего варианта может потребоваться изменить существующий код примеров программ в соответствии с вашими потребностями.
Первый вариант, вероятно, является лучшим для решения отраслевого качества, но его также сложнее всего разработать.
В любом случае, навыки Java нужны ИМХО.
Если вы планируете запускать это на SOC, а не на ПК, примите во внимание производительность.
Подходит ли решение на основе Java для такого типа оборудования? BIRT требуется довольно много оперативной памяти и процессора (для SOC). Я считаю, что аппаратное обеспечение, такое как Raspi 3, должно справляться с этим довольно легко.
Я интегрировал среду выполнения BIRT в существующее приложение Python (все это работает на сервере приложений) четвертым способом: я написал программу-слушатель, которая прослушивает сокет TCP для задач BIRT. Он использует пул рабочих процессов (написанных на Java), которые, в свою очередь, используют механизм отчетов BIRT для генерации вывода. Клиентская программа (здесь: написано на Python) открывает TCP-соединение со слушателем и использует этот сокет, чтобы сообщить ему, какой отчет нужно сгенерировать (включая параметры отчета и имя файла назначения). Затем программа слушателя выбирает рабочий процесс для задачи и передает задачу рабочему процессу.
Итак, в основном, этот четвертый вариант похож на третий с двумя отличиями:
Связь основана на сокетах (вместо http), что позволяет осуществлять двустороннюю связь.
Архитектура многопоточная, а не многопоточность. Мы выбираем это потому, что очень большие отчеты могут вызывать ошибки нехватки памяти для других несвязанных отчетов, которые могут запускаться одновременно. Это та же базовая архитектура, которую Oracle выбрал для своего сервера отчетов.
Однако разработка программ заняла месяцы.
HVB: Я должен поблагодарить вас за объяснение, приведенное выше, эта информация сэкономит нам время, я уверен. Раджу поделится нашим опытом после того, как мы углубимся в проект, чтобы другие могли извлечь выгоду.