SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Java Enterprise Portalとポートレット開発の紹介

企業ポータルサーバとオープンソースポータルの両面から解説

ダウンロード サンプルソース (47.4 KB)

 次に、ポートレット用のコントローラ、ビュー、ハンドラとして機能するJavaソースコードを記述します。ビューはJSPページ、コントローラとハンドラはJavaクラスです。これらのサンプルについては、本稿のダウンロード可能なソースコードを参照ください。その中には、本稿のポートレットスケルトンプロジェクトがあります。

 コントローラは、ハンドラクラスを利用することにより、Webサービス、データベース、またはフィードなどのデータソースからデータを取得します。コマンドパターンによって、このデータをビューへと引き渡す機構を実装できます。ユーザーのポートレットセッション全体を通して、情報の送受にはcommandObjectを使用します。

 例えば、データを取得し、それをビューレイヤーに返すためのポートレットAPIのメソッドのスケルトンコードは、次のようになります。

@Override
protected ModelAndView handleRenderRequestInternal(
   RenderRequest request, RenderResponse response) throws Exception
{      
   logger.info ("Inside Controller handleRenderRequestInternal");
   Map<String, CommandObject> model = new
     HashMap<String, CommandObject>();
   CommandObject commandObject =
     (CommandObject)request.getPortletSession().getAttribute(
     CommandObject.COMMAND_NAME,PortletSession.APPLICATION_SCOPE);
   if (commandObject == null){
      commandObject = new CommandObject();
   }

   // logic to get the data and put it in the commandObject
   // should be here...

   String view = getFormView();
   model.put("commandObject", commandObject);
   ModelAndView mav = new ModelAndView(view, model);
   return mav;  
}
@Override
public void onSubmitAction (final ActionRequest request,
  final ActionResponse response, final Object command,
  final BindException bindException) throws Exception
{
   logger.info ("Inside onSubmitAction");
   // Set the form bean into session so that it will be available
   CommandObject commandObject = (CommandObject)command;
   logger.info("Command Object :"+ToStringBuilder.reflectionToString(
      commandObject));
   request.getPortletSession ().setAttribute ("command_obj",
      command,PortletSession.APPLICATION_SCOPE);
}

 JSPからは、以下のようにしてデータを取得できます。

<form:form action="${formAction}" name="quickProcess"
   method="post" commandName="commandObject">
  <form:hidden path="p" id="p" />
  <c:if test="${commandObject.someList != null}">
    <c:forEach items="${commandObject.someList}"
      var="listItem" varStatus="loop">
      <c:out value="${listItem.name}"/><br>
    </c:forEach>
  </c:if>
</form:form>

 ポートレットは、それを画面上にレイアウトする方法、リサイズの可否、高さや幅を指定しないことに注意してください。これらの外部的な属性はすべて、ポートレットコンテナが制御します。

 ポートレットプロジェクトを動作させるには、それをビルドしデプロイする必要があります。ビルドでは、Javaの標準的なwarファイルを(通常はAntまたはMavenを使用して)作成します。デプロイでは、warファイルをアプリケーションサーバに配置します。このアプリケーションサーバでは、ポートレットコンテナアプリケーションも稼働しています。ポートレットがポートレットコンテナに登録されるときには、どのようなポートレットが存在し、何という名前なのかを調べるためにportlet.xmlファイルが参照されます。例えばVignette Portalサーバで新しいポートレットを作成するには、目的のポートレットを検索してサイトに追加します(図6と図7参照)。

図6 Vignetteにおけるポートレットの追加:Vignette Portalサーバでは、ポートレットをリスト表示し、追加できる
図6 Vignetteにおけるポートレットの追加:Vignette Portalサーバでは、ポートレットをリスト表示し、追加できる
図7 Vignetteにおけるポートレットの検索:サイトに追加するポートレットを検索することもできる
図7 Vignetteにおけるポートレットの検索:サイトに追加するポートレットを検索することもできる

 ポートレットをポートレットコンテナに追加したら、(プラットフォームによっては)その配置、レイアウト、属性を設定できます。例えば、デフォルトの幅と位置を設定したり、ポートレットの最小化や移動ができないように指定したりできます。

 図8に、3つの設定済みポートレットからなるVignetteのページ例を示します。これが、ユーザーがポータルにログインしたときに使用されるデフォルトの配置となります。

図8 Vignetteにおけるポートレットのレイアウト設定:Vignetteにおいてポートレットのレイアウトを設定できる管理ページ
図8 Vignetteにおけるポートレットのレイアウト設定:Vignetteにおいてポートレットのレイアウトを設定できる管理ページ

 図9は、eXo JBossポートレットコンテナで選択できるデフォルトレイアウトを示したものです。もちろん、これ以外のレイアウトも可能ですが、ほんの数回のマウスクリックですぐに使用できるページグリッドレイアウトがあるのは便利です。

図9 デフォルトのレイアウト:eXo JBossポートレットコンテナでは、いくつかのデフォルトのレイアウトの中から選択できる
図9 デフォルトのレイアウト:eXo JBossポートレットコンテナでは、いくつかのデフォルトのレイアウトの中から選択できる

 最新のポートレットコンテナでは、ポータルサイトのルック&フィールの変更を容易にするために、ポートレットのレイアウト、スキン、UIスキームなどを便利な管理ダッシュボードからまとめて変更できるようになっています。

 以上、Webポータルおよびポートレットコンテナの動作の基本と、最新のJava仕様およびデプロイメント手法を用いたポートレットの開発例を示しました。具体的な仕様の策定により、Web開発分野において、オープンソースと商用ベンダーの両方によるポートレットコンテナが普及しました。それによって、JavaのWeb開発者は、ポートレットコードを再利用し、ビジネスロジックに専念し、ポータルコードをそれほど記述しなくてもそのまま使用できる堅牢な機能をエンドユーザー向けに提供できるようになりました。今後数年間で、Javaポータルの分野にどのような新しい進展が見られるかは、興味深いところです。より詳細な情報については、以下の参考サイトを参照ください。

参考サイト

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Vlad Kofman(Vlad Kofman)

ウォールストリート有数の企業でエンタープライズレベルのプロジェクトに携わる。また、米国政府の防衛関連の仕事も手がけている。特に関心を寄せているのは、オブジェクト指向プログラミング方法論、UI、デザインパターン。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4719 2010/01/13 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー