オルタナティブ・ブログ > 夜な夜な海外ネット >

海外技術の勝手なコメント及び海外技術者との交流情報

SOAプラットフォーム

»

LiferayのwarファイルをJBossにセットアップされると分かりますが、Liferayには2つのjarファイルがあります。1つはLiferayが標準で提供するエンティティのインターフェース、もう一つはそのインターフェースの実装である。

インターフェース(service-api.jar)は他アプリケーション(他warファイル)からも利用できるようにアプリケーションサーバのlibディレクトリに配置される(tomcatの場合はlib\ext)

Servletapi

このインターフェースの実装はwarファイルroot下のweb-inf\libに配置されている。

Portalimpl

このように実装とインターフェースを分離するjarファイルを分離することが重要です。Liferayで開発するポートレットもこのようにインターフェースと実装を分離します。このようにすることで他ポートレット(他warファイル)のインターフェースを利用することができます。また、インタフェースとは別に実装のもを置き換える(再デプロイ)することができます。

例えば投票用の機能を追加する場合は、以下のようなポートレットを作成します:

①一般ユーザが投票を行うポートレット

②候補者、選挙期間など情報の入力/編集するポートレット

③投票結果を集計して当選者を表示するポートレット

④Liferayが標準で提供するユーザ、組織、権限などの管理を行うポートレット

Serviceplatformarchitecture 

これらのポートレットはアプリケーションサーバ上では別々のwarファイルになります。

これらのポートレットは個別に責務となるエンティティがあります。例えば、投票するためにログインするすべてのユーザはLiferayが管理するので、「ユーザ」エンティティはLiferayが持ちます。選挙の説明や期間などの情報をもつ「選挙」エンティティは選挙ポートレットがもちます。「候補者」エンティティも選挙ポートレットに持たせます。

Liferayの場合は、昨日紹介したLiferay IDEを利用してこれらのエンティティ定義をポートレットプロジェクト毎のservice.xmlファイルで定義します。エンティティの属性は、画面などの項目などをモデリングします。エンティティの画面は以下のような関係をもちます。下の図のエンティティはservice.xmlのエンティティの他にjspから呼び出される業務エンティティも含みます。これらの業務エンティティはポートレットのローカルサービス及び他ポートレットのリモートサービスを組み立てて利用します。なお、公開されるサービス内からも他ローカル及びリモートサービスを組み立てたりして利用することもできます。

Softwarediagram

定義した後にサービスビルダ(antコマンド)を利用してインターフェースと実装の枠組みを生成します。

Impl Model_2

生成されなかったインターフェースをimplクラスに定義して再びサービスビルダを実行すると、それらのインターフェーイスはinterfaceに追加されます。

ポートレット間の実装は疎結合のため、迅速にポートレットに機能を追加したりすることができます。また、新しい要件に対応するポートレットを開発する場合でも、既存のポートレットの機能を利用することができます。

Liferayの場合は標準でユーザ、組織、権限、ワークフロー、ファイル管理、検索などの基盤ポートレットの他にも翻訳、天気、株価などのポートレットが用意されています。それらのポートレットは画面ページに張る付けるだけではなく、他ポートレットからも利用することができるのが特徴です。

このように開発した資産が、疎結合で利用できるのが本当のSOAです。

Comment(0)