Проблема использования genericra для интеграции activemq и glassfish при использовании протокола аварийного переключения - PullRequest
3 голосов
/ 15 января 2011

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

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

Ответы [ 3 ]

3 голосов
/ 18 января 2011

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

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

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>
1 голос
/ 04 июля 2012

Это известный дефект в genericjmsra, см .: http://java.net/jira/browse/GENERICJMSRA-50

В комментариях предлагается исправление в ObjectBuilder.java.

0 голосов
/ 17 января 2011

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

...