以前のService Builderプラグインのアップグレードプロセス
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
Service Builderサービスを実装する従来のLiferayプラグインアプリケーションをモジュール化した場合、新しいモジュール式アプリケーションはLiferay DXPの Release_
テーブルに登録する必要があります。 これは、アプリの以前のバージョンのリリースレコードが既に存在するかどうかに関係なく必要です。 Bundle Activatorは、変換されたアプリケーションの最初のモジュラーバージョンのリリースレコードを追加するための推奨される方法です。 ここでは、Bundle Activatorの例を参照し、アプリケーションのBundle Activatorを作成してアクティブにする方法を学習します。
重要:このチュートリアルは、Service Builderを使用し、従来のLiferayプラグインアプリケーションからモジュール化されたモジュラーアプリケーションにのみ適用されます。 アプリケーションでService Builderを使用していない場合、または従来のLiferayプラグインアプリケーション(WARアプリケーション)であったことがない場合は、適用されません。
Bundle Activatorクラスコードは高密度ですが、簡単です。 Bundle Activatorの例を参照すると役立ちます。 LiferayナレッジベースアプリケーションのBundle Activatorは次のとおりです。
public class KnowledgeBaseServiceBundleActivator implements BundleActivator {
@Override
public void start(BundleContext bundleContext) throws Exception {
Filter filter = bundleContext.createFilter(
StringBundler.concat(
"(&(objectClass=", ModuleServiceLifecycle.class.getName(), ")",
ModuleServiceLifecycle.DATABASE_INITIALIZED, ")"));
_serviceTracker = new ServiceTracker<Object, Object>(
bundleContext, filter, null) {
@Override
public Object addingService(
ServiceReference<Object> serviceReference) {
try {
BaseUpgradeServiceModuleRelease
upgradeServiceModuleRelease =
new BaseUpgradeServiceModuleRelease() {
@Override
protected String getNamespace() {
return "KB";
}
@Override
protected String getNewBundleSymbolicName() {
return "com.liferay.knowledge.base.service";
}
@Override
protected String getOldBundleSymbolicName() {
return "knowledge-base-portlet";
}
};
upgradeServiceModuleRelease.upgrade();
return null;
}
catch (UpgradeException ue) {
throw new RuntimeException(ue);
}
}
};
_serviceTracker.open();
}
@Override
public void stop(BundleContext bundleContext) throws Exception {
_serviceTracker.close();
}
private ServiceTracker<Object, Object> _serviceTracker;
}
次の手順では、上記の例のように、バンドルアクティベーターを作成する方法を説明します。
-
インターフェース
org.osgi.framework.BundleActivator
を実装するクラスを作成します。 -
サービストラッカーフィールドを追加します。
private ServiceTracker<Object, Object> _serviceTracker;
-
BundleActivatorの
stop
メソッドをオーバーライドして、サービストラッカーを閉じます。@Override public void stop(BundleContext bundleContext) throws Exception { _serviceTracker.close(); }
-
BundleActivatorの
start
メソッドをオーバーライドして、アプリのデータベース初期化イベントをリッスンするフィルターを作成し、そのフィルターを使用するようにサービストラッカーを初期化するサービストラッカーをインスタンス化します。 次の手順で、サービストラッカーの初期化コードを追加します。start
メソッドの最後に、サービストラッカーを開きます。@Override public void start(BundleContext bundleContext) throws Exception { Filter filter = bundleContext.createFilter( StringBundler.concat( "(&(objectClass=", ModuleServiceLifecycle.class.getName(), ")", ModuleServiceLifecycle.DATABASE_INITIALIZED, ")")); _serviceTracker = new ServiceTracker<Object, Object>( bundleContext, filter, null) { // See the next step for this code ... }; _serviceTracker.open(); }
-
サービストラッカーの初期化ブロック
{//このコードの次のステップを参照してください... }
前のステップから、追加addingService
インスタンスメソッドBaseUpgradeServiceModuleRelease
アプリを記述するために。次の例BaseUpgradeServiceModuleRelease
インスタンスは、Liferayのナレッジベースアプリについて説明しています。@Override public Object addingService( ServiceReference<Object> serviceReference) { try { BaseUpgradeServiceModuleRelease upgradeServiceModuleRelease = new BaseUpgradeServiceModuleRelease() { @Override protected String getNamespace() { return "KB"; } @Override protected String getNewBundleSymbolicName() { return "com.liferay.knowledge.base.service"; } @Override protected String getOldBundleSymbolicName() { return "knowledge-base-portlet"; } }; upgradeServiceModuleRelease.upgrade(); return null; } catch (UpgradeException ue) { throw new RuntimeException(ue); } }
BaseUpgradeServiceModuleRelease
は、次のメソッドを実装します。getNamespace
:以前のプラグインのservice.xml
ファイルで指定された名前空間値を返します。 この値は、プラグインのServiceComponent
テーブルレコードのbuildNamespace
フィールドにもあります。getOldBundleSymbolicName
:以前のプラグインの名前を返します。getNewBundleSymbolicName
:モジュールのシンボル名を返します。 モジュールのbnd.bnd
ファイルでは、Bundle-SymbolicName
値です。upgrade
:アプリのアップグレードプロセスを呼び出します。
-
モジュールの
bnd.bnd
ファイルで、作成したBundle Activatorクラスを参照します。 以下は、サンプルのBundle Activatorリファレンスです。Bundle-Activator: com.liferay.knowledge.base.internal.activator.KnowledgeBaseServiceBundleActivator
Bundle Activatorは、次の値のいずれかを使用して、アプリケーションの Release_
テーブルレコードの schemaVersion
フィールドを初期化します。
- 現在の
buildNumber
:以前のプラグインの既存のRelease_
テーブルレコードがある場合。 0.0.1
:既存のRelease_
テーブルレコードがない場合。
サービスモジュールのデータアップグレードプロセスを設定しました。