2

OSGi春とベースのアプリケーションの開発中に問題に直面しました。私のアプリケーションでは、Spring プロファイルを使用したいと考えてbeansいますが、特定のプロファイルを強制的に使用する方法がわかりません。私は一度春のプロファイルを使用しましたが、Web アプリケーションでは、このチュートリアルに従いました: http://java.dzone.com/articles/spring-31-environment-profiles

しかし、OSGi環境でこれを行う方法がわかりません.ApplicationContextInitializer

4

2 に答える 2

2

古いSpringに基づいているため、spring-dmがそれをサポートしているかどうかはわかりません。Spring-dmが死んだプロジェクトであったずっと後に作成されたSpring3.1にSpringプロファイルが追加されました。 http://www.springsource.org/osgi

于 2013-02-27T07:20:56.727 に答える
0

Spring-DM はおそらく Spring の新しいバージョンをサポートしていませんが、Eclipse Gemini Blueprintはサポートしています。Spring 3.1.x 以降と Blueprint を使用できる場合は、おそらく Spring プロファイルを機能させることができます。これを行う 1 つの方法は、必要に応じてアクティブなプロファイルを構成するの独自の実装でBlueprint Extender バンドルを拡張することです。たとえば、次のカスタム実装について考えてみます。OsgiApplicationContextCreatorApplicationContext EnvironmentBlueprintContainerCreator

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 の 3 つのファイルを含むバンドルを作成する必要があります (xml ファイルには xml 拡張子が付いた名前を付けることができますが、 META-INF/spring/extender フォルダー)、およびOsgiApplicationContextCreator実装。MANIFEST.MF ファイルには、OSGi マニフェスト ヘッダー Fragment-Host of が含まれている必要があります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 を .xml という名前で定義する必要があります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>

次に、バンドルを環境にデプロイします。Blueprint バンドルに対してこのフラグメント バンドルをインストールする順序によっては、Blueprint OSGi バンドル (またはサーバー) を再起動する必要がある場合があります。

于 2013-03-05T06:35:30.977 に答える