2

我在开发 spring 和OSGi基于应用程序的过程中遇到了一个问题。在我的应用程序中,我想使用 Springbeans配置文件,但是我不知道如何强制使用特定的配置文件。我曾经使用过一次弹簧配置文件,但在 Web 应用程序中,我遵循了本教程:http: //java.dzone.com/articles/spring-31-environment-profiles

但我不知道如何在 OSGi 环境中执行此操作,因为我找不到类似的ApplicationContextInitializer

4

2 回答 2

2

我不确定 spring-dm 是否支持它,因为它基于旧的 Spring。Spring 配置文件被添加到 Spring 3.1,它是在 spring-dm 是一个死项目之后很久才创建的。 http://www.springsource.org/osgi

于 2013-02-27T07:20:56.727 回答
0

Spring-DM 可能不支持更新版本的 Spring,但Eclipse Gemini Blueprint支持。如果您可以使用 Spring 3.1.x 或更高版本和 Blueprint,您可能可以让 Spring 配置文件正常工作。一种方法是使用您自己的实现来扩展 Blueprint Extender 捆绑包,根据您认为合适的OsgiApplicationContextCreator方式配置活动配置文件。ApplicationContext 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 清单标头 Fragment-Host 的org.eclipse.gemini.blueprint.extender. 如果您使用的是 maven-bundle-plugin,您的插件配置将如下所示:

...
<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 文件将需要定义您的自定义OsgiApplicationContextCreatorbean,其名称为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 包(或您的服务器),具体取决于此片段包相对于蓝图包的安装顺序。

于 2013-03-05T06:35:30.977 回答