AEMでは、文字列の一覧を構成し、複数のサービスに渡って共有する必要があります。これを達成する最良の方法は何ですか?リストは、実行時に構成可能である必要があります。AEMで複数のOSGIサービス間で構成を共有する方法
答えて
構成する専用の構成サービスを作成し、構成された値の1つ以上を必要とする他のすべてのOSGiサービスによって参照される構成サービスを作成できます。
構成例サービス
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.osgi.service.component.ComponentContext;
@Service(ConfigurationService.class)
@Component(immediate = true, metatype = true)
public class ConfigurationService {
@Property
private static final String CONF_VALUE1 = "configuration.value1";
private String value1;
@Property
private static final String CONF_VALUE2 = "configuration.value2";
private String value2;
@Activate
public void activate(final ComponentContext componentContext) {
this.value1 = PropertiesUtil.toString(componentContext.get(CONF_VALUE1), "");
this.value2 = PropertiesUtil.toString(componentContext.get(CONF_VALUE2), "");
}
public String getValue1() {
return this.value1;
}
public String getValue2() {
return this.value2;
}
}
これはそのようなクラスの最低限です。しかし、Apache Felix Configuration Manager(/system/console/configMgr
)で設定可能な設定可能なOSGiサービスが作成されます。
注:@Component
注釈ではmetatype = true
を使用することが重要です。
次のステップは、このサービスを「消費」サービスで参照することです。
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
@Service(MyService.class)
@Component(immediate = true, metatype = true)
public class MyService {
@Reference
private ConfigurationService configurationService;
@Activate
public void activate(final ComponentContext componentContext) {
this.configurationService.getValue1();
}
}
注:この例では、AEMとともに使用できるApache SCR注釈を使用しています。あなたは公式ドキュメントでSCRのこの例で使用する注釈(@Service
、@Component
、@Property
、@Reference
)についての詳細を学ぶことができます。Apache Felix SCR Annotation Documentation
かなりきちんとした説明。しかし、私たちはここでインターフェイスを使うべきではありませんか?クラス内で実装し、インターフェイスをサービスとして宣言することです。それは十分安全だと思われる。 – theanubhava
@theanubhava私が本文で指摘したように:これは最低限です。明らかにここで改善できることがたくさんあります。簡潔にするために、私は基本原理を実証するための最短の例を選んだ。通常、インタフェースを使用し、 'api'や' impl'バンドルなどで分割します。 – Jens
- 1. 複数のサービス(複数のスレッドを持つ各サービス)間でログファイルを共有する方法は?
- 2. 複数のGrailsアプリケーション間でデータアクセスレイヤ(サービスとドメインクラス)を共有する方法
- 3. 複数のビュー/ XIB間で変数を共有する方法
- 4. 複数のアンギュラ・モジュール間でサービスを共有する
- 5. 複数のアクティビティ間でデータを共有する方法は?
- 6. Kaldi - 複数のデコーダ間でランゲージモデルを共有する方法は?
- 7. 複数のコントローラ間で$ scopeオブジェクトを共有する方法
- 8. 複数のEmberプロジェクト間でコンポーネントを共有する方法
- 9. WatchConnectivity複数のWKInterfaceController間でセッションを共有する方法は?
- 10. RSpec変数を共有コンテキスト間で共有する方法は?
- 11. AEM 6.2でページとコンポーネント間でデータを共有する方法は?
- 12. 複数のangular.jsアプリ間で1つのサービスを共有
- 13. 複数のプロセス間で複数の辞書を共有する方法
- 14. 複数のプロジェクト間で共通のファイルを共有する方法
- 15. ノード内のサービス間でデータを共有する方法
- 16. JBossとEclipse RCPの間でOSGiバンドルを共有する方法は?
- 17. 複数のDockerコンテナ間で構成データとボリュームを共有する最善の方法
- 18. サービス間でデータを共有
- 19. 複数のサービスを複数回起動することなく、コントローラ間でangularjsのサービスを共有する
- 20. 複数のアプリケーション間でデータベースを共有
- 21. 複数のサイト間でユーザーアカウントを共有
- 22. 複数のWKWebView間でセッションを共有
- 23. 複数のイオンプロジェクト間でノードモジュールを共有
- 24. 複数のアプリケーションインスタンス間でメモリを共有
- 25. 複数のスレッドでOSGI EventAdminハンドルイベントを作成する方法
- 26. lifestayで複数のJSPページ間でオブジェクトを共有する方法は?
- 27. WCF:複数のサービス間でキャッシュされたデータを共有する
- 28. 複数のnpmリポジトリに共有package.jsonを作成する方法
- 29. 複数のUIViewControllersの間で1つのストーリーボードシーンを共有する方法
- 30. iOSの複数のプロジェクト間でコードを共有する最良の方法
あなたはこれを見たことがありますか? http://www.nateyolles.com/blog/2015/10/updating-osgi-configurations-in-aem-and-sling OSGI構成を読み込むためのOSGIサービス。 –