Как указать название аннотаций ресурса во время компиляции?

Наш код имеет что-то вроде этого:

@Resource(name = "java:comp/resource/foo/bar/ONE_QUEUE")
private Queue queue;

Однако в одном сценарии развертывания аннотация очереди должна быть похожей на это:

@Resource(name = "java:comp/resource/foo/bar/SECOND_QUEUE")
private Queue queue;

Я хотел бы выбрать имя для использования с профилями сборки Знатока.

Какие опции я имею?

6
задан tputkonen 18 January 2010 в 07:59
поделиться

3 ответа

Это не правильный способ сделать вещи. Ресурсы должны быть добавлены к местному имени JNDI отдельных EJB. Это должно отделить имя JNDI, используемое в коде бобового компонента из глобальных привязки , установленных развертывателем компонента. Отображение фасоли Местное связывание JNDI и глобальное связывание может обрабатываться через EJB-JAR.xml и дескрипторы развертываний развертывания.

Итак, вместо этого вы должны объявить вашу @Resource (что эквивалентно элемента, указывающее имя и тип имени ресурсов), как это:

@Resource(name = "jms/queue/aQueue")
private Queue queue;

Затем в дескриптере развертывания в AppServer (для Glassfish это Sun-EJB-Jar.xml , для jboss это jboss.xml , для Weblogic это Weblogic-EJB- jar.xml , и т. Д.), Объявление элемент, указывающий имя ссылки на ресурс и глобальный привязку JNDI через элемент.

<resource-ref>
  <res-ref-name>jms/queue/aQueue</res-ref-name>
  <jndi-name>resource/foo/bar/ONE_QUEUE</jndi-name>
</resource-ref>

Как только вы получите все, что будет работать, будет легко варьировать этот приложение-специфичный дескриптор развертывания с использованием Maven для различных сред с профилями и фильтрацией. Просто используйте свойство, активируйте фильтрацию ресурсов и установите разное значение в профилях. Что-то в этом роде:

<resource-ref>
  <res-ref-name>jms/queue/aQueue</res-ref-name>
  <jndi-name>${my.jndi.name}</jndi-name>
</resource-ref>
10
ответ дан 9 December 2019 в 22:34
поделиться

Я думаю, что вы можете использовать фильтрацию Maven, хотя это будет странно.

Здесь - это статья об этом подходе.

1
ответ дан 9 December 2019 в 22:34
поделиться

Если вы не хотите выполнять конфигурацию для каждого бина, вы можете использовать для этого функциональность JBoss Seam (см. Ссылка на Seam doc). Не знаю, является ли это частью спецификации Java Dependency Injection (JSR-299) (если вы беспокоитесь о независимости производителя).

EDIT: Очевидно, что это часть JSR-299, смотрите resin's doc о JSR-299

0
ответ дан 9 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: