Подключитесь к очереди на JBoss EAP6 от Camel - PullRequest
0 голосов
/ 19 сентября 2019

У меня установлена ​​очередь JMS HornetQ на JBoss EAP6 в файле standalone.xml.

<hornetq-server>
[...]
    <jms-connection-factories>
        <connection-factory name="RemoteConnectionFactory">
            <connectors>
                <connector-ref connector-name="netty"/>
            </connectors>
            <entries>
                <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
            </entries>
        </connection-factory>
    </jms-connection-factories>

    <jms-destinations>
        <jms-queue name="WorkflowExecution">
            <entry name="/queue/MyQueue"/>
            <entry name="java:jboss/exported/queue/MyQueue"/>
        </jms-queue>
    </jms-destinations>
</hornetq-server>

Очередь работает нормально, и я могу отправлять на нее сообщения, используя такие инструменты, как Hermes JMS.

Я работаю над автономным клиентским приложением, работающим в Fuse 4.4, которое имеетотправить сообщение в очередь по маршруту Camel, но я не могу понять, как установить соединитель в конфигурации.

Это то, что я пытался установить в файле camel-context.xml:

<bean id="jmsinjection" class="org.apache.camel.component.jms.JmsComponent">
  <property name="connectionFactory">
    <bean class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="jms/RemoteConnectionFactory" />
      <property name="jndiEnvironment">
        <props>
          <prop key="java.naming.provider.url">remote://myEAPurl:port</prop>
          <prop key="java.naming.factory.initial">org.jboss.naming.remote.client.InitialContextFactory</prop>
        </props>
      </property>
    </bean>
  </property>
</bean>

И полученное исключение:

Ошибка создания компонента с именем 'jmsinjection', определенным в URL [bundle: //79.37: 0 / META-INF / spring / camel-context.xml]: сбой инициализации компонента;вложенным исключением является org.springframework.beans.ConversionNotSupportedException: не удалось преобразовать значение свойства типа 'org.hornetq.jms.client.HornetQJMSConnectionFactory' в требуемый тип 'javax.jms.ConnectionFactory' для свойства 'connectionFactory';вложенным исключением является java.lang.IllegalStateException: невозможно преобразовать значение типа [org.hornetq.jms.client.HornetQJMSConnectionFactory] в требуемый тип [javax.jms.ConnectionFactory] для свойства 'connectionFactory': не найдено соответствующих редакторов или стратегии преобразования

Согласно javadoc, HornetQJMSConnectionFactory реализует javax.jms.QueueConnectionFactory, который расширяет javax.jms.ConnectionFactory, поэтому я не понимаю, почему я получаю это исключение.

Я потратил часы на утилизацию форума JBoss идок, но не могу найти способ заставить его работать.

Что не так в моей конфигурации верблюда?Как это исправить?

1 Ответ

0 голосов
/ 25 сентября 2019

Проблема связана с загрузчиком классов OSGi.

В Fuse ESB уже есть версия javax.jms.ConnectionFactory, загруженная в путь к классам.

Добавление jboss-client.jar добавляет HornetQJMSConnectionFactory в classpath, но также и в другой версии ConnectionFactory.

. Решение состоит в том, чтобы добавить все следующие зависимости в комплект и удалить jboss-client.jar, как указано в на этой странице :

hornetq-core
hornetq-jms
jboss-ejb-client
jboss-logging
jboss-logmanager
jboss-marshalling
jboss-marshalling-river
jboss-remote-naming
jboss-remoting
jboss-sasl
netty
remoting-jmx
xnio-api
xnio-nio

Вы можете найти все эти зависимости с правильной версией непосредственно в вашем репозитории JBoss EAP.Имена могут быть немного другими.

...