Служба Jboss / Вопрос об управляемом бине - PullRequest
0 голосов
/ 29 октября 2009

У меня есть управляемый компонент / служба, работающая внутри JBOSS. Затем у меня есть кварцевая работа, которая иногда просыпается и вызывает метод управляемого компонента. Этот метод иногда длинен и затянут, и, поскольку я не хочу, чтобы время кварцевого задания истекло, я реализовал поток в управляемом компоненте для выполнения обработки. Когда поток закончен, мне нужно обновить таблицу базы данных с результатами. Это очень последовательный процесс, и он должен основываться на некоторых бизнес-правилах и т. Д.

Мой главный вопрос заключается в том, что я могу без проблем использовать EntityManager внутри службы, однако я не могу использовать его из потока, я получаю исключение NullPointerException. Как лучше всего это решить?

Спасибо

Scott

Ответы [ 2 ]

0 голосов
/ 30 октября 2009

В соответствии с документацией и спецификацией Entity Manager не является поточно-ориентированным и не может использоваться в разных дочерних потоках, как я изначально предполагал. В итоге я вернулся к первоначальному дизайну, похожему на тот, что предоставил fvu, однако я нашел несколько аннотаций, которые позволили бы мне изменить время ожидания и позволить должным образом работать длительному процессу. Вот аннотация, которую я использовал:

@PoolClass(value=org.jboss.ejb3.StrictMaxPool.class, timeout=360000000L)
0 голосов
/ 29 октября 2009

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

Я бы переместил ядро ​​обработки в бин, управляемый сообщениями, и чтобы задание Quartz просто отправляло сообщение в очередь, которую прослушивает MDB. MDB, в свою очередь, может вызывать ваш EJB, и таким образом все остается в пределах, разрешенных стандартом.

...