Я хочу развернуть два экземпляра одного и того же MDB для обработки сообщений из двух разных очередей под jboss7 с помощью ActiveMQ. Итак, это часть моего файла ejb-jar.xml:
<message-driven>
<ejb-name>FirstInstanceOfMyMDB</ejb-name>
<ejb-class>de.xx.xx.MyMDB</ejb-class>
<activation-config>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>activemq/queue/queue_1</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
<message-driven>
<ejb-name>SecondInstanceOfMyMDB</ejb-name>
<ejb-class>de.xx.xx.MyMDB</ejb-class>
<activation-config>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>activemq/queue/queue_2</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
С этой конфигурацией все работает хорошо.
Теперь я хочу добавить некоторые свойства для каждого экземпляра: System = A
для FirstInstanceOfMyMDB и System = B
для SecondInstanceOfMyMDB.
Я уже пытался использовать внутри, чтобы ввести System
с аннотацией @Resource
:
<message-driven>
<ejb-name>FirstInstanceOfMyMDB</ejb-name>
...
<env-entry>
<env-entry-name>System</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>A</env-entry-value>
</env-entry>
</message-driven>
<message-driven>
<ejb-name>SecondInstanceOfMyMDB</ejb-name>
...
<env-entry>
<env-entry-name>System</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>B</env-entry-value>
</env-entry>
</message-driven>
Но jboss, кажется, устанавливает System
только один раз либо в A, либо в B. Возможно, потому, что одно и то же пространство имен используется для установки System
.
Итак, мой вопрос: как лучше всего установить свойства пользовательского экземпляра MDB (EJB)?
Используя подход, предложенный пользователем 1181247:
@Resource(name="System")
private String System;
Я могу развернуть свои MDB в модуле ejb с файлом ejb-jar.xml в каталоге METH-INF и работать по желанию. Пытаясь развернуть те же классы в файле войны с тем же ejb-jar.xml в папке WEB-INF, я получаю следующее исключение:
[0m[31m09:13:56,823 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.deployment.unit."Server.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."Server.war".INSTALL: JBAS018733: Failed to process phase INSTALL of deployment "Server.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127) [jboss-as-server-8.0.0.Alpha1-SNAPSHOT.jar:8.0.0.Alpha1-SNAPSHOT]
...
Caused by: java.lang.IllegalArgumentException: JBAS011053: Incompatible conflicting binding at java:comp/env/System source: org.jboss.as.ee.component.EnvEntryInjectionSource@1291e
Если значение env-entry-value для обоих экземпляров одинаковое, развертывание выполняется без исключений!
Нужна ли мне другая/дополнительная конфигурация для файла войны?