我试图了解我真正需要的配置属性,以便在远程JMS提供程序上设置的队列中部署JBoss 5进程消息。我计划使用ejb-jar.xml配置激活规范,我不打算只配置我真正需要的东西,而不是更多。我的理解是,在使用的ra.xml中配置了规范的允许配置。如果我从jms-ra.rar查找ra.xml,我可以看到下面的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提供程序,我确实看到ra.xml中的outbound-resourceadapter
元素指定了以下内容:
<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提供者?
由于
答案 0 :(得分:0)
魔法附带了在inbound-resourceadapter中配置的激活规范:
<activationspec-class>org.jboss.resource.adapter.jms.inflow.JmsActivationSpec</activationspec-class>
查看源代码显示,java:/ DefaultJMSProvider是硬件设置为 providerAdapterJNDI 的默认设置,因此这个是自动使用的,与为出站部件明确配置的相同。
因此,您只需要一个目标作为强制属性,因为其他所有内容在JmsActivationSpec中都有可行的默认值。
只要您将自己的JMSProviderLoader命名为&#34;默认&#34;你的* -ds.xml中的一个,一切正常:
<attribute name="ProviderName">DefaultJMSProvider</attribute>
否则,您必须在MDB的激活规范中明确设置相应属性。