Статьи

Eclipse’s BIRT: обновление с 2.6.2 (OSGI) до 4.3.1 (POJO)

В приложении Java BIRT eclipse в версии 2.6.2 (в качестве среды выполнения) используется в качестве механизма отчетов в течение нескольких лет и нуждается в обновлении. Поскольку версия 2.6.2 работает как платформа OSGI (например, eclipse), и все версии BIRT впоследствии загружаются как POJO, само обновление не является тривиальным или интуитивно понятным и может рассматриваться как своего рода миграция.

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

В процессе обновления было открыто несколько вопросов:

В чем основное отличие версии?
Папка ReportEngine больше не нужна, и если вы используете maven, вы можете связать исполняемые файлы BIRT через зависимость maven.

Совместим ли отчет, созданный со старыми файлами версий (библиотека, дизайн, шаблон), с новым BIRT?
Отчеты могут быть использованы в новейшей версии BIRT, но некоторые изменения должны быть сделаны. Позже в этой статье я напишу больше об этом.

Как пользовательские элементы отчета могут быть привязаны, установлены на пути к классам, к приложению?
Пользовательские элементы отчета должны быть установлены в classpath, как если бы они были обычными библиотеками jar. В этой статье я хочу упомянуть, как их можно «придумать».

Как насчет шрифтов? Поскольку в POJO больше нет папки ReportEngine, где можно определить шрифты и как они могут быть связаны с приложением .
Через системное свойство можно указать путь к папке шрифтов, так что PDF emmiter (обертка iText [ref] ). Таким образом, созданные PDF-файлы используют пользовательские шрифты, даже если они не установлены в хост-системе.

Общие изменения

Главное руководство

Основное руководство по обновлению OSGI до версии POJO BIRT можно найти на вики-странице eclipse [ref] . Одним из основных изменений является вызов метода config в Java, где домашний параметр BIRT больше не нужен, так как папка «ReportEngine» в ее плагинах опущена. Эти источники могут быть установлены на classpath из папки lib или, например, с помощью maven.

<dependency>
	<groupId>org.eclipse.birt.runtime</groupId>
	<artifactId>org.eclipse.birt.runtime</artifactId>
	<version>4.3.1</version>
</dependency>

шрифты

Если PDF emmiter, библиотечный модуль для экспорта PDF-файлов, использует шрифты, которые не были установлены в хост-системе в предыдущей версии BIRT, вам нужно было объявить и скопировать их в папку плагинов шрифтов. В POJO-версии BIRT вы можете объявить их непосредственно в emmiter (класс iText), указав правильный путь к шрифту для системного свойства («birt.customfontsdir»).

String customFontsDirPath = System.getProperty("birt.customfontsdir");
if(customFontsDir != null){
	FontFactory.registerDirectory(customFontsDirPath);
}

Об этом подходе вы можете прочитать больше в комментариях bugzilla [ref] .

Изменения в библиотеке отчетов

Интервал разрыва страницы

Одним из изменений, которое необходимо сделать, является установка значения интервала разрыва страницы от 0 до 10000. В версии 2.6.2 BIRT значение «0» означало отсутствие разрыва страницы вообще, но в новой версии BIRT это значение создает выходные данные журнала ошибок. Из билета Buzilla [ref] вы можете увидеть обсуждение этой проблемы. Вопрос в том, что произойдет, если в списке или таблице будет больше строк, чем 10000. Возможно, будет создан разрыв страницы, который здесь не запрашивается.

Проблема с заголовком разрыва страницы

Интересное поведение пришло с новой версией BIRT. Если в таблице есть заголовок, который задал высоту, а заголовок «reapeat» был «включен», то некоторые заголовки были сделаны на следующей странице. Эту проблему я мог избежать, только удалив статическую высоту, оставив текстовое поле высоты пустым.

Также, если в заголовке нет элементов, это не повторяется на следующей странице. Мне нужно было определить фиктивный элемент текста с помощью & nbsp; в этом, так что этот заголовок виден на любой следующей странице.

Эти предложения — только быстрые обходные пути для данных ситуаций.

Высота линии

Высота линии по умолчанию также изменилась, и в новой версии BIRT она меньше, чем раньше Если вам нужна высота старой строки, вы можете сделать это с помощью CSS и связать ее как часть темы по умолчанию для дизайна отчета или файла библиотеки. Из мирового блога BIRT вы можете узнать, как использовать css, который может манипулировать глобально, то есть макетом всех текстовых элементов [ref] . В этом случае CSS может выглядеть так:

.text {
	line-height: 1.3em;
}

Пользовательские элементы отчета

Установка элементов отчета на classpath

Пользовательские элементы отчета — это подключаемые модули Eclipse, которые используются в BIRT, поскольку BIRT также является проектом подключаемого модуля. Чтобы использовать их в конструкторе отчетов, они должны быть подключаемыми модулями, но для версии POJO BIRT их необходимо привязать к обычным банкам POJO. Они могут быть установлены на пути к классам из любой папки или связаны с maven. Для создания подключаемых модулей eclipse (пользовательских элементов отчета) в качестве артефактов maven необходимы дополнительные подключаемые модули. Один из подходов для этого — использовать tycho [ref] . Об использовании Tycho я могу порекомендовать страницу Lars Vogel Tutorial [ref] . После их развертывания на вашем сервере maven вы можете использовать их так же, как и любой другой jar-файл через зависимость maven.

Использование изображений из элемента отчета

Если вы используете изображения в элементах отчета и загружаете с помощью метода FileLocator.find, то это не будет работать во время выполнения, поскольку файлы jar не загружаются в среде OSGI (объявленной на сервере как служба). Вместо этого следует использовать случайный class.getResource.

// In the plugin the image folder is on the project most higher level (project root)
URL imageUrl = null;
if (Platform.getBundle("org.eclipse.birt.report.extension.myreportitem") != null) {
	//when load as BIRT OSGI plug-in
	imageUrl = FileLocator.find(Platform.getBundle("org.eclipse.birt.report.extension.myreportitem"), new Path("image/myimage.svg"), null);
} else {
	//when load as BIRT POJO
	imageUrl = MyRenderClass.class.getResource("/image/myimage.svg");
}

Проблемы с использованием плагинов во время выполнения

В пользовательских элементах отчета SVG-изображения в виде пользовательских диаграмм возвращаются. SVG был сгенерирован парсером xerces из eclipse, который был в версии 2.9.1. При выполнении отчета было сгенерировано исключение. Я думаю, что это был метод не найден исключение. После поиска в Интернете об этой проблеме было найдено много решений, которые мне не помогли (они касались понижения парсера xerces с использованием других классов преобразования, которые устарели). Эта ошибка была связана с классом TransformationInstance, который используется в конце создания SVG. Решение в моем случае состояло в том, чтобы использовать новейшую версию парсера xalan (2.7.1) в надежде, что он будет использоваться вместо версии парсера, которая используется в Java. 

<dependency>
	<groupId>xalan</groupId>
	<artifactId>xalan</artifactId>
	<version>2.7.1</version>
</dependency>

Другие проблемы

Несколько раз мне нужно было «отскочить» набор данных к таблице или списку. Кажется, что новая версия BIRT имеет проблемы, когда возникла непредвиденная ситуация, например:

  • использование элемента данных с плавающей запятой, когда значение является пустой строкой
  • пустое или нулевое значение в выражении (часть Javascript)

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

Резюме

В этой статье я хотел представить свой опыт обновления BIRT, используемого в качестве исполняемой версии на Java-приложении, с 2.6.2 в качестве платформы OSGI до 4.3.1, связанной как библиотека как POJO. Делая это, я получил знания об этом подходе со многих сайтов, на которые я ссылался здесь, в этой статье Во время обновления возникли некоторые проблемы, и их решения или wouraround описаны здесь.