2010-08-11 7 views
3

J'ai rencontré des problèmes lors de la configuration d'un courtier ActiveMQ via un fichier XML externe xBean-analysé. À ce stade, toute aide, conseils, indications, conseils ou même encouragement sont appréciés. Voici mon problème:Impossible de configurer broker-bean pour ActiveMQ

J'essaie d'utiliser un fichier .xml externe pour configurer un courtier. Je le code suivant dans mon contexte de faisceau de printemps:

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

Cela devrait créer un lien avec le fichier de configuration sans autre problème. Voici à quoi ressemble mon fichier 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> 

Comme vous pouvez le voir, c'est plutôt standard. Lors du démarrage de mes bundles, je reçois l'exception suivante:

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'. 

J'ai essayé plusieurs configurations pour les noms de domaine impliqués. Utilisation des balises de courtier avec et sans la déclaration "amq:" (<broker> et <amq:broker>) et en spécifiant le numéro de version spécifique de la déclaration activemq .xsd. Pourtant, le fichier .xsd ne semble pas être trouvé. Si je donne le numéro de version pour le fichier de activemq je reçois ceci:

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 

J'utilise la version 3.7 xbean ressort qui se trouve here. J'ai essayé d'extraire le fichier .xsd de mon fichier groupé com.springsource.org.apache.activemq-5.3.0.jar et de l'exporter sur un paquet dans un de mes bundles mais l'analyseur ne semble toujours pas le trouver. J'ai également posté un bug sur le Geronimo Jira pour le problème.

Quelqu'un peut-il faire la lumière sur le problème? Merci d'avance,
Eduardo.

Répondre

1

Vous avez deux options. La première consiste à exposer votre brokerFactory en tant que service osgi en utilisant les balises <osgi:service ...> et en l'important dans votre deuxième groupe où vous faites référence au bean. L'autre option consiste à utiliser votre brokerFactory dans le même lot. J'espère que ça aide ...

Questions connexes