пятница, 20 декабря 2013 г.

Мониторинг JasperServer

Выяснилось, что на тяжёлых отчётах (~40млн строк) JasperServer периодически падает с различными ошибками. То свободного места ему не хватает, то памяти.

Решено было прикрутить систему маниторинга, позволяющую определять нагрузку в моменты запуска таких отчётов и выявить слабое место.

Выбор пал на Java Melody.
Прикрутить оказалось делом не сложным.
1. Скачиваем 2 JAR файла (jrobin-1.5.14.jar и javamelody-1.48.0.jar) последние версии легко гуглятся.
2. Кладём указанные файлы в каталог WEB_INF/lib JasperServer'а
3. Добавляем в WEB_INF/web.xml следующие строки:

<!-- Begin JavaMelody -->
    <filter>
        <filter-name>monitoring</filter-name>
        <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>monitoring</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <listener>
        <listener-class>net.bull.javamelody.SessionListener</listener-class>
    </listener>
<!-- End JavaMelody -->

4. Перегружаем сервер и переходим на добавленную страницу monitoring:
http://[адрес сервера]:[порт сервера]/jasperserver/monitoring

По итогам было выяснено, что узким местом являлся размер java heap space.

вторник, 17 декабря 2013 г.

Исключение "Висячих" строк

Периодически в данных попадаются конструкции, которые при выгрузке отчёта в Excel приводят к тому, что отображается пустая строка с одним единственным значением.

Например это выглядит так

Строка 1 121099     РФ, г. Москва Не известно Новоарбатский мост   Подмост.
Строка 2           прост.

Заказчику невдомёк, что в данных такого нет, а это "шалости" excel. Для исправления подобных ситуаций Jasper содержит специальную настройку.


Для её активации необходимо выбрать блок "Detail" и в его свойствах поменять значение Split Type = "Prevent" (значение по умолчанию = "Default")

После этого строка из нашего примера приобретает красивый для заказчика вид:

Строка 1 121099     РФ, г. Москва Не известно Новоарбатский мост   Подмост.прост.