2010-12-07 44 views
2

Est-ce que quelqu'un a réussi à partager la configuration entre deux ou plusieurs bundles dans SMX4? Ce que je suis à la recherche est la suivante:Partage d'un fichier de configuration entre des ensembles OSGi dans Apache Servicemix 4?

  1. Avoir un seul fichier dans $SMX_HOME/etc/myconfiguration.cfg
  2. Avez cette configuration être « disponible » à injecter dans mes paquets via la configuration OSGi administration à l'aide dm Spring, à savoir
 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:osgi="http://www.springframework.org/schema/osgi" 
     xmlns:osgix="http://www.springframework.org/schema/osgi-compendium" 
     xmlns:ctx="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
          http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd 
          http://www.springframework.org/schema/osgi-compendium http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium-1.2.xsd"> 

     <osgix:cm-properties id="cfg" 
      persistent-id="myconfiguration"> 
      <prop key="db.driverClassName">org.postgresql.Driver</prop> 
      <prop key="db.url">jdbc:postgresql://localhost/db</prop> 
      <prop key="db.username">someuser</prop> 
      <prop key="db.password">somepassword</prop> 
      <prop key="amq.brokerURL">vm://default</prop> 
     </osgix:cm-properties> 

     <ctx:property-placeholder properties-ref="cfg" /> 

Ensuite, je peux injecter des choses comme ça dans mon haricot (s):

  
    . 
    . 
    . 
     <bean id="activeMqConnectionFactory" 
      class="org.apache.activemq.ActiveMQConnectionFactory"> 
      <property name="brokerURL" value="${amq.brokerURL}" /> 
     </bean> 
    . 
    . 
    . 

Tout cela n'est que pêche, pour un seul paquet. Ce que je cherche est un moyen de définir cela une fois et ensuite être en mesure de réutiliser le même fichier de configuration en tant que propriétés pour un ensemble de bundles. À l'heure actuelle, j'ai plusieurs paquets, chacun avec sa propre instance de configuration (identifiant persistant) et par conséquent, chaque paquet nécessitant une connexion à une base de données, Java JMS, etc. doit être répété dans chaque fichier.

Actuellement, j'utilise Apache Servicemix 4, qui utilise Apache Felix comme conteneur OSGi.

+0

Votre problème est-il résolu? – FrVaBe

+0

Ouais! Je vous remercie. – snortasprocket

Répondre

3

Je partage ma configuration situé dans

$SMX_HOME/etc/my.config.cfg

utilisant cette déclaration

<!-- get properties as bean from OSGi Configuration Admin Service --> 
<osgix:cm-properties id="myConfig" persistent-id="my.config" /> 

<!-- activate ${...} placeholder --> 
<ctx:property-placeholder properties-ref="myConfig" /> 

dans chacun de mes bottes. Ressemble assez à votre solution et fonctionne parfaitement! Vous pouvez partager votre configuration (vous n'avez pas besoin de fournir un fichier de configuration pour chaque bundle) mais vous devez déclarer la référence à cette configuration dans chaque fichier spring-application-context. J'utilise FUSE 4.3 basé sur apache-servicemix-4.3.0-fuse-01-00.

+0

Je vais devoir essayer ... Je n'étais pas sûr de pouvoir partager des identifiants persistants à travers les paquets. – snortasprocket

+2

Merci pour ce post; Savez-vous s'il existe un moyen de faire ce travail pour le plan directeur? Ou si cette solution Spring actuelle prend en charge le changement de configuration lors de l'exécution (mise à jour des deux bundles)? – AlanFoster

+0

@AlanFoster (Un) heureusement je n'ai pas eu besoin de me concentrer sur le développement d'OSGi - donc actuellement je n'ai pas de réponse à votre question et je n'ai pas le temps de la comprendre. Pardon! – FrVaBe