Проблемы с использованием Genericra для интеграции ActiveMQ и Glassfish при использовании протокола отказоустойчивости
-
11-10-2019 - |
Вопрос
Я пытаюсь использовать ActiveMQ в Glassfish, используя адаптер Genericra Resource, предоставленную Glassfish 2.1. Я нашел несколько страниц с полезной информацией, включая http://activemq.apache.org/sjsas-with-genericjmsra.html.
У меня на самом деле был успех, и я смог заставить MDBS использовать ActiveMQ в качестве их поставщика JMS, но я сталкиваюсь с проблемой, поскольку я пытаюсь сделать более сложную конфигурацию. Я хочу настроить конфигурацию мастер-рабов, которая потребовала бы, чтобы мои клиенты использовали Brokerurl Failover: (TCP: // Broker1: 61616, TCP: // Broker2: 61616). Чтобы сделать это, я установил следующее свойство при вызове Asadmin create-resource-adapter-config
(Я должен сбежать '=' и ':'):
ConnectionFactoryProperties=brokerURL\=failover\:(tcp\://127.0.0.1\:61616,tcp\://127.0.0.1\:61617)
Тем не менее, теперь я получаю StringIndexoutOfBoundSexception, когда мое приложение запускается. Я подозреваю, что запятая между двумя URL -адресами - это виновник, так как это работает нормально:
brokerURL\=failover\:(tcp\://127.0.0.1\:61616)
Просто интересно, имел ли кто -нибудь этот вопрос раньше. Также интересно, есть ли лучший способ интегрировать со стеклянной рыбкой, чем использование общего адаптера ресурсов.
РЕДАКТИРОВАТЬ: Я забыл избежать толстой кишки после второго TCP, но, к сожалению, это не решило проблему, которую я вижу.
Решение
В итоге я переключился, чтобы использовать адаптер ресурсов, предоставленный ActiveMQ, который поступает в каталоге LIB/необязательный.
В случае, если кто -то заинтересован, вот шаги, которые я выполнил, чтобы заставить его работать
asadmin create-resource-adapter-config --property ServerUrl=failover\:(tcp\://localhost\:61616,tcp\://localhost\:61617) activemqra
asadmin deploy --name activemqra <path to activemq-rar-5.4.2.rar>
Затем создавать ресурсы:
asadmin create-connector-connection-pool --raname --connectiondefinition javax.jms.ConnectionFactory --transactionsupport XATransaction jms/MyQueueFactoryPool
asadmin create-connector-resource --poolname jms/MyQueueFactoryPool jms/MyQueueQFactory
asadmin create-admin-object --raname activemqra --restype javax.jms.Queue --property PhysicalName=MyQueue jms/MyQueue
Чтобы подключить MDB, мне пришлось добавить это в Sun-ejb-jar.xml
<mdb-resource-adapter>
<resource-adapter-mid>activemqra</resource-adapter-mid>
<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>MyQueue
</activation-config-property-value>
</activation-config-property>
</activation-config>
</mdb-resource-adapter>
Чтобы подключить это к весной Jmstemplate:
<bean id="ConFac" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jms/MyQueueQQFactory</value>
</property>
<property name="resourceRef">
<value>true</value>
</property>
</bean>
<bean id="myqueue" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jms/MyQueue</value>
</property>
<property name="resourceRef">
<value>true</value>
</property>
</bean>
<bean id="mdbTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="conFac" />
<property name="defaultDestination" ref="myqueue" />
</bean>
Другие советы
Это известный дефект в genericjmsra, см. http://java.net/jira/browse/genericjmsra-50
В комментариях предложено исправление в ObjectBuilder.java.
Я выглядит так, как будто вы не избегаете толстой кишки во втором URI.