![]() ![]() ![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
第19章
この章では、exteNd Directorで提供されるサービスを活用するStrutsアプリケーションの開発について説明します。トピックは次のとおりです。
Strutsは、Apache Software FoundationのJakartaプロジェクトの一部です。J2EE Webアプリケーション(WAR)のModel-View-Controller (MVC)設計パターンを実装するフレームワークです。
MVCは、アプリケーションのコードを分割して、ユーザインタフェース(「ビュー」)をビジネスロジック(「モデル」)から切り離しておく方法を指定します。「コントローラ」では、ユーザ要求がどのようにページにルーティングされ、各要求を処理するためにどのビジネスロジックが呼び出されるかを決定します。
ビューのJSPページとコントローラのサーブレットの結合は、Model 2とも呼ばれます。これは、WebアプリケーションでMVCアーキテクチャを実装するために現在承認されている方法です。
MVCアーキテクチャの詳細については、Sun J2EE Blueprintsを参照してください。
StrutsはModel2に基づきます。JSPページで情報の表示を処理するサーブレットコントローラ、タグライブラリ、およびフォームクラスを提供します。設定ファイルを使用して、アプリケーションデータを処理するためにインスタンス化するクラスをコントローラに通知します。
一般的なStrutsアプリケーションには、次のものが含まれます。
テキストの表示、データ入力用のフォームの作成、およびページに表示するデータ収集の処理を行うStrutsカスタムタグを使用したJSPページ
アクションクラスに要求をルーティングして、表示するJSPページを選択するコントローラとして機能するアクションサーブレット
これらがともに機能してMVCを実装する方法の要約は、次のとおりです。
このアーキテクチャは、次の図のとおりです。
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、または他のオブジェクトでそのクラス外に実装することをお勧めします。
Strutsの詳細については、jakarta.apache.org/struts/index.htmlに進んでください。
Strutsフレームワーク単独で、標準アーキテクチャ(MVC、Model 2)に従い優れた設計実施(ビジネスロジックからのプレゼンテーションの分離や、コントロールフロー詳細を宣言する設定ファイルの使用など)の利点を得るJ2EE Webアプリケーションの開発に役立ちます。それでも、Strutsが扱わない重要なアプリケーション機能の分野があります。
exteNd Directorサービスを追加することにより、次をものを含め、いくつかの特定分野でStrutsアプリケーションの機能を拡張できます。
ビジネスロジック(ルールを介して)
ビジネスプロセス(ワークフローを介して)
ダイナミックコンテンツ(コンテンツ管理を介して)
StrutsでのexteNd Directorサービスの使用は、次の図のとおりです。
Strutsの制約 ビジネスロジックは、十分に構造化されたStrutsアプリケーション内でも、プログラマによる管理と修正が必要なコード化されたオブジェクトに常駐します。この結果、変化するビジネス計画と状況に応答してロジックをすばやく変更する必要のあるビジネスマネージャに遅延を起こします。
exteNd Directorの利点 exteNd DirectorのRuleサブシステムを使用すると、よりアクセス可能な方法でビジネスロジックを維持でき、プログラマとビジネスマネージャはいずれも変更を行うことができるようになります。 ルールが変更されると、再展開を必要とせずに、ただちにアプリケーションに使用できます。
たとえば、最高の顧客に割引を提供するとします。顧客が最高のカテゴリに分類されるかどうかチェックするisBestCustomer(custid)というルールを作成できます。 今日、最高の顧客は1年で$2000の商品を購入した顧客として定義されていても、明日、ビジネスマネージャが$5000に変更するかもしれません。このような修正は簡単です-ルールエディタでルールを開き、額を$2000から$5000に変更します。ルールが保存されると、アプリケーションはただちに最高の顧客割引に$5000要件の使用を開始します。
Strutsアプリケーションのいずれのロジックコンポーネントでも、ルールを活用できます。特に、ActionFormクラスの検証とActionクラスのビジネスロジックの処理に使用することを考慮してみてください。
Strutsの制約 Strutsは、アプリケーション内のコントロールフロー処理に優れたアプローチを提供しますが、アプリケーションを越えて、情報およびプロセスがビジネスを通過する方法を扱うすることはありません。 そこで、exteNd DirectorのWorkflowサブシステムを使用します。
exteNd Directorの利点 ワークフローは、ビジネスプロセス(個別のアプリケーションが適合する場所を含め)をマップし、データを通過させるのに役立ちます。これによって、特定のアプリケーションにリンク方法を認識させる必要がなくなるため、独立してアプリケーションを開発し、モジュールに保持することができます。 たとえば、オーダーエントリアプリケーションは、オーダー後に起きることを処理する必要はありません。単に、プロセスでそのアプリケーションの部分が完了したことをWorkflowサブシステムに通知するだけです。
ワークフローは、より高いレベルのプロセスロジックです。 たとえば、顧客のオーダーをオーダーエントリアプリケーションから発送担当者、次に請求担当者に導き、最後にすべて安全に到着したか顧客に確認するサービス担当者に導きます。
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スタイルシートを単一ドキュメントと関連付けることができるため、さまざまな外観をサポートするためにコンテンツの余分なコピーを維持する必要はありません。
StrutsアプリケーションでexteNd Directorサービスにアクセスするには、exteNd Director utilities\Strutsディレクトリにインストールされている、StrutsPlus.jarファイルで提供されたいくつかのクラスを使用します。必要なクラスはすべて、exteNd Directorパッケージcom.sssw.portal.strutsにあります。
com.sssw.portal.strutsパッケージのクラスは、次のとおりです。
このクラスは、Struts Actionクラスを拡張します。一般的なexteNd Directorマネージャおよび委任にアクセスするために呼び出せるいくつかの方法を提供します。
DirectorActionを使用するには、まずクラスを拡張します。その後、DirectorActionサブクラスで次の抽象メソッドを実装します。
public abstract ActionForward perform com.sssw.fw.api.EbiContext fwContext,com.sssw.portal.struts.EboStrutsContext strutsContext )throws java.io.IOException, javax.servlet.ServletException; public abstract void init(com.sssw.fw.api.EbiContextfwContext,com.sssw.portal. struts.EboStrutsContext strutsContext);
このクラスは、Struts ActionFormクラスを拡張します。一般的なexteNd Directorマネージャおよび委任にアクセスするために呼び出せるいくつかの方法を提供します。
DirectorActionFormを使用するには、まずクラスを拡張します。その後、DirectorActionFormサブクラスで次の抽象メソッドを実装します。
public abstract ActionErrors validate(com.sssw.fw.api.EbiContext fwContext,com.sssw.portal.struts.EboStrutsContext strutsContext ); public abstract void reset( com.sssw.fw.api.EbiContextfwContext, com.sssw.portal.struts.EboStrutsContext strutsContext ); public abstract void init(com.sssw.fw.api.EbiContextfwContext,com.sssw.portal. struts.EboStrutsContextstrutsContext);
これは、一般的なexteNd Directorマネージャおよび委任にアクセスするために呼び出せるいくつかの方法を提供するユーティリティクラスです。これらは、DirectorActionおよびDirectorActionFormのメソッドと同じです。
DirectorHelperを使用するには、インスタンス化し、要求と応答、およびサーブレットコンテキストで渡します。その後、DirectorHelper getメソッドを呼び出して、必要なexteNd Directorオブジェクトにアクセスできます。
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 ...