Какие свойства конфигурации активации мне действительно нужны, чтобы 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 это, учитывая, что у меня может быть несколько провайдеров с одним и тем же именем назначения?

Спасибо


person Camilo Crespo    schedule 03.10.2014    source источник


Ответы (1)


Волшебство приходит со спецификацией активации, настроенной в inbound-resourceadapter:

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

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

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

Пока вы называете свой собственный JMSProviderLoader «по умолчанию» в вашем *-ds.xml, все работает нормально:

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

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

person Det    schedule 18.05.2015