Какие свойства конфигурации активации мне действительно нужны, чтобы MDB прослушивал удаленную очередь в JBoss 5, используя jms-ra.rar по умолчанию

Я пытаюсь понять, какие свойства конфигурации мне действительно нужны, чтобы MDB, развернутый на JBoss 5, обрабатывал сообщения из очереди, настроенной на удаленном провайдере JMS. Я планирую настроить спецификацию активации, используя ejb-jar.xml, и я не хочу настраивать только то, что мне действительно нужно, не больше. Насколько я понимаю, разрешенный конфиг для спецификации настраивается в используемом ra.xml. Если я ищу ra.xml из jms-ra.rar, я могу видеть ниже inbound-resourceadapter элемент

  <inbound-resourceadapter>
     <messageadapter>        
        <messagelistener>
           <messagelistener-type>javax.jms.MessageListener</messagelistener-type>
           <activationspec>
              <activationspec-class>org.jboss.resource.adapter.jms.inflow.JmsActivationSpec</activationspec-class>
              <required-config-property>
                  <config-property-name>destination</config-property-name>
              </required-config-property>
           </activationspec>
        </messagelistener>
     </messageadapter>
  </inbound-resourceadapter>

только свойство назначения является обязательным. В моем случае это место назначения удаленное, поэтому я настроил JMSProviderLoader с необходимыми свойствами JNDI, а также фабрику соединений, которая ссылается на этот JMSProviderLoader, как в новом файле [myprovidername]-ds.xml, который я добавил для развертывания. Я не могу понять, как, если я добавлю только пункт назначения, MDB узнает, что это от этого конкретного удаленного провайдера JMS, я вижу, что outbound-resourceadapter Элемент из ra.xml указывает следующее:

<config-property>
   <description>The jndi name of the provider of connection factories</description>
   <config-property-name>JmsProviderAdapterJNDI</config-property-name>
   <config-property-type>java.lang.String</config-property-type>
   <config-property-value>java:DefaultJMSProvider</config-property-value>
</config-property>

Но, судя по слову исходящий, это не относится к входящим потокам.

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

Спасибо

1 ответ

Волшебство приходит с Спецификацией Активации, которая настроена в адаптере входящего ресурса:

<activationspec-class>org.jboss.resource.adapter.jms.inflow.JmsActivationSpec</activationspec-class>

Изучение источника показывает, что java:/DefaultJMSProvider жестко установлен по умолчанию для providerAdapterJNDI, поэтому этот файл используется автоматически, так же как явно настроен для исходящей части.

Таким образом, вам нужно только назначение как обязательное свойство, потому что все остальное имеет жизнеспособное значение по умолчанию в JmsActivationSpec.

Пока вы называете свой собственный JMSProviderLoader как "Default" в вашем *-ds.xml, все работает нормально:

<attribute name="ProviderName">DefaultJMSProvider</attribute>

В противном случае вам придется явно установить соответствующий атрибут в спецификации активации для MDB.

Другие вопросы по тегам