ОК, так что после долгих тренировок у меня все заработало.Оказывается, вам не нужно создавать ресурс коннектора, пул соединений или ресурс объекта администратора для получения сообщения от активного mq.
В итоге я развернул коннектор genericra.rar (я изменил имя на genericRA) в glassfish http://java.net/downloads/genericjmsra/v2.1a/binaries/. Я сконфигурировал конфигурации адаптеров ресурсов, используя настройки 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, мы обнаружили, что ресурс объекта admin не появился в списке jndi (./asadmin list-jndi-records).Мы обнаружили, что ресурс объекта admin был отключен.Нам пришлось отредактировать domain.xml и установить enabled = true.
Мой тестовый объект, управляемый компонентом;
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 и введите текст в теле сообщения. Нажмите кнопку отправить, и в коде будет активирована точка останова.