2013-02-26 2 views
2

Я столкнулся с проблемой во время разработки весны и приложения на основе OSGi. В моем приложении я хотел бы использовать профили Spring beans, однако я не знаю, как принудительно использовать определенный профиль. Я использовал один раз, весенние профили, но в веб-приложении, и я последовал этому руководству: http://java.dzone.com/articles/spring-31-environment-profiles.Профили с фасолью и OSGI

Но я не знаю, как сделать это в OSGi среды, потому что я не мог найти какой-то эквивалента ApplicationContextInitializer

ответ

2

Я не уверен, что если весна-де поддерживает, что, как его на основе старой весны. Весенние профили были добавлены к Spring 3.1, которая была создана долго после того, как весна-дм была мертвым проектом. http://www.springsource.org/osgi

0

Spring-DM, вероятно, не поддерживает более новые версии Spring, но Eclipse Gemini Blueprint делает. Если вы можете использовать Spring 3.1.x или выше и Blueprint, вы можете, вероятно, получить профили Spring. Одним из способов сделать это будет extend the Blueprint Extender bundle с вашей собственной реализацией OsgiApplicationContextCreator, которая настраивает активные профили Environment, как вы сочтете нужным. Например, рассмотрим следующий пользовательский BlueprintContainerCreator реализации:

public class MyOsgiApplicationContextCreator extends BlueprintContainerCreator { 
    @Override 
    public DelegatedExecutionOsgiBundleApplicationContext createApplicationContext(
     BundleContext bundleContext) throws Exception { 
    DelegatedExecutionOsgiBundleApplicationContext applicationContext = super 
     .createApplicationContext(bundleContext); 

    if (null == applicationContext) { 
     // non-spring/blueprint bundles will not build an ApplicationContext 
     return null; 
    } 

    // determine environment profile here... 
    applicationContext.getEnvironment().setActiveProfiles("myProfile"); 

    return applicationContext; 
    } 
} 

Вы должны были бы поместить это в пучок фрагмента, прикрепленного к калька расширитель пучка. Выполните следующие действия:

Вам необходимо создать пакет с тремя файлами в нем: META-INF/MANIFEST.MF, META-INF/spring/extender/extender.xml (файл xml можно назвать чем угодно с расширение xml, но должно быть в папке META-INF/spring/extender) и вашей реализации OsgiApplicationContextCreator. Ваш файл MANIFEST.MF должен содержать заголовок манифеста OSGi Фрагмент-хост org.eclipse.gemini.blueprint.extender. Если вы используете Maven-расслоением-плагин, конфигурация плагин будет выглядеть примерно так:

... 
<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
    <version>2.3.5</version> 
    <extensions>true</extensions> 
    <configuration> 
    <instructions> 
     <Fragment-Host>org.eclipse.gemini.blueprint.extender</Fragment-Host> 
     <Export-Package>your.package,!*</Export-Package> 
     <Import-Package>org.osgi.framework,org.springframework.core.env,!*</Import-Package> 
    </instructions> 
    </configuration> 
</plugin> 
... 

Ваш файл extender.xml нужно будет определить свой пользовательский OsgiApplicationContextCreator боб с именем applicationContextCreator. Файл может выглядеть так:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:util="http://www.springframework.org/schema/util" 
    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-3.0.xsd 
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> 
    <util:properties id="extenderProperties"> 
    <prop key="shutdown.wait.time">30000</prop> 
    </util:properties> 
    <bean id="applicationContextCreator" class="your.package.MyOsgiApplicationContextCreator"/> 
</beans> 

Затем разверните узел в вашу среду. Возможно, вам придется перезапустить пакеты OSGi Blueprint (или ваш сервер) в зависимости от того, какой набор этого фрагмента установлен в отношении пакетов Blueprint.

Смежные вопросы