好的,所以在玩了很多之后,我得到了它的工作。事实证明,您无需创建连接器资源、连接池或管理对象资源即可接收来自活动 mq 的消息。
总之,我在 glassfish http://java.net/downloads/genericjmsra/v2.1a/binaries/中部署了连接器 genericra.rar(我将名称更改为 genericRA) 。我使用来自http://activemq.apache.org/sjsas-with-genericjmsra.html的设置配置了资源适配器配置(复制如下 - 稍微修改以适合示例)。我在 glassfish 中手动输入了详细信息。
asadmin create-resource-adapter-config
--property
SupportsXA=true
:RMPolicy=OnePerPhysicalConnection
:ProviderIntegrationMode=javabean
:ConnectionFactoryClassName=org.apache.activemq.ActiveMQConnectionFactory
:QueueConnectionFactoryClassName=org.apache.activemq.ActiveMQConnectionFactory
:TopicConnectionFactoryClassName=org.apache.activemq.ActiveMQConnectionFactory
:XAConnectionFactoryClassName=org.apache.activemq.ActiveMQXAConnectionFactory
:XAQueueConnectionFactoryClassName=org.apache.activemq.ActiveMQXAConnectionFactory
:XATopicConnectionFactoryClassName=org.apache.activemq.ActiveMQXAConnectionFactory
:UnifiedDestinationClassName=org.apache.activemq.command.ActiveMQDestination
:QueueClassName=org.apache.activemq.command.ActiveMQQueue
:TopicClassName=org.apache.activemq.command.ActiveMQTopic
:ConnectionFactoryProperties=brokerURL\\=tcp\\://127.0.0.1\\:61616
:LogLevel=FINE
genericRA
如果您想从 glassfish 发送啤酒,我们发现管理对象资源没有出现在 jndi 列表 (./asadmin list-jndi-entries) 中。我们发现管理对象资源被禁用。我们必须编辑 domain.xml 并设置 enabled = true。
我的测试消息驱动 bean;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destinationProperties",propertyValue = "PhysicalName=amqQueue")
})
public class ActiveMQTestListener implements MessageListener {
public void onMessage(Message message) {
System.out.println(message.toString());
}
}
我的 glassfish-ejb-jar.xml;
<glassfish-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>ActiveMQTestListener</ejb-name>
<mdb-resource-adapter>
<resource-adapter-mid>genericRA</resource-adapter-mid>
</mdb-resource-adapter>
</ejb>
</enterprise-beans>
</glassfish-ejb-jar>
我启动了activeMQ、glassfish(在调试模式下以便我可以看到消息)并打开了控制台(http://localhost:8161/admin)。我创建了一个名为 amqQueue 的新队列。我创建了一条新消息(在 activeMQ 控制台中发送),将目标设置为 amqQueue 并在消息正文中输入了一些文本。单击发送并在代码中触发断点。