SOAプラットフォーム
LiferayのwarファイルをJBossにセットアップされると分かりますが、Liferayには2つのjarファイルがあります。1つはLiferayが標準で提供するエンティティのインターフェース、もう一つはそのインターフェースの実装である。
インターフェース(service-api.jar)は他アプリケーション(他warファイル)からも利用できるようにアプリケーションサーバのlibディレクトリに配置される(tomcatの場合はlib\ext)
このインターフェースの実装はwarファイルroot下のweb-inf\libに配置されている。
このように実装とインターフェースを分離するjarファイルを分離することが重要です。Liferayで開発するポートレットもこのようにインターフェースと実装を分離します。このようにすることで他ポートレット(他warファイル)のインターフェースを利用することができます。また、インタフェースとは別に実装のもを置き換える(再デプロイ)することができます。
例えば投票用の機能を追加する場合は、以下のようなポートレットを作成します:
①一般ユーザが投票を行うポートレット
②候補者、選挙期間など情報の入力/編集するポートレット
③投票結果を集計して当選者を表示するポートレット
④Liferayが標準で提供するユーザ、組織、権限などの管理を行うポートレット
これらのポートレットはアプリケーションサーバ上では別々のwarファイルになります。
これらのポートレットは個別に責務となるエンティティがあります。例えば、投票するためにログインするすべてのユーザはLiferayが管理するので、「ユーザ」エンティティはLiferayが持ちます。選挙の説明や期間などの情報をもつ「選挙」エンティティは選挙ポートレットがもちます。「候補者」エンティティも選挙ポートレットに持たせます。
Liferayの場合は、昨日紹介したLiferay IDEを利用してこれらのエンティティ定義をポートレットプロジェクト毎のservice.xmlファイルで定義します。エンティティの属性は、画面などの項目などをモデリングします。エンティティの画面は以下のような関係をもちます。下の図のエンティティはservice.xmlのエンティティの他にjspから呼び出される業務エンティティも含みます。これらの業務エンティティはポートレットのローカルサービス及び他ポートレットのリモートサービスを組み立てて利用します。なお、公開されるサービス内からも他ローカル及びリモートサービスを組み立てたりして利用することもできます。
定義した後にサービスビルダ(antコマンド)を利用してインターフェースと実装の枠組みを生成します。
生成されなかったインターフェースをimplクラスに定義して再びサービスビルダを実行すると、それらのインターフェーイスはinterfaceに追加されます。
ポートレット間の実装は疎結合のため、迅速にポートレットに機能を追加したりすることができます。また、新しい要件に対応するポートレットを開発する場合でも、既存のポートレットの機能を利用することができます。
Liferayの場合は標準でユーザ、組織、権限、ワークフロー、ファイル管理、検索などの基盤ポートレットの他にも翻訳、天気、株価などのポートレットが用意されています。それらのポートレットは画面ページに張る付けるだけではなく、他ポートレットからも利用することができるのが特徴です。
このように開発した資産が、疎結合で利用できるのが本当のSOAです。