Совместное использование файла конфигурации между пакетами OSGi в Apache Servicemix 4? - PullRequest
2 голосов
/ 07 декабря 2010

Кто-нибудь смог успешно разделить конфигурацию между двумя или более пакетами в SMX4?То, что я ищу, это:

  1. Иметь один файл в $SMX_HOME/etc/myconfiguration.cfg
  2. Чтобы эта конфигурация была «доступной» для внедрения в мои пакеты через OSGi Configuration Adminиспользуя Spring dm, то есть
<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" />

Затем я могу добавить такие вещи в мои bean-компоненты:

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

Все это просто замечательно, дляодин комплектТо, что я ищу, это способ определить это один раз, а затем иметь возможность повторно использовать тот же файл конфигурации, что и свойства для набора пакетов.Прямо сейчас у меня есть несколько пакетов, каждый со своим собственным экземпляром конфигурации (постоянный идентификатор), и, таким образом, каждый пакет, которому требуется подключение к базе данных, Java JMS и т. Д., Должен повторять конфигурацию в каждом файле.

В настоящее время я использую Apache Servicemix 4, который использует Apache Felix в качестве контейнера OSGi.

1 Ответ

3 голосов
/ 08 декабря 2010

Я поделился своей конфигурацией, расположенной в

$SMX_HOME/etc/my.config.cfg

используя это объявление

<!-- 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" />

в каждой из моих связок. Выглядит очень похоже на ваше решение и работает отлично! Вы можете поделиться своей конфигурацией (не нужно указывать файл конфигурации для каждого пакета), но вы должны объявить ссылку на эту конфигурацию в каждом файле контекста Spring-Application.

Я использую FUSE 4.3 , основанный на apache-servicemix-4.3.0-fuse-01-00.

...