Проблемы с использованием genericra для интеграции activemq и glassfish при использовании протокола аварийного переключения

Я пытаюсь использовать activemq в Glassfish, используя адаптер ресурсов genericra, поставляемый с Glassfish 2.1. Я нашел несколько страниц с полезной информацией, включая http://activemq.apache.org/sjsas-with-genericjmsra.html.

На самом деле я добился успеха и смог заставить MDB использовать activemq в качестве своего поставщика JMS, но я столкнулся с проблемой, когда пытаюсь выполнить более сложную настройку. Я хочу настроить конфигурацию ведущий-ведомый, которая потребует от моих клиентов использовать URL-адрес брокера для отработки отказа: (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)

Просто интересно, сталкивался ли кто-нибудь с этой проблемой раньше. Также интересно, есть ли лучший способ интеграции с Glassfish, чем использование универсального адаптера ресурсов.

РЕДАКТИРОВАТЬ: я забыл убрать двоеточие после второго tcp, но, к сожалению, это не решило проблему, которую я вижу.


person Kyle    schedule 14.01.2011    source источник


Ответы (3)


В итоге я переключился на использование адаптера ресурсов, предоставляемого activemq, который находится в каталоге lib/Optional.

Если кому-то интересно, вот шаги, которые я выполнил, чтобы заставить его работать

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>

Чтобы подключить это к Spring 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>
person Kyle    schedule 18.01.2011
comment
Это помогло мне, поскольку я заменяю OpenMQ на ActiveMQ в Glassfish 3. Вся наша конфигурация выполняется через Ant, и шаги администратора, которые вы описали, немного помогли. - person nattyddubbs; 18.07.2014


Похоже, вы не избегаете двоеточия во втором ури.

person timsabat    schedule 17.01.2011
comment
Спасибо, я не заметил отсутствующий побег, но, к сожалению, проблема была не в этом. Я также пытался избежать запятой и не избегать запятой. - person Kyle; 18.01.2011