Apache Geronimo で Apache Pluto ポータル・アプリケーションを開発し、デプロイする

Geronimo で Pluto ポータル・サーバーを設定し、使用する方法を学ぶ

Apache Geronimo の機能セットにはあらかじめポータル・サーバーが統合されてはいませんが、Geronimo をポータル・アプリケーションのテストと開発用の環境として使うことができます。この記事では、ApachePluto のドライバーとコンテナーを Geronimo にデプロイする手順をステップごとに追いながら、ポータル・アプリケーションのための 100%オープンソースの環境を実現します。そして Pluto と Geronimo で、サンプルのポータル・アプリケーションを開発し、デプロイし、テストするための方法を学びます。

Rakesh Midha, Software Engineer, IBM Software Labs, Bangalore

Rakesh MidhaRakesh Midha はバンガロールにある IBM Software Labs のソフトウェア・アーキテクトであり、現在は IBM 内部のオープンソース活動に従事しています。彼は 8 年間の技術経験として、Java や C++ によるサーバー・サイドのプログラミングを、数多くのプラットフォームやさまざまなリレーショナル・データベース・システム (IBM DB2® Universal Database™ や Oracle、MySQL、Microsoft SQL Server など) で行ってきました。彼はいくつかの J2EE アプリケーションや、製品アーキテクチャー開発、実装に携わっています。DB2 に関連する IBM レッドブックを 2 冊執筆しており、また IBM developerWorks に頻繁に寄稿しています。彼は 2006年8月にスリランカのコロンボで開催された ApacheCon Asia の「Inside Apache Geronimo 1.1 -- What makes it special?」という題のセッションで講演を行いました。彼はインドの Chandigarh にある Punjab University で電子工学の学位を取得しています。



2007年 4月 10日

Apache Pluto と Apache Geronimo の簡単な紹介

Apache Pluto は、JSR 168 (Java™ Portlet Specification) の基準実装です。Plutoは、JSR 168 で指定されるコンテナー・インターフェースを基本的かつ軽量に実装しており、また標準ポートレットを開発するためのユーティリティーを持つポータル・ドライバーを提供しています。Plutoはポートレット API を実装する基本的なポートレット・コンテナーとして動作し、ポートレットをホストするための、実際に動作するサンプル・プラットフォームを提供します。Plutoの単純なポータル・コンポーネントは、ポートレット・コンテナーの、そして JSR 168 の要件のみに基づいて構築されています。

Apache Geronimo 1.1 はオープンソースで J2EE (Java 2 Platform, Enterprise Edition)1.4 で認証されたアプリケーション・サーバーです。Geronimo は他のJ2EE アプリケーション・サーバーとは異なり、外部リソース・コンポーネント(データベースやメッセージング・サーバー、そしてディレクトリー・サーバーなど) が初めから統合されています。そして、高度なカスタマイズが可能なモジュール構造のアーキテクチャーの上に構築されています。Geronimoは、既存のコンポーネントをサポートするフレームワークとして動作し、30 を超えるえり抜きのオープンソース・プロジェクトで構成される、完全な J2EEアプリケーション・サーバー・パッケージです。Geronimo には Apache Tomcat あるいは Apache Jetty が初めから統合されています。この記事ではTomcat バージョンの Geronimo を使います。

Apache Pluto は J2EE 標準に基づいて構築された Web アプリケーションですが、そのまま直接デプロイすることはできません。また、どのようなPluto ポータル・アプリケーションを作成した場合も、それを Pluto ポータル・コンテナーに直接インストールすることはできません。通常、Plutoは Apache Tomcat Web コンテナーにデプロイされますが、それが唯一の方法ではありません。Geronimo は Pluto アプリケーションをホストすることもできるのです。この記事では、Geronimoで Pluto ポータル・サーバーを使うことによって、よく使われていてかつ機能豊富なアプリケーション・サーバーを背後に持つポータル・アプリケーションのための、そして完全にオープン・ソースの、テストとデプロイメントの環境を実現する方法について説明します。

ポータルとポートレット、そして API

ポータルは、インターネットあるいはイントラネット上の情報やアプリケーションへの入口となる Web サイトです。ポータルには通常、パーソナライズやシングル・サイオンオン、複数ソースからのコンテンツ・アグリゲーション、情報システムのプレゼンテーション・レイヤーのホスティングなどの機能があります。ポータル・サーバーは、さまざまなコンテンツのアグリゲーションや表示に対応するために、さまざまなポータル・コンポーネントをポートレットに分解するフレームワークを提供します。

ポートレットは、特定のサービスあるいは情報を提供する、ポータル内のウィンドウです。ポートレットはソース (Web サイトやデータベース、E メール・サーバーなど)からコンテンツへのアクセスと、クライアントがそのコンテンツを描画できるようにコンテンツの変換を行います。JSR 168 はポートレットを作成するための標準API です。また JSR 168 はアプリケーションとポータルとを統合するコンポーネントを提供しており、JSR 168 によってアプリケーションがポータルを通じて提供されます。この標準がないと、各アプリケーションには独自のポートレットAPI が必要になります。

Geronimo に Web アプリケーションをデプロイし、実行するための手順は、Tomcat での手順とは異なります。この記事のこれから先では、Geronimo上にホストされる Pluto のポータル・アプリケーションのサンプルをデプロイして実行するための方法を、次のステップに従って説明します。

  1. Pluto のライブラリーとプロパティーを sharedlib モジュールを使って共有する
  2. Pluto のコンテナーとドライバーのための Geronimo デプロイメント・プランを作成する
  3. Geronimo に Pluto をデプロイする
  4. サンプルのポータル・アプリケーションを作成する
  5. サンプルのポータル・アプリケーションに必要なデプロイメント・プランを作成する
  6. サンプルのポータル・アプリケーションを Geronimo にデプロイし、テストする

最初に、Geronimo と Pluto の両方をダウンロードしてインストールし、そして解凍します (「参考文献」のセクションにダウンロードへのリンクがあります)。ここでは Geronimo をインストールするディレクトリーを GERONIMO_HOMEと呼ぶことにします。Pluto は、ソース・ディストリビューションとしてダウンロードすることも、バイナリー・ディストリビューションとしてダウンロードすることもできます。Plutoのインストール・ガイドによると、「ソース・ディストリビューションのインストールには非常に多くの作業が必要なため、コンテナーを変更しようとする人のみが使用するよう推奨します」とのことです。ここではダウンロードされたバイナリー・ディストリビューションの場所をPLUTO_HOME と呼び、ソースの場所を PLUTO_SRC と呼ぶことにします (私が PLUTO_HOME でのファイル位置を指す場合、それと同じファイルがソース・ディストリビューションをビルドした場合でも見つかるはずです)。


Pluto のライブラリーとプロパティーを共有する

Tomcat では、Pluto はポータル・アプリケーションを Pluto コンテナー Web アプリケーションの一部としてデプロイします。この方法はGeronimo には使えません。新しいアプリケーションをデプロイするということは、新しい Web アプリケーションと Geronimo のデプロイメント・プランを作成することを意味します。しかし、アプリケーションがデプロイされた後に、デプロイメント・プランとデプロイメント構成を動的に更新する方法はありません。この問題を回避する1 つの方法として、すべてのポータル・アプリケーションを外部アプリケーションとしてデプロイし、そして Pluto で、新しいポータル・アプリケーションを外部アプリケーションにリダイレクトするように構成するという方法があります。この構成作業には、Plutoのレジストリーにポートレットとポータルを定義することが含まれます。こうすると最初の問題は解決できますが、新しい問題がいくつも出てきます。

1 つ大きな問題は、アプリケーションが別々にデプロイされるため、それぞれが別のクラス・ローダーを使うことです。これはつまり、ポートレット APIクラスと Pluto コンテナー・クラス、そして共通サービス・クラスが、Pluto アプリケーション用のクラス・ローダーと他のポータル・アプリケーション用のクラス・ローダーで別々にロードされ、その結果数多くのClassNotFoundExceptions が投げられることを意味します。

この問題を解決するためには、Pluto のすべての共通ファイルを同じクラス・ローダーでロードする必要があります。そのためには、Geronimo1.1 の sharedlib と呼ばれるサービスを使います。このサービスを使うと、共通のクラス・ファイルとライブラリーを共有フォルダーに保存することができます。これらの共通ファイルを使おうとするアプリケーションは、sharedlib サービスに依存するように構成される必要があります。

Pluto で sharedlib を使うためには、PLUTO_HOME\webapps\pluto\WEB-INF\classes から GERONIMO_HOME\var\shared\classesフォルダーに下記のファイルをコピーします。

  • pluto-admin.properties
  • castor.properties
  • logging.properties

そして PLUTO_HOME\shared\lib フォルダーと PLUTO_HOME\webapps\pluto\WEB-INF\lib フォルダーからGERONIMO_HOME\var\shared\lib フォルダーに下記のファイルをコピーします。

  • pluto-1.0.1.jar
  • pluto-deploy-1.0.1.jar
  • pluto-descriptors-1.0.1.jar
  • pluto-portal-1.0.1.jar
  • portlet-api-1.0.jar
  • castor-0.9.5.3.jar
  • commons-fileupload-1.1.jar
  • commons-io-1.1.jar

Geronimo サーバーが起動する時に geronimo/sharedlib/1.1.1/car サービスが起動していることを確認します。


Pluto の Geronimo デプロイメント・プランを作成する

Geronimo 上のすべてのアプリケーションは、外部リソース参照 (セキュリティーの構成や依存関係の側面など) を使用する場合には Geronimoデプロイメント・プランを必要とします。先ほど学んだように、Pluto のコンテナー・アプリケーションとドライバー・アプリケーションは、sharedlib サービスとの依存関係を保って Geronimo にデプロイされる必要があります。Pluto のコンテナー・アプリケーションとドライバー・アプリケーション、そしてPluto のサーバー・アプリケーションは Web アプリケーションです。つまり、そうしたアプリケーションのデプロイメント・プランは GeronimoWeb デプロイメント・プランということです。

Geronimo のデプロイメント・プランは J2EE デプロイメント記述子とおおよそ似ています。違いは、Geronimo のデプロイメント・プランにサーバー専用の情報が含まれていることです。リスト1 は、一般的に使われる Pluto サーバー・アプリケーションの Geronimo Web デプロイメント・プランを示しています。

リスト 1. Geronimo の Pluto デプロイメント・プラン (geronimo-web-pluto.xml)
<?xml version="1.0"?> 
<web-app xmlns="http://geronimo.apache.org/xml/ns/web" 
  xmlns:naming="http://geronimo.apache.org/xml/ns/naming"
  xmlns:tomcat="http://geronimo.apache.org/xml/ns/web/tomcat/config-1.0"
  xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1">
  
<sys:environment>
  <dependencies>
    <dependency>
      <artifactId>sharedlib</artifactId>
    </dependency>
  </dependencies>
</sys:environment>

<security-realm-name>pluto-properties-file-realm</security-realm-name>

<security>
  <default-principal realm-name="pluto-properties-file-realm">
    <principal class=
       "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal" name="user"/>
  </default-principal>
  <role-mappings>
    <role role-name="tomcat">
      <realm realm-name="pluto-properties-file-realm">
        <principal class=
          "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal" 
          name="admin"/>
        <principal class=
          "org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" 
          name="system"/>
      </realm>
    </role>
  </role-mappings>
</security>
   
<tomcat:cross-context/>
</web-app>

リスト 1 のデプロイメント・プランを見ると、次の 3 つの主な構成要素があることがわかります。

  • 依存関係:<dependency> 要素は、他のモジュールやアプリケーション、サービスなどに対する Web アプリケーションの依存関係を指定するために使われます。また <dependency> 要素は、Geronimo のリポジトリーの中にあるサード・パーティー・ライブラリーに対する依存関係も表します。リスト 1 では、<dependency> 要素の中の <artifactId>sharedlib</artifactId> によって sharedlib サービスへの依存関係が指定されています。
  • セキュリティー: Pluto の Web アプリケーションにはセキュリティー構成が必要です。具体的には、ユーザー・ログインやプリンシパルの認証に <security-realm> を使い、また Pluto の Web デプロイメント記述子 (web.xml) で定義されるロールのマッピングに <role-mappings> を使う必要があります。リスト 1 では、pluto-properties-file-realm セキュリティー・レルムは、(ログイン・ドメインへのエントリー・ポイントとして動作する) アプリケーション固有の認証ポリシーを強制するように、また org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal を使うように構成されています。Pluto アプリケーションの web.xml ファイルで定義される tomcat ロールは、この security-realm を使うようにマップされています。
  • クロス・コンテキスト: Pluto サーバーが要求する必須機能の 1 つが、Geronimo サーバーにデプロイされている別の Web アプリケーションの中にあるポートレットを呼び出せる機能です。この、1つの Web アプリケーションが別の Web アプリケーションにリクエストをディスパッチする機能は、デフォルトでは無効になっています。これを有効にするためには、デプロイメント・プランの中で <cross-context> 要素を指定します。リスト 1 にある <tomcat:cross-context/> は、この機能を Pluto サーバー・アプリケーションに対して有効にしています。

Geronimo に Pluto をデプロイする

Pluto のソース・ディストリビューションをダウンロードした場合には、それをビルドすれば Pluto Web アプリケーション PLUTO_SRC\pluto\portal\target\pluto.warを得ることができます。バイナリーの Pluto ディストリビューションを使っている場合には、PLUTO_HOME\webapps\plutoフォルダーから次のコマンドを使って pluto.war を作成します (pluto_xxx は対象のフォルダーを示します)。

c:\pluto_xxx>jar cvf pluto.war

pluto.war が作成できたら、それを Web コンソールあるいはコマンドライン・デプロイメント・ツールを使ってデプロイします (次のコマンドを1 行に入力します)。

c:\geronimo-1.1.1\bin>deploy --user system deploy

c:\pluto_xxx\pluto.war c:\pluto_xxx\geronimo-web-pluto.xml


サンプルのポータル・アプリケーションを作成する

ポータル・アプリケーションの作成とデプロイメントの方法を示すサンプル・シナリオとして、チケットを購入するためのアプリケーションを作成します。ここではJSR 168 と J2EE をベースとするアプリケーションを作成するので、Geronimo にデプロイされた Pluto 用ポータル・アプリケーションのためのサーバー設定は、他のサーバー設定と何も変わりません。サンプルのポータル・アプリケーションを作成するためには、次の4 つのファイルを作成する必要があります。

  • ポートレット・クラス
  • ポートレット記述子
  • Web アプリケーション記述子
  • ポートレット・ビュー・ページ

これらのファイルの内容に関する詳細の説明は、この記事の範囲を超えているため説明は省略します。詳しくは「Build and test JSR 168-compliant portlets with Apache Pluto」(developerWorks、2006年4月) を参照してください。

ポートレット・クラス

ポータル・クラスの各ポートレットは、Javax.portlet.Portlet インターフェースを実装するポートレット・クラスを持ちますが、これを容易にするために、JSR 168 には javax.portlet.Portlet のデフォルト実装 (javax.portlet.GenericPortlet クラス) が定義されています。リスト 2 は、BuyTicket ポートレットに対して GenericPortlet を継承する org.sample.geronimo.buyticket.BuyTicketPortlet クラスを示しています。同様に、この記事のサンプル・コードには org.sample.geronimo.buyticket.TShirtPortlet が含まれています (「ダウンロード」セクションを参照)。

リスト 2. ポートレット・クラス (org.sample.geronimo.buyticket.BuyTicketPortlet)
package org.sample.geronimo.buyticket;

import java.io.*;
import javax.portlet.*;

import org.apache.pluto.portlet.admin.util.PlutoAdminContext;

public class BuyTicketPortlet extends GenericPortlet {
   private static String VIEW_JSP = "/view.jsp";

   protected void doView(RenderRequest request, RenderResponse response) 
      throws PortletException, IOException {
    response.setContentType(request.getResponseContentType());
    PortletContext context = getPortletConfig().getPortletContext();
    context.getRequestDispatcher(VIEW_JSP).include(request, response);
   }
   public void processAction(ActionRequest request, ActionResponse response) 
      throws PortletException, java.io.IOException {
    String game = request.getParameter("game");
    String name = request.getParameter("name");
    String card = request.getParameter("card");
     String errorMessage = null;
    if(game != null && name != null && card != null 
        && !game.equals("") && !name.equals("") 
       && !card.equals("")){
      response.setRenderParameter("game", game);
      response.setRenderParameter("name", name);
    }else
     response.setRenderParameter("errorMessage",
      "You entered invalid data, please check the name and credit information");
   }
}

ポートレット記述子

リスト 3 に示す portlet.xml ファイルは、ポータル・アプリケーションに含まれるすべてのポートレットの情報 (ポートレットの名前やタイトル、クラス、モードなど)を提供します。

リスト 3. ポートレット記述子 (portlet.xml)
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app
   xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
   version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd 
   http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
   id="org.sample.geronimo.buyticket.BuyTicketPortlet">
   <portlet>

      <portlet-name>BuyTicket</portlet-name>
      <display-name>Buy Ticket Portlet</display-name>
      <portlet-class>
         org.sample.geronimo.buyticket.BuyTicketPortlet
      </portlet-class>
      <supports>
         <mime-type>text/html</mime-type>
         <portlet-mode>view</portlet-mode>
      </supports>
      <portlet-info>
         <title>Buy Ticket Title</title>
      </portlet-info>
   </portlet>
   <portlet>
      <portlet-name>TShirt</portlet-name>
      <display-name>TShirt Portlet</display-name>
      <portlet-class>
         org.sample.geronimo.buyticket.TShirtPortlet
      </portlet-class>
      <supports>
         <mime-type>text/html</mime-type>
         <portlet-mode>view</portlet-mode>
      </supports>
      <portlet-info>
         <title>TShirt</title>
      </portlet-info>
   </portlet>
</portlet-app>

Web アプリケーション記述子

web.xml は J2EE に指定されている標準の XML 記述子であり、サーブレットや taglib などの Web アプリケーション・コンポーネントに関する情報を提供するために使われます。リスト4 は buyticket ポータル・アプリケーションのための WEB-INF\web.xml ファイルを示しています。

リスト 4. Web アプリケーション記述子 (WEB-INF\web.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
   <display-name>GetPortlet</display-name>
    <servlet>
      <servlet-name>BuyTicket</servlet-name>
      <display-name>BuyTicket Wrapper</display-name>
      <description>Automated generated Portlet Wrapper</description>
      <servlet-class>org.apache.pluto.core.PortletServlet</servlet-class>
      <init-param>
        <param-name>portlet-guid</param-name>
        <param-value>buyticket.BuyTicket</param-value>
      </init-param>
      <init-param>
        <param-name>portlet-class</param-name>
        <param-value>org.sample.geronimo.buyticket.BuyTicketPortlet</param-value>
      </init-param>
    </servlet>
    <servlet-mapping>
      <servlet-name>BuyTicket</servlet-name>
      <url-pattern>/BuyTicket/*</url-pattern>
    </servlet-mapping>
    <servlet>
      <servlet-name>TShirt</servlet-name>
      <display-name>TShirt Wrapper</display-name>
      <description>Automated generated Portlet Wrapper</description>
      <servlet-class>org.apache.pluto.core.PortletServlet</servlet-class>
      <init-param>
        <param-name>portlet-guid</param-name>
        <param-value>buyticket.TShirt</param-value>
      </init-param>
      <init-param>
        <param-name>portlet-class</param-name>
        <param-value>org.sample.geronimo.buyticket.TShirtPortlet</param-value>
      </init-param>
    </servlet>
    <servlet-mapping>
      <servlet-name>TShirt</servlet-name>
      <url-pattern>/TShirt/*</url-pattern>
    </servlet-mapping>

   <welcome-file-list>
      <welcome-file>index.html</welcome-file>
   </welcome-file-list>
   <taglib>
      <taglib-uri>http://java.sun.com/portlet</taglib-uri>
      <taglib-location>tld/portlet.tld</taglib-location>
   </taglib>
   <taglib id="PortletTLD">
      <taglib-uri>http://java.sun.com/portlet</taglib-uri>
      <taglib-location>/WEB-INF/tld/portlet.tld</taglib-location>
   </taglib>
</web-app>

ポートレット・ビュー・ページ

BuyTicketPortlet には、context.getRequestDispatcher("view.jsp").include(request, response);をコールすることでポートレット・コードからビューの部分を分離する、ビュー・ページが含まれています。実際の HTML ページの描画には、リスト5 に示す view.jsp ファイルが使われます。

リスト 5. 最初のページ (view.jsp)
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1" session="false"%>
<portlet:defineObjects />
   <%
      String game = renderRequest.getParameter("game");
      if (game == null) game = "";
      String name = renderRequest.getParameter("name");
      if (name == null) name = "";
      String errorMessage = renderRequest.getParameter("errorMessage");
      if (errorMessage != null) { 
   %>
   <p><%=errorMessage%></p>
   <%
      }else if (name != null && !name.equals("") && game != null && !game.equals("") ) { 
   %>
   <p><b> Thank you <%= name %>, you purchased ticket for <%= game %></b></p>
   <%
      }
   %>
   <FORM name="<portlet:namespace/>ticketform" action="<portlet:actionURL/>">
   <table border="0">
   <tr><td>
     Select Game/Event
     </td><td>
     <select name="game">
   <%
     java.util.ArrayList map=org.sample.geronimo.buyticket.GameConstants.map; 
     java.util.Iterator itr=map.listIterator();
     while(itr.hasNext())
     {
        String gamelist=(String)itr.next();
   %>
    <option value=<%= gamelist %> selected="true"><%= gamelist %></option>
   <%
      }
   %>
     </select>
     </td></tr>
     <tr><td>Name</td><td><INPUT type="text" name="name" size="20"/></td></tr>
     <tr><td>Card</td><td><INPUT type="text" name="card" size="20"/></td></tr>
     <tr><td>Exp. Date</td><td><INPUT type="text" name="date" size="20"></td></tr>
     </table>
    <INPUT type="submit" name="<portlet:namespace/>submitTicket" value="Buy"/>
    <INPUT type="submit" value="Cancel"/>
     </FORM>

今度は、portlet.tld ファイルを PLUTO_HOME\webapps\pluto\WEB-INF\tld フォルダーから WEB-INF\tldフォルダーにコピーします。WEB-INF\classes フォルダーにある Java ファイルをコンパイルし、次のようにして、上記のすべてのファイルをWAR ファイルとしてパッケージします。

c:\buyticket>jar -cvf buyticket.war


サンプル・アプリケーションのデプロイメント・プランを作成する

Geronimo に Pluto をデプロイする場合、Pluto にデプロイすべきすべてのポータル・アプリケーションを、Web アプリケーションとしてGeronimo サーバーにデプロイする必要があります。Pluto サーバー・アプリケーションの Web デプロイメント・プランが必要であったのと同じように、buyticket ポータル・アプリケーションの Geronimo Web デプロイメント・プランが必要です。buyticket のデプロイメント・プラン (geronimo-web-app.xml) をリスト 6 に示します。

リスト 6. ポータル・アプリケーションのデプロイメント・プラン(geronimo-web-app.xml)
<?xml version="1.0"?> 
<web-app xmlns="http://geronimo.apache.org/xml/ns/web" 
   xmlns:naming="http://geronimo.apache.org/xml/ns/naming"
   xmlns:tomcat="http://geronimo.apache.org/xml/ns/web/tomcat/config-1.0"
    xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1">
<sys:environment>
    <dependencies>
        <dependency>
           <artifactId>sharedlib</artifactId>
        </dependency>
    </dependencies>
</sys:environment>   
</web-app>

Pluto ポータル・アプリケーションには共通の Pluto ファイルが必要です。これらのファイルは Geronimo の sharedlibサービスによって共有されます。sharedlib サービスに対するポータル・アプリケーションの依存関係は、ポータル・アプリケーションのデプロイメント・プラン (リスト 6) で指定されます。


サンプル・アプリケーションを Geronimo にデプロイし、テストする

ポータル・アプリケーションのデプロイメントは 2 つレベルで行う必要があります。最初のレベルでは、Web アプリケーションとして Geronimoにデプロイします。これは Geronimo のデプロイ・ツールを使えば次のように簡単に行うことができます。

  1. 次のコマンドを 1 行に入力します。 c:\geronimo-1.1.1\bin>deploy --user system deploy c:\buyticket\buyticket.war
    c:\buyticket\geronimo-web-app.xml
    このコマンドはこのアプリケーションを Web アプリケーションとして Geronimo にデプロイしますが、Pluto のサービスや機能を使うためには、アプリケーションをPluto (2 番目のデプロイメント・レベル) を通してリダイレクトする必要があります。
  2. そのためには、アプリケーションの構成情報を Pluto のレジストリーに保存する必要があります。pluto\WEB-INF\data\pageregistry.xmlファイルとpluto\WEB-INF\data\portletcontexts.txt ファイル、そして pluto\WEB-INF\data\portletentityregistry.xmlファイルを手動で更新します。あるいは、次のステップに進んで Pluto の admin アプリケーションを使うこともできます。
  3. http://localhost:8080/pluto/portal を開き、Admin リンクをクリックします。これによって http://localhost:8080/pluto/portal/adminportletappアプリケーションが開きます (図 1)。
    図 1. Pluto の admin アプリケーション (buyticket ポートレット・アプリケーションをデプロイする)
    図 1. Pluto の admin アプリケーション (buyticket ポートレット・アプリケーションをデプロイする)
  4. このアプリケーションで buyticket.war ファイルまでブラウズし、Submit をクリックします。これによって buyticket アプリケーションがデプロイされ、ポータル・アプリケーション固有の構成が portletentityregistry.xml に追加されます。
  5. admin デプロイメントの次のページで、新たにデプロイされたポータル・アプリケーションのタイトルと説明、レイアウト情報を入力します (図 2)。
    図 2. Pluto の admin アプリケーション (ポータルをレイアウトする)
    図 2. Pluto の admin アプリケーション (ポータルをレイアウトする)
  6. ポータル・アプリケーションの表示に必要な行数と列数になるように、行と列の数を変更します。
  7. 次に、各行と列に表示すべきポートレットを選択します (図 3)。
    図 3. Pluto の admin アプリケーション (ページ・レイアウトを定義する)
    図 3. Pluto の admin アプリケーション (ページ・レイアウトを定義する)
    このステップで、ポータル・アプリケーションでのポートレットの位置に関するレイアウト設定を反映して pageregistry.xml が更新されます。このステップによって、Geronimoで動作する Pluto サーバーにポータル・アプリケーションをデプロイするという作業が完了します。
  8. これで buyticket リンクをクリックすれば、アプリケーションのテストを開始でき、またアプリケーションを使い始めることができます。図 4 は、buyticket アプリケーションが Pluto サーバーにデプロイされて実行している様子を示しています。
    図 4. buyticket ポータル・アプリケーション
    図 4. buyticket ポータル・アプリケーション

まとめ

Apache Pluto は、JSR 168 に準拠しているかどうかをテストするための、小さく、容易に使えるポータル・テストベッドです。ポータル・サーバーのサポートは、初めからGeronimo に統合されているわけではありません。しかし、任意のポータル・サーバー (Pluto あるいは Jetspeed や Liferay)を、プラグインとして、あるいは外部アプリケーションとして Geronimo にインストールすることができます。デプロイメント環境として重量級のJetspeed あるいは Liferay を使うこともできますが、軽量の開発とテストが可能という要求を満足できるのは Pluto のみです。Geronimoと Pluto を統合することによって、オープンソースのポータル・サーバーとアプリケーション・サーバーという、2 つの世界の両方の利点を組み合わせたポータル環境を得ることができます。


ダウンロード

内容ファイル名サイズ
Sample applicationbuyticket.zip14KB

参考文献

学ぶために

製品や技術を入手するために

  • Apache Geronimo 1.1Apache Plutoの無料バイナリー・バージョンとソース・バージョンをダウンロードしてください。
  • Eclipse plug-in for Geronimo 1.1を利用して Java アプリケーション開発をすぐにスタートしてください。
  • IBM WebSphere® Application Server Community Editionの無料コピーをダウンロードしてください。これは Apache Geronimo オープンソース技術の上に構築された軽量の J2EE アプリケーション・サーバーであり、皆さんのデプロイメント作業や開発作業を加速するために設計されています。
  • 皆さんの次期オープンソース開発プロジェクトをIBM trial softwareで革新してください。ダウンロード、あるいは DVD で入手することができます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source, Java technology, WebSphere
ArticleID=249242
ArticleTitle=Apache Geronimo で Apache Pluto ポータル・アプリケーションを開発し、デプロイする
publish-date=04102007