WARのデプロイ(WABジェネレータ)
アプリケーションは、Java EEスタイルのWebアプリケーションARchive(WAR)アーティファクトまたはJava ARchive(JAR)OSGiバンドルアーティファクトとして作成できます。 Beanポートレット、PortletMVC4Springポートレット、およびJSFポートレットは、フレームワークがWARレイアウトを想定し、WEB-INF/web.xml記述子などのJava EEリソースを必要とするため、WARとしてパッケージ化する必要があります
Liferayは、これらのWARスタイルのプラグインをLiferayのOSGiランタイムによってOSGiモジュールのようにデプロイおよび処理する方法を提供します。 これらは WABに変換できます。
Liferay DXPは、Java EEスタイルWARの展開のためのOSGi Web Application Bundle(WAB)標準をサポートしています。 WABは、WARレイアウトを持ち、Bundle-SymbolicName OSGiディレクティブを含むMETA-INF/MANIFEST.MFファイルを含むアーカイブです。 WABはOSGiバンドルです。 プロジェクトソースにはWARレイアウトがありますが、アーティファクトファイル名は拡張子.jarまたは.warで終わる場合があります。
WABジェネレータがWARを変換する方法
Liferayは、WABジェネレータによって自動生成されたWABの使用のみをサポートしています。 WABジェネレータは、デプロイメント中に従来のWARスタイルのプラグインをWABに変換します。 では、WABジェネレータは具体的にどのようにWARファイルをWABに変換するするのでしょうか。
WABジェネレータは、プラグインWARのJSP、記述子ファイル、およびクラス(WEB-INF/classes内および埋め込みJAR内)で参照されるパッケージを検出します。 記述子ファイルには、web.xml、liferay-web.xml、portlet.xml、liferay-portlet.xml、およびliferay-hook.xmlがあります。 WAB ジェネレータは、検出されたパッケージがプラグインのWEB-INF/classes 内フォルダにあるかどうか、またはWEB-INF/libフォルダ内にある埋め込みJARにあるかどうかを検証します。 どちらの場所でも見つからないパッケージは、WABのMETA-INF/MANIFEST.MFファイル内のImport-Package OSGiヘッダーに追加されます。
以下のタイプの場所でのみ参照されるパッケージをインポートするには、Import-Package OSGiヘッダーをプラグインのWEB-INF/liferay-plugin-package.propertiesファイルに追加し、そのヘッダーの値のリストにパッケージを追加する必要があります。
- 認識されない記述子ファイル
- カスタムまたは認識されない記述子要素または属性
- リフレクションコード
- クラスローダーコード
WARとWABのストラクチャー比較
WABフォルダストラクチャーとWARフォルダストラクチャーには違いがあります。 WARスタイルのポートレットの次のフォルダストラクチャーについて考えてみます。
WAR
my-war-portletsrcmainjavawebappWEB-INFclasseslibresourcesviewsliferay-display.xmlliferay-plugin-package.propertiesliferay-portlet.xmlportlet.xmlweb.xml
WARスタイルのポートレットがLiferayにデプロイされ、WABジェネレータによって処理されると、ポートレットのフォルダストラクチャーが変換されます。
WAB
my-war-portlet-that-is-now-a-wabMETA-INFMANIFEST.MF
WEB-INFclasseslibresourcesviewsliferay-display.xmlliferay-plugin-package.propertiesliferay-portlet.xmlportlet.xmlweb.xml
主な違いは、META-INF/MANIFEST.MFファイルの追加です。 WABジェネレータは、OSGi対応のマニフェストファイルを自動的に生成します。 マニフェストファイルの内容に影響を与えるようにしたい場合は、プラグインのliferay-plugin-package.propertiesファイルにBndディレクティブとOSGiヘッダを直接配置することができます。
生成された WAB では、手動で追加された bnd.bnd ファイルまたはビルド時プラグイン (例: bnd-maven-plugin) は使用できません。
WARのデプロイ
WAR プラグインに基づいて WAB をデプロイするには、WAR プラグインを Liferay インスタンスの deploy/ フォルダ( [Liferay Home]内)にコピーします。 WAB は、 module.framework.war.dir プロパティによって決定されたディレクトリ (デフォルトではosgi/war ) に作成されます。
生成されたWABを保存する
必要に応じて、WABをローカルフォルダに保存します。 これにより、生成されたWABを確認することができます。 生成された WAB を保存するには、次の ポータル プロパティ を [Liferay Home]/portal-ext.properties ファイルに追加します。 その後、Liferayサーバーを再起動します。
module.framework.web.generator.generated.wabs.store=true
module.framework.web.generator.generated.wabs.store.dir=${module.framework.base.dir}/wabs
これらのプロパティは、WABジェネレータに生成されたWABをインストールのosgi/wabs/フォルダに保存するように指示します。 生成されたWABは、上記のWABストラクチャーの例と同じ構造になっています。 詳細については、 モジュール フレームワーク Web アプリケーション バンドル プロパティ セクションで説明します。
WABの破壊
Liferay は、ポータルまたは OSGi フレームワークがシャットダウンされると、すべての WAB を自動的に破棄します。
デプロイされていない WAB を破棄するには、 deploy/ フォルダー内のファイルを削除します。 問題を回避するために、Liferay は WAB がデプロイされている場合、それを破棄するまで 60 秒間待機します。 このタイムアウトは、 コントロール パネル → 構成 → システム設定 → モジュール コンテナー → WAB エクステンダーで変更できます。 タイムアウトをミリ秒単位で設定します(例: 120000)。
すでにデプロイされている WAB を破棄するには、Liferay インスタンスが WAR を保存しているフォルダ内のファイルを削除します (これは module.framework.war.dir プロパティによって設定されます)。