2013-12-08 3 views
0

Я использую механизм BIRT для создания отчетов. В докладе работает нормально без проблем, но когда я стресс-теста отчета (например, запустить отчет в 10 раз от разных пользователей), я получаю NullPointerException на линии:Birt Engine с несколькими запросами

factory.createReportEngine(config); 

И иногда это вызывает другое исключение по построению запроса.

Так может ли кто-нибудь посоветовать мне проблему с двигателем BIRT с одновременными запросами? и как решить эту проблему?

Заранее спасибо :)

ответ

0

BIRT двигателя поддерживает очень хорошо много одновременных запросов, но мы не должны создавать этот «IReportEngine» объект на каждый отчете, как это кажется, что вы делаете.

Этот метод:

factory.createReportEngine(config); 

должен вызываться один раз для всех, когда двигатель запускается, а затем вы можете сохранить полученный объект IReportEngine в статическом свойстве своего класса, например. Кроме того, метод, который инициализирует двигатель, должен быть синхронизирован.

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

EDIT: Это также работает в контексте кластера, каждый узел кластера имеет свой собственный механизм BIRT. Например, если в кластере есть 3 узла (3 JVM), это приводит к 3 статическим механизмам BIRT. Хотя по-прежнему важно инициализировать каждый движок в «синхронизированном» методе, потому что я должен обеспечить, чтобы два процесса не вызывали одновременно factory.createReportEngine в той же JVM.

+0

Благодарим Dom за ваш ответ :) может быть инициализация механизма отчетов, когда-то это хорошо для улучшения, но Synchronized не будет работать со мной, поскольку отчет выполняется в среде кластера – User

+0

Контекст кластера не должен быть проблемой, i отредактировал ответ – Dominique

Смежные вопросы