Невозможно настроить компонент-брокер для ActiveMQ

У меня возникли проблемы с настройкой брокера ActiveMQ через внешний XML-файл, проанализированный xBean. На этом этапе приветствуется ЛЮБАЯ помощь, подсказки, подсказки или даже подбадривание. Вот моя проблема:

Я пытаюсь использовать внешний XML-файл для настройки брокера. У меня есть следующий код в контексте моего весеннего пакета:

<bean id="brokerFactory" class="org.apache.activemq.xbean.BrokerFactoryBean">  
 <property name="config" value="file:c:/activemq.xml" />  
 <property name="start" value="false" />  
</bean>

Это должно быть связано с файлом конфигурации без каких-либо проблем. Вот как выглядит мой файл activemq.xml:

<beans 
xmlns="http://www.springframework.org/schema/beans" 
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

 <amq:broker useJmx="true" xmlns="http://activemq.apache.org/schema/core">

    <networkConnectors>
      <!-- 
      <networkConnector uri="multicast://default?initialReconnectDelay=100" />
      <networkConnector uri="static://(tcp://localhost:61616)" />
       -->
    </networkConnectors>

    <persistenceFactory>
      <journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${basedir}/target/foo" />

    </persistenceFactory>

    <transportConnectors>
      <transportConnector uri="tcp://localhost:61636" />
    </transportConnectors>
  </amq:broker>
</beans>

Как видите, он довольно стандартный. При запуске своих пакетов я получаю следующее исключение:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name     'brokerManager' defined in URL [bundle://7.0:0/META-INF/spring/bundle-context.xml]: Cannot resolve reference to bean 'brokerFactory' while setting  bean property 'brokerFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brokerFactory' defined in URL [bundle://7.0:0/META-INF/spring/bundle-context.xml]: Invocation of init method failed; nested exception is org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 10 in XML document from OSGi resource[file:c:/activemq.xml|bnd.id=7|bnd.sym=genericenqueuer-engine] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be  found for element 'amq:broker'.

Я пробовал несколько конфигураций задействованных пространств намастры. Использование тегов брокера с объявлением "amq:" и без него (<broker> и <amq:broker>) и указание конкретного номера версии для объявления activemq .xsd. Тем не менее, файл .xsd не может быть найден. Если я предоставлю номер версии для файла activemq .xsd, я получу вместо этого следующее:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brokerFactory' defined in URL [bundle://7.0:0/META-INF/spring/bundle-context.xml]: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Unrecognized xbean namespace mapping: http://activemq.apache.org/schema/core

Я использую xbean-spring версии 3.7, которую можно найти здесь. Я попытался извлечь файл .xsd из моего файла пакета com.springsource.org.apache.activemq-5.3.0.jar и экспортировать его в пакет в одном из моих пакетов, но синтаксический анализатор все еще не может его найти. Я также опубликовал ошибку в Jira Geronimo для этой проблемы.

Может ли кто-нибудь пролить свет на эту проблему?

Заранее спасибо,
Эдуардо.


person Eduardo Z.    schedule 11.08.2010    source источник


Ответы (1)


У вас есть два варианта. Первый - представить ваш brokerFactory как службу osgi с помощью тегов <osgi:service ...> и импортировать его во второй пакет, в котором вы ссылаетесь на bean-компонент. Другой вариант - использовать ваш brokerFactory в том же наборе. Надеюсь, это поможет...

person ak47    schedule 07.07.2011