我正在使用 IBM MQ 消息传递提供程序和 JBoss eap 6.1 环境开发通知服务。我成功地通过MQ JCA提供程序rar(即wmq.jmsra.rar文件发送消息。但是在消费者方面,我当前的配置如下所示
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination", propertyValue="F2.QUEUE"),
@ActivationConfigProperty(propertyName="providerAdapterJNDI", propertyValue="java:jboss/jms/TopicFactory"),
@ActivationConfigProperty(propertyName="queueManager", propertyValue="TOPIC.MANAGER"),
@ActivationConfigProperty(propertyName="hostName", propertyValue="10.239.217.242"),
@ActivationConfigProperty(propertyName="userName", propertyValue="root"),
@ActivationConfigProperty(propertyName = "channel", propertyValue = "TOPIC.CHANNEL"),
@ActivationConfigProperty(propertyName = "port", propertyValue = "1422")
})
我的问题是此服务的使用者不想在这些豆子中添加任何端口号、主机名、队列管理器属性。此外,他们不想使用 ejb-jar.xml 来外部化这些配置。我研究并发现我们可以添加一个域 IBM Message Driven Bean,但没有成功。关于我可以在这里做些什么来外部化所有这些配置的任何建议?
编辑:添加 --> JCA 资源适配器部署在消费者端,如果它更容易的话。
谢谢
实际上,您可以将 MDB 激活规范属性外部化到服务器配置文件。
创建 ejb-jar.xml 文件,但不要将实际值放在文件中,请使用属性占位符:
<activation-config-property>
<activation-config-property-name>hostName</activation-config-property-name>
<activation-config-property-value>${wmq.host}</activation-config-property-value>
</activation-config-property>
对所有所需的属性执行此操作。
确保在服务器配置文件中启用了 Java EE 规范文件(在本例中为 ejb-jar.xml)的属性替换:
<subsystem xmlns="urn:jboss:domain:ee:1.2">
<spec-descriptor-property-replacement>true</spec-descriptor-property-replacement>
然后,在服务器配置文件中,为属性提供值:
<system-properties>
<property name="wmq.host" value="10.0.0.150"/>
打包 MDB 后,您无需更改 MDB jar 中的任何文件 - 只需在服务器配置中提供属性即可。
避免在 MDB 中添加主机名、端口号等,您只想在 MDB 中定义 destinationType,以及您可以在应用程序服务器中配置的其余内容,例如激活规范、队列和队列连接工厂。我做了同样的事情,但我使用了IBM Websphere Application Server。