2016-04-21 2 views
1

Надеюсь, вы делаете хорошо, и я очень ценю вашу помощь здесь для моего запроса.Интеграция BIRT в exsiting приложении C++

У нас есть наша система 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»? Я очень ценю ваш ответ.

С уважением Раджу

ответ

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. Вы можете запустить веб-сервер Java, такой как Tomcat, во втором процессе, а затем запустить свой отчет, вызвав URL-адрес http (например, вы можете использовать прилагаемый пример сервлета). См http://www.eclipse.org/birt/documentation/integrating/viewer-usage.php

  4. Аналогично 3. (смотри ниже)

Некоторые примечания:

Второй вариант является медленным, из-за накладных расходов запуска двигателя Java и BIRT (это может занять несколько секунд). С первым и третьим параметром служебные данные запуска или сводятся к минимуму только один раз (и для каждого отчета).

Для второго и третьего вариантов может потребоваться изменить существующий код примеров программ в соответствии с вашими потребностями.

Первый вариант, вероятно, является лучшим решением для промышленного качества, но его также сложно разработать.

В любом случае, навыки Java необходимы ИМХО.

Если вы планируете запускать это на SOC вместо ПК, учитывайте эффективность. Является ли решение на основе Java подходящим для такого оборудования? BIRT требуется довольно много оперативной памяти и процессора (для SOC). Я считаю, что такое оборудование, как Raspi 3, должно справиться с этим довольно легко.

Я интегрировал среду выполнения BIRT в существующее приложение Python (все это работает на сервере приложений) четвертым способом: я написал программу-слушатель, которая прослушивает TCP-сокет для задач BIRT. Он использует пул рабочих процессов (написанных на Java), которые, в свою очередь, используют механизм отчета BIRT для генерации вывода. Клиентская программа (здесь: написанная на Python) открывает TCP-соединение с слушателем и использует этот сокет, чтобы сообщить ему, какой отчет сгенерировать (включая параметры отчета и имя файла назначения). Затем программа-слушатель выбирает рабочий процесс для задачи и задает задачу для рабочего процесса.

Так, в принципе, этот четвертый вариант похож на третий, с двумя отличиями:

  • сообщение является сокет на основе (вместо HTTP), что позволяет би-ди-связь.

  • Архитектура представляет собой многопроцессорную систему вместо многопоточности. Мы выбираем это, потому что очень большие отчеты могут вызывать ошибки из-за памяти для других несвязанных отчетов, которые просто происходят одновременно. Это та же самая базовая архитектура, которую Oracle выбрал для своего сервера отчетов.

Однако разработка программ заняла несколько месяцев.

+0

Спасибо за объяснение. – Raju

0

HVB: Я должен дать вам больше, чем просто спасибо за объяснение выше, эта информация сэкономит нам время, я уверен. Раджу будет делиться нашим опытом после того, как мы углубимся в проект немного глубже, чтобы другие могли извлечь выгоду.