我有一个项目,我正在尝试在TomEE 1.7中部署EJB 2消息驱动bean(MDB)。我需要这些 MDB 来连接和读取来自两个 Websphere MQ 的消息。但是,我在互联网上找不到足够的文档。从 JBoss 中的 Websphere MQ 配置中解析的任何内容,我创建了以下内容
<Resource id="wmqRA" type="com.ibm.mq.connector.ResourceAdapterImpl" class-name="com.ibm.mq.connector.ResourceAdapterImpl">
connectionConcurrency=5
maxConnections=10
logWriterEnabled=true
reconnectionRetryCount=5
reconnectionRetryInterval=300000
traceEnabled=false
traceLevel=3
<Resource id="jms/ABC" type="javax.jms.ConnectionFactory" class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl">
TransactionSupport=none
ResourceAdapter=wmqRA
HostName=10.190.129.132
Port=1414
QueueManager=<QueueManagerName>
Channel=<ChannelName>
TransportType=Client
UserName=mqm
Password=abc
</Resource>
<Container id="wmq" type="MESSAGE">
ResourceAdapter=wmqRA
MessageListenerInterface=javax.jms.MessageListener
ActivationSpecClass=com.ibm.mq.connector.inbound.ActivationSpecImpl
</Container>
<Resource id="wmq-javax.jms.QueueConnectionFactory" type="javax.jms.QueueConnectionFactory" class-name="com.ibm.mq.connector.outbound.ManagedQueueConnectionFactoryImpl">
TransactionSupport=xa
ResourceAdapter=wmqRA
<Resource id="wmq-javax.jms.TopicConnectionFactory" type="javax.jms.TopicConnectionFactory" class-name="com.ibm.mq.connector.outbound.ManagedTopicConnectionFactoryImpl">
TransactionSupport=xa
ResourceAdapter=wmqRA
</Resource>
<Resource id="queue_id" type="javax.jms.Queue" class-name="com.ibm.mq.connector.outbound.MQQueueProxy">
arbitraryProperties
baseQueueManagerName=<QueueManagerName>
baseQueueName=<QueueName>
CCSID=1208
encoding=NATIVE
expiry=APP
failIfQuiesce=true
persistence=APP
priority=APP
readAheadClosePolicy=ALL
targetClient=JMS
</Resource>`
与队列管理器建立连接(使用 runmqsc 验证),但在将消息添加到队列时不会触发/创建 EJB。
任何方向将不胜感激
经过多次试验和错误后得到了解决方案。看起来我们需要在 ejb-jar 中指定.xml让 EJB2 与 Tomee 一起工作。
使用这个
<message-driven>
<ejb-name>beanName</ejb-name>
<ejb-class>beanClass</ejb-class>
<messaging-type>javax.jms.MessageListener</messaging-type>
<transaction-type>Bean</transaction-type>
<message-destination-type>javax.jms.Queue</message-destination-type>
<activation-config>
<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-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>*queueName*</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>channel</activation-config-property-name>
<activation-config-property-value>*channelName*</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>hostName</activation-config-property-name>
<activation-config-property-value>*hostName*</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>port</activation-config-property-name>
<activation-config-property-value>1414</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>queueManager</activation-config-property-name>
<activation-config-property-value>*queueManager*</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>transportType</activation-config-property-name>
<activation-config-property-value>CLIENT</activation-config-property-value>
</activation-config-property>
</activation-config>