第19章

Strutsアプリケーションの開発

この章では、exteNd Directorで提供されるサービスを活用するStrutsアプリケーションの開発について説明します。トピックは次のとおりです。

 
Top of page

Strutsについて

Strutsは、Apache Software FoundationのJakartaプロジェクトの一部です。J2EE Webアプリケーション(WAR)のModel-View-Controller (MVC)設計パターンを実装するフレームワークです。

 
Top of section

MVCの概要

MVCは、アプリケーションのコードを分割して、ユーザインタフェース(「ビュー」)をビジネスロジック(「モデル」)から切り離しておく方法を指定します。「コントローラ」では、ユーザ要求がどのようにページにルーティングされ、各要求を処理するためにどのビジネスロジックが呼び出されるかを決定します。

ビューのJSPページとコントローラのサーブレットの結合は、Model 2とも呼ばれます。これは、WebアプリケーションでMVCアーキテクチャを実装するために現在承認されている方法です。

For more information    MVCアーキテクチャの詳細については、Sun J2EE Blueprintsを参照してください。

 
Top of section

StrutsによるMVC実装方法

StrutsはModel2に基づきます。JSPページで情報の表示を処理するサーブレットコントローラ、タグライブラリ、およびフォームクラスを提供します。設定ファイルを使用して、アプリケーションデータを処理するためにインスタンス化するクラスをコントローラに通知します。

一般的なStrutsアプリケーションには、次のものが含まれます。

これらがともに機能してMVCを実装する方法の要約は、次のとおりです。

MVC部分

Struts実装

Model

アクションクラスでは、要求またはセッションを使用して、アプリケーションの状態に関する情報を保存します。アクションクラスでは、ビジネスロジッククラスをインスタンス化して、アプリケーションデータを処理できます。

アクションクラスは、コントローラで処理される各URLに対して作成します。

View

JSPページおよびActionForm beansにより、データおよびフォームが表示されます。ActionForm Beanでは、フォームフィールドにデータを入力し、そのデータを保持、検証します。このデータは、要求間で使用可能な状態のままにすることができ、また、フォームでは、前に入力されたデータを再び表示することができます。

ActionFormクラスは、JSPページの各フォームに対して作成します。

Controller

ActionServletクラス(またはその拡張)は、サーバプロセスとして実行し、このクラスで認識されたURLを処理します。このクラスでは、struts-config.xmlファイルを読み込み、インスタンス化するアクションクラス、および各URLに対して表示するJSPページを検出します。

ActionServletクラスは、そのまま使用したり、カスタム動作を提供するように拡張したりすることができます。

このアーキテクチャは、次の図のとおりです。

cdStrutsMVC

 
Top of section

Strutsを使用して単純なオーダーのエントリシステムがアーキテクチャされる方法を考えます。

動作   アプリケーションの最初のコンポーネントは、顧客がオーダーデータを入力するオーダーフォームです。HTML形式自体は、入力するテキストフィールドを定義するJSPページです。このJSPページは、入力データを収集して検証するActionFormクラスに、struts-config.xmlファイルでマップされます。Actionクラスは、情報を処理してオーダーを受け入れます。最後に、アクションマッピングは次に進む場所をコントローラに通知します。

この例では、JSPページの形式はStrutsフォームタグを使用して定義されます。

  <strutshtml:form action="order.do" name="orderForm" type="mine.OrderForm">

ユーザが[送信]ボタンをクリックすると、コントローラはmine.OrderFormクラス(ActionFormを拡張する)にリダイレクトして入力された情報を収集することを認識します。 検証エラーがある場合、コントローラはフォームページに戻ることができます。それ以外の場合には、order.doアクションを実行します。

コントローラはstruts-config.xmlファイルを使用して、order.doアクションにマップされる特定のActionクラスを決定し、収集したオーダーデータを処理のためにそのクラスに提供します。処理結果によって、Actionクラスは、次の操作を示すAction Mappingオブジェクトをコントローラに戻します。 たとえば、結果が成功の場合、コントローラはstruts-config.xmlファイルを検索して、ActionクラスのsuccessにマップされるJSPページを探します。このアプリケーションで、コントローラはオーダーが成功した場合はThankYou.jspを表示し、問題がある場合はTryAgainLater.jspを表示します。

利点   struts-config.xmlファイルでコントロールフローの詳細を分離することにより、アプリケーションは柔軟性を維持し、後で部分を追加または変更しやすくします。たとえば、これはバックオーダーモジュールをオーダーエントリアプリケーションに追加する際に役立ちます。

前に説明したように、特定のActionクラスはユーザが送信したオーダー情報を処理します。 そのクラスは、単にオーダーの総コストを計算する場合があります。または、ユーザに応答する前に、顧客IDの検証、クレジットカードデータの処理、およびインベントリの更新を実行する外部コードを呼び出す場合があります。 Actionクラス自体はStrutsフレームワークの一部であるため、アプリケーション固有のビジネスロジックは、再使用可能なJavaBeans、EJB、または他のオブジェクトでそのクラス外に実装することをお勧めします。

For more information    Strutsの詳細については、jakarta.apache.org/struts/index.htmlに進んでください。

 
Top of page

exteNd DirectorサービスによるStrutsの拡張

Strutsフレームワーク単独で、標準アーキテクチャ(MVC、Model 2)に従い優れた設計実施(ビジネスロジックからのプレゼンテーションの分離や、コントロールフロー詳細を宣言する設定ファイルの使用など)の利点を得るJ2EE Webアプリケーションの開発に役立ちます。それでも、Strutsが扱わない重要なアプリケーション機能の分野があります。

exteNd Directorサービスを追加することにより、次をものを含め、いくつかの特定分野でStrutsアプリケーションの機能を拡張できます。

StrutsでのexteNd Directorサービスの使用は、次の図のとおりです。

cdStrutsMVCex

 
Top of section

ビジネスロジック

Strutsの制約   ビジネスロジックは、十分に構造化されたStrutsアプリケーション内でも、プログラマによる管理と修正が必要なコード化されたオブジェクトに常駐します。この結果、変化するビジネス計画と状況に応答してロジックをすばやく変更する必要のあるビジネスマネージャに遅延を起こします。

exteNd Directorの利点   exteNd DirectorのRuleサブシステムを使用すると、よりアクセス可能な方法でビジネスロジックを維持でき、プログラマとビジネスマネージャはいずれも変更を行うことができるようになります。 ルールが変更されると、再展開を必要とせずに、ただちにアプリケーションに使用できます。

たとえば、最高の顧客に割引を提供するとします。顧客が最高のカテゴリに分類されるかどうかチェックするisBestCustomer(custid)というルールを作成できます。 今日、最高の顧客は1年で$2000の商品を購入した顧客として定義されていても、明日、ビジネスマネージャが$5000に変更するかもしれません。このような修正は簡単です-ルールエディタでルールを開き、額を$2000から$5000に変更します。ルールが保存されると、アプリケーションはただちに最高の顧客割引に$5000要件の使用を開始します。

Strutsアプリケーションのいずれのロジックコンポーネントでも、ルールを活用できます。特に、ActionFormクラスの検証とActionクラスのビジネスロジックの処理に使用することを考慮してみてください。

 
Top of section

ビジネスプロセス

Strutsの制約   Strutsは、アプリケーション内のコントロールフロー処理に優れたアプローチを提供しますが、アプリケーションを越えて、情報およびプロセスがビジネスを通過する方法を扱うすることはありません。 そこで、exteNd DirectorのWorkflowサブシステムを使用します。

exteNd Directorの利点   ワークフローは、ビジネスプロセス(個別のアプリケーションが適合する場所を含め)をマップし、データを通過させるのに役立ちます。これによって、特定のアプリケーションにリンク方法を認識させる必要がなくなるため、独立してアプリケーションを開発し、モジュールに保持することができます。 たとえば、オーダーエントリアプリケーションは、オーダー後に起きることを処理する必要はありません。単に、プロセスでそのアプリケーションの部分が完了したことをWorkflowサブシステムに通知するだけです。

ワークフローは、より高いレベルのプロセスロジックです。 たとえば、顧客のオーダーをオーダーエントリアプリケーションから発送担当者、次に請求担当者に導き、最後にすべて安全に到着したか顧客に確認するサービス担当者に導きます。

 
Top of section

ダイナミックコンテンツ

Strutsの制約   Strutsが扱わないもう1つの重要なアプリケーション要件は、ダイナミックコンテンツのサポートです。たとえば、StrutsのJSPページを使用するとアプリケーションのプレゼンテーション層を切り離すことができますが、通常はハードコードされたHTMLが残ります。このシナリオでは、コンテンツの変更は再コンパイルを必要とします。

exteNd Directorの利点   exteNd DirectorのContent Management「コンテンツ管理」サブシステムを使用すると、アプリケーションのフレームワーク外でコンテンツを維持して修正し、アプリケーションにダイナミックに送ることができます。Content Managementは、コンテンツのバージョン、コンテンツアクセスの制御、コンテンツ配布の制御、コンテンツ有効期限の制御、およびXML/XSLを介したさまばまなコンテンツスタイル処理の機能を含みます。

オーダーエントリアプリケーションのメインJSPページがスペシャルに関する情報を表示する必要があるとします。スペシャルは常に変化しているため、このコンテンツはダイナミックに管理される必要があります。したがって、コンテンツのHTMLを保持するドキュメントをContent Managementで作成します。JSPページは、ランタイム時にコンテンツを取得するようにコードされます。

プログラマでなくても、コンテンツの維持と編集にCMS Administrationコンソールを使用できます。承認プロセスにコンテンツを配置し、サイトに表示される新バージョンの日付を設定できます。無効なコンテンツが作成された場合には、ロールバック機能を使用できます。

同じコンテンツを異なるユーザに異なる形式で表示するには、スタイリング機能を活用することができます。 Content Managementでは、複数のXSLスタイルシートを単一ドキュメントと関連付けることができるため、さまざまな外観をサポートするためにコンテンツの余分なコピーを維持する必要はありません。

 
Top of page

exteNd DirectorサービスによるStrutsの実装方法

StrutsアプリケーションでexteNd Directorサービスにアクセスするには、exteNd Director utilities\Strutsディレクトリにインストールされている、StrutsPlus.jarファイルで提供されたいくつかのクラスを使用します。必要なクラスはすべて、exteNd Directorパッケージcom.sssw.portal.strutsにあります。

com.sssw.portal.strutsパッケージのクラスは、次のとおりです。

DirectorAction、DirectorActionForm、およびDirectorHelpは、一般的なマネージャおよび委任にアクセスするために呼び出せるいくつかのgetメソッドを提供します。アプリケーションで使用するサブシステムのgetメソッドをコメントアウトする必要があります。特定のマネージャまたは委任にアクセスするには、適切なgetメソッドをコードで呼び出します。DirectorActionおよびDirectorActionFormサブクラスでは、通常initメソッドでこれを実行します。

たとえば、Ruleサブシステムを使用するには、次のコードブロックをコメントアウトする必要があります。

  /*
   //uncomment this section if you are using the rule subsystem
   public com.sssw.re.api.EbiRuleManager getRuleManager() throws
     com.sssw.fw.exception.EboFactoryException {
     try {
       return com.sssw.re.factory.EboFactory.createRuleManager();
     } catch (com.sssw.fw.exception.EboFactoryException ex){
       throw ex;
     }
   }
  */

ルールマネージャにアクセスするには、getRuleManager()メソッドを呼び出します(次を参照)。

  public class MyDirectorAction extends DirectorActionForm {
  ...
   com.sssw.re.api.EbiRuleManager myRuleManager;
  ...
   public void init(com.sssw.fw.api.EbiContext
    fwContext,com.sssw.portal.struts.EboStrutsContext strutsContext)
   {
  ...
   myRuleManager = getRuleManager();
  ...
   }


Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.  more ...