SEAM: Как получить EntityManager и Logger в классе, который загружается динамически? - PullRequest
2 голосов
/ 23 августа 2010

У меня есть фоновая служба, которая запускается каждые 10 минут.

Этот сервис запрашивает у БД задания, чтобы выполнить их, загрузит класс с другой бизнес-логикой в ​​соответствии с заданием (используя Class.forName ()).Конечно, они реализуют один и тот же интерфейс.

Я объявил эти классы компонентами SEAM, но когда я пытаюсь использовать entityManager или Logger, я получаю NPE.

Отвечая на свой вопрос, яПредположим, это потому, что Class.forName () работает под механизмом внедрения SEAM, и у него не будет возможности внедрить зависимости.

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

Вы проверяли, как использовать Служба EJB-Timer ?

Другой ресурс:

Возможно ли использовать Seam в службе времени JBoss?

Я должен сделать нечто подобное через несколько дней.

Пожалуйста, оставьте комментарий, что сработало для вас; -)

1 голос
/ 24 августа 2010

Вы можете внедрить все компоненты Seam в классы, не являющиеся seam, используя

Component.getInstance("entityManager") //You can inject whatever you want.

Чтобы заставить работать Logger, вы можете сделать следующее

 private static final LogProvider log = Logging.getLogProvider(MyClass.class);
...