BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Portal > 開発者ガイド > ユーザ プロファイルの実装 |
開発者ガイド
|
ユーザ プロファイルの実装
WebLogic Portalでは、ユーザはユーザ プロファイルで表されます。 ユーザ プロファイルのおかげで、ユーザ属性の表現、格納、およびアクセスを柔軟に行えるようになります。 WebLogic Portal には、基本的なユーザ プロファイルのサポートだけでなく、仮想エンタープライズ プロファイルの作成に利用できる統合ユーザ プロファイル (UUP) も用意されています。この章では、以下の内容について説明します。
統合ユーザ プロファイルの作成
統合ユーザ プロファイルを用いれば、LDAP サーバ、レガシー システム、データベースなどの外部ソースに格納されているユーザ データを活用することができます。 これによって、単一のプロファイルを使って、さまざまなソース内のユーザ データにアクセスできるようになります。
UUP を作成して外部ソースからユーザ データを取得するには、以下の作業を実行します。
外部データを表現する EntityPropertyManager EJB を作成する
外部ソースからデータを取り込むには、まず、com.bea.p13n.property.
EntityPropertyManager リモート インタフェースのメソッドを実装するステートレス セッション Bean を作成する必要があります。 EntityPropertyManagerは、プロパティ データの永続性とプロファイル レコードの作成および削除を扱うセッション Bean のリモート インタフェースです。さらに、このステートレス セッション Bean には、ホーム インタフェースと実装クラスが含まれていなければなりません。 たとえば、以下のものです。
MyEntityPropertyManager
extends com.bea.p13n.property.EntityPropertyManager
MyEntityPropertyManagerHome
extends javax.ejb.EJBHome
実装クラスは、EntityPropertyManagerImpl クラスを拡張することができます。 ただし、その実装クラスは、MyEntityPropertyManager リモート インタフェースの有効な実装であることが必要です。 たとえば、以下のとおりです。
MyEntityPropertyManagerImpl extends
com.bea.p13n.property.internal.EntityPropertyManagerImpl
または
MyEntityPropertyManagerImpl extends
javax.ejb.SessionBean
推奨される EJB ガイドライン
新しい EJB についてのガイドラインとして、以下を推奨します。
getDynamicProperties
getEntityNames
getHomeName
getPropertyLocator
getUniqueId
JAR ファイルをデプロイする前に、次の節で示す手順に従います。
新しい EntityPropertyManager を使用できる ProfileManager をデプロイする
「ユーザ タイプ」とは、ProfileType 名から特定の ProfileManagerへのマッピングのことです。 このマッピングは、 UserManagerEJB のデプロイメント記述子で行われます。
新しい EntityPropertyManager EJB 内のデータにアクセスするには、以下の作業のいずれか 1 つを行う必要があります。
ProfileManager は、EntityPropertyManager EJB で取得されるプロファイル値へのアクセスを管理するステートレス セッション Bean です。 この Bean は、自分のデプロイメント記述子に書かれた一連のマッピング文に基づいて、データを探します。 たとえば、 ProfileManager は DateOfBirth プロパティの値を要求するリクエストを受け取りますが、このプロパティは PersonalData プロパティ セットに入っています。 ProfileManager は、自分のデプロイメント記述子に書かれているマッピング文を用いて、データがどの EntityPropertyManager EJB に格納されているかを判断します。
既存の ProfileManager デプロイメントのコンフィグレーションを変更する
既存の UserProfileManager デプロイメントを使用してユーザ プロファイルを管理する場合には、以下の手順を実行して、デプロイメントのコンフィグレーションを変更します。
ほとんどの状況では、この方法を UUP のデプロイに使用すべきです。 この方法の例としては、カスタム EntityPropertyManager を LDAP プロパティ検索用にデプロイした LdapPropertyManager があります。 LdapPropertyManager 用のクラスは ldapprofile.jar にパッケージ化されています。 UserProfileManager EJB のデプロイメント記述子は、「ldap」プロパティ セットを LdapPropertyManager にマップするようにコンフィグレーションされています。 UserProfileManager は usermgmt.jar 内にデプロイされています。
コード リスト 6-1 <env-entry> Element
<!-- プロパティ セット ldap 内の全プロパティを ldap サーバにマップする -->
<env-entry>
<env-entry-name>PropertyMapping/ldap</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>LdapPropertyManager</env-entry-value>
</env-entry>
そして、この要素のあとに、リスト 6-2 に示すような <env-entry> 要素を追加して、プロパティ セットをカスタム EntityPropertyManager にマップします。
コード リスト 6-2 プロパティをマップする別の <env-entry> 要素の追加
<!-- UUPExample プロパティ セット内の全プロパティを MyEntityPropertyManager にマップする -->
<env-entry>
<env-entry-name>PropertyMapping/UUPExample</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>MyEntityPropertyManager</env-entry-value>
</env-entry>
コード リスト 6-3 <ejb-ref> 要素
<!-- ldap プロパティ マネージャ -->
<ejb-ref>
<ejb-ref-name>ejb/LdapPropertyManager</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.bea.p13n.property.EntityPropertyManagerHome</home>
<remote>com.bea.p13n.property.EntityPropertyManager</remote>
</ejb-ref>
そして、この要素のあとに、リスト 6-4 に示すような <ejb-ref> 要素を追加して、先ほどのステップで指定したマップ先の名前に ejb/ という接頭辞が付いた参照を EJB にマップします。
コード リスト 6-4 参照を EJB にマップするための <ejb-ref> 要素
<!-- プロパティ マネージャのサンプル -->
<ejb-ref>
<ejb-ref-name>ejb/MyEntityPropertyManager</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>examples.usermgmt.MyEntityPropertyManagerHome</home>
<remote>examples.usermgmt.MyEntityPropertyManager</remote>
</ejb-ref>
ホーム クラス名とリモート クラス名は、カスタム EntityPropertyManager の EJB JAR ファイルに入っているクラスと同じものです。
コード リスト 6-5 Creator エントリと Remover エントリを追加するための <env-entry> 要素
<env-entry>
<env-entry-name>Creator/Creator1</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>MyEntityPropertyManager</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>Remover/Remover1</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>MyEntityPropertyManager</env-entry-value>
</env-entry>
コード リスト 6-6 weblogic-ejb-jar.xml 内の要素
<weblogic-enterprise-bean>
<ejb-name>UserProfileManager</ejb-name>
<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>ejb/EntityPropertyManager</ejb-ref-name>
<jndi-name>${APPNAME}.BEA_personalization.
EntityPropertyManager</jndi-name>
</ejb-reference-description>
コード リスト 6-7 JNDI 名の指定
<weblogic-enterprise-bean>
<ejb-name>UserProfileManager</ejb-name>
<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>ejb/EntityPropertyManager</ejb-ref-name>
<jndi-name>${APPNAME}.BEA_personalization.
EntityPropertyManager</jndi-name>
</ejb-reference-description>
<ejb-reference-description>
<ejb-ref-name>ejb/MyEntityPropertyManager
</ejb-ref-name>
<jndi-name>${APPNAME}.BEA_personalization.
MyEntityPropertyManager</jndi-name>
</ejb-reference-description>
コード リスト 6-8 カスタム EntityPropertyManager EJB モジュールのエントリの追加
<module>
<ejb>UUPExample.jar</ejb>
</module>
コード リスト 6-9 META-INF/application-config.xml への<Cache> タグの追加
<Cache
Name="UUPExampleCache"
TimeToLive="60000"
/>
これで、新しい統合ユーザ プロファイル タイプがいつでも使用できるようになりました。 WebLogic Portal Administration Tools を用いれば、「User」というタイプのユーザを作成することができ、そのユーザ タイプでは、「UUPExample」プロパティ セットの変更時に新しい UUP 実装が使用されることになります。 UserManager に対して createUser("bob", "password") または createUser("bob", "password", null) を呼び出すと、以下の処理が行われます。
新しい ProfileManager のコンフィグレーションとデプロイ
デフォルトの ProfileManager (UserProfileManager) を使うのではなく新たにコンフィグレーションした ProfileManager をデプロイして、ユーザ プロファイルを管理する場合には、以下の手順を実行してデプロイメントのコンフィグレーションを変更します。 ほとんどの場合、このデプロイメント方法を用いる必要はありません。 この方法を用いるのは、ProfileType に基づいてプロパティ セットをさまざまなカスタム EntityPropertyManager にマップできるようにするさまざまな ProfileManager デプロイメントを必要とする複数のユーザ タイプをサポートしなければならない場合だけです。
この方法の例としては、customer.jar 内のカスタム CustomerProfileManager のデプロイメントがあります。 CustomerProfileManager は、「CustomerProperties」プロパティ セット内のプロパティに対してカスタム EntityPropertyManager (CustomerPropertyManager) を使用するようにコンフィグレーションされています。 usermgmt.jar 内の UserManager EJB は、「WLCS_Customer」ProfileType を、ProfileManager のカスタム デプロイメントである CustomerProfileManager にマップするようにコンフィグレーションされています。
新しい ProfileManager をコンフィグレーションしデプロイするには、以下の手順に従います。
さらに、UserProfileManager のホーム インタフェースとリモート インタフェースを再パッケージ化して独自のパッケージ化(たとえば、examples.usermgmt.MyProfileManagerHome、examples.usermgmt.MyProfileManager)に合わせたい場合には、それらを独自のインタフェースで拡張することさえできます。
ただし、以下のようにして、Bean 実装クラスを入れ替えるだけで十分です。
<env-entry> 要素を作成して、プロパティ セットをカスタム EntityPropertyManager にマップする必要があります。 さらに、<ejb-ref> 要素を作成して、プロパティ マッピング (PropertyMapping) で指定したマップ先の名前に ejb/ という接頭辞が付いた参照を EJB にマップする必要もあります。 カスタム EntityPropertyManager のホーム クラス名とリモート クラス名は、カスタム EntityPropertyManager の EJB JAR ファイル内のクラスに一致します。
EntityPropertyManager 実装でプロファイル レコードの作成と削除を扱う場合には、 Creator エントリと Remover エントリも追加する必要があります。 これによって、ユーザ プロファイル レコードの作成時または削除時にはカスタム EntityPropertyManager を呼び出すように、新しい ProfileManager に指示することになります。
コード リスト 6-10 UserManager EJB セクションへの <ejb-ref> の追加
<ejb-ref>
<ejb-ref-name>ejb/ProfileType/UUPExampleUser</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.bea.p13n.usermgmt.profile.ProfileManagerHome</home>
<remote>com.bea.p13n.usermgmt.profile.ProfileManager</remote>
</ejb-ref>
コード リスト 6-11 新しい ProfileManager の <weblogic-enterprise-bean> タグ
<weblogic-enterprise-bean>
<ejb-name>MyProfileManager</ejb-name>
<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>ejb/EntityPropertyManager</ejb-ref-name>
<jndi-name>${APPNAME}.BEA_personalization.
EntityPropertyManager</jndi-name>
</ejb-reference-description>
<ejb-reference-description>
<ejb-ref-name>ejb/PropertySetManager</ejb-ref-name>
<jndi-name>${APPNAME}.BEA_personalization.
PropertySetManager</jndi-name>
</ejb-reference-description>
<ejb-reference-description>
<ejb-ref-name>ejb/MyEntityPropertyManager
</ejb-ref-name>
<jndi-name>${APPNAME}.BEA_personalization.
MyEnitityPropertyManager</jndi-name>
</ejb-reference-description>
</reference-descriptor>
<jndi-name>${APPNAME}.BEA_personalization.
MyProfileManager</jndi-name>
</weblogic-enterprise-bean>
<ejb-reference-description> を作成して、カスタム EntityPropertyManager の <ejb-ref> を JNDI 名にマップする必要があります。 この JNDI 名は、カスタム EntityPropertyManager の JAR ファイル内の weblogic-ejb-jar.xml で割り当てた名前に一致しなければなりません。
${APPNAME} という文字列置換変数に注意してください。 WebLogic Server EJB コンテナでは、この変数をエンタープライズ アプリケーション名に自動的に置き換えて、JNDI 名のスコープをそのアプリケーションに限定します。
コード リスト 6-12 新しい ProfileManager の<transaction-isolation> タグ
<transaction-isolation>
<isolation-level>TRANSACTION_READ_COMMITTED
</isolation-level>
<method>
<ejb-name>MyProfileManager</ejb-name>
<method-name>*</method-name>
</method>
</transaction-isolation>
コード リスト 6-13 カスタム EntityPropertyManager EJB モジュールのエントリの追加
<module>
<ejb>UUPExample.jar</ejb>
</module>
コード リスト 6-14 META-INF/application-config.xml への <Cache> タグの追加
<Cache
Name="UUPExampleCache" TimeToLive="60000"
/>
プロパティ セット定義の作成
プロパティ セットとは、パーソナライゼーション属性のスキーマのことです。 プロパティ セットは、特定目的のプロパティ群に名前を付けるのに便利な手段です。 たとえば、sampleportal-project の「Avitek」というユーザ プロファイルには、FirstName(名)、LastName(姓)、HomePhone(自宅電話番号)、Email(電子メール アドレス)、CustomerType(顧客種別)といった、 e コマース顧客のプロパティを定義するプロパティ セットがあります。 プロパティ セットの作成と、それらのプロパティ セットを構成するプロパティの定義には、 E-Business Control Center を使用します。
この節では、カスタム ユーザ プロファイルの登録方法を説明します。
カスタム ユーザ プロファイルを登録する
プロパティ セット エディタは、すべてのプロパティ セットに対して同じように機能します。 ここでは、E-Business Control Center を用いて、ユーザ プロファイル プロパティの作成と変更を行います。 これらの例は、カスタム ユーザ プロファイルの登録に使用することができます。 これと同じ手順に従って、イベント、 HTTP リクエスト、HTTP セッション、およびカタログ構造のプロパティ セットを作成および変更することができます。
カスタム ユーザ プロファイルを登録するには、以下の手順を実行します。
ブール型または単値かつ単一デフォルトのプロパティ
ブール型プロパティまたは、単値および単一デフォルト(制限なし)を持つプロパティのデフォルト値を入力するには、 以下の手順を実行します。
多値かつ単一デフォルト、複数デフォルト、全デフォルトのプロパティ
複数のプロパティ値を入力し任意の数のデフォルト(制限なし)を設定するには、以下の手順を実行します。
日時値を取るプロパティ
日時値を取るプロパティでは、[選択モード] と [値の範囲] のすべての設定が使えます。
日時値を入力し任意の数のデフォルトを設定するには、以下の手順を実行します。
図6-12 [データ型] メニューでの [日時] の選択
登録済みカスタム イベントを更新する
カスタム イベントのコードに変更を加えるたびに、そのイベントの登録を更新しなければなりません。 登録を更新すれば、カスタム イベントの変更が E-Business Control Center に認識され、 キャンペーン開発者がE-Business Control Center を用いてそのイベントの参照元のシナリオ アクションをすべて修正するのに役立ちます。
カスタム イベントを更新するには、以下の手順を実行します。
図6-18 イベント エディタ ウィンドウ
図6-20 [プロパティ値の入力] ウィンドウ
訪問者自主登録の有効化
Web サイトへの訪問者は多くの場合、引き続きサイトの機能を利用するには登録する必要があります。たとえば、オンライン書店では、訪問者は登録して初めて実際に書籍などの商品を買うことができるでしょう。 登録は、それによって訪問者が Web サイトをより利用しやすくなるので有益な機能です。各取引に必要な訪問者関連情報(顧客プロファイルと呼ばれる)が格納され、取引のたびに訪問者がそうした情報を再入力しなくても済むようになるからです。 また、企業にとっても、訪問者データが格納されることで、自社のサービスを利用しそうな人々についての情報を維持管理できるようになるので便利です。
WebLogic Portalには、訪問者自主登録用の顧客プロファイルを作成するための JSP Webflow テンプレート一式が用意されています。 これらのコンポーネントをそのまま使用することも、特定のニーズに合わせて修正することもできます。 この節では、これらの JSP と Webflow コンポーネントについて説明し、その使用方法を解説します。
顧客プロファイル用 JSP を実装する
WebLogic Portal には、訪問者自主登録を機能させるのに使用できる 5 つの JSP テンプレートから成る Login and Registration サービスが用意されています。 これらのテンプレートをそのまま使用することも、特定のニーズに合わせて修正することもできます。 この節では、これらのテンプレートについて説明し、それらの実装方法を示します。
この節では、以下のテンプレートを取り上げます。
login.jsp
login.jsp テンプレートは、まだサイトに登録していない顧客に、以後サイトを利用するための登録(新規顧客プロファイルの作成)を行うことのできるページへのエントリ ポイントを提供します。 このページはチェックアウト プロセスへのエントリ ポイントなので、顧客がショッピングを続けられるようにするメカニズム(セッションなど)もこのページで設定されます。
解説
login.jsp テンプレートを用いて書式化された Web ページの例を図 6-21 に示します。
図6-21 login.jsp を用いて書式化された Web ページ
login.jsp の動作の仕組み 未登録の顧客がポートレット内の [Create] をクリックした場合は、次にロードされるページ (newuser.jsp) で、顧客はプロファイルおよびユーザ名/パスワードを作成できます。 登録が済むと、顧客は自動的にログインし、続いて newusercreation.jsp テンプレートに移動します。そこでは顧客はショッピングを続けたり、ショッピング カートの内容を確認したり、チェックアウトすることができます。 自動ログインに失敗すると、顧客にユーザ名とパスワードを入力させるために login.jsp テンプレートがロードされます。 顧客がログインに失敗すると、badlogin.jsp がロードされます。 注意: チェックアウトに進むオプションは、顧客のショッピング カートに商品が入っている場合にのみ、newusercreation.jsp テンプレートに表示されます。 イベント login.jsp テンプレートでは、顧客に 2 つのボタンが表示されますが、イベントと見なされるのは、そのうちの 1 つだけです。 イベントが発生すると、デフォルトWebflow において特定の応答がトリガされて、顧客は操作を続けることができます。 もう一方のボタンは HTML の標準の送信ボタンで、認証用にWebLogic Server にページを送り返すためのものです。 イベントとそれによって呼び出されるビジネス ロジックを表6-1 に示します。
[Log in] ボタンは Webflow の応答をトリガするイベントではありません。 顧客がこのボタンをクリックすると、WebLogic Server(具体的には、WebLogic Portal の RDBMS レルム)に制御が移ります。 WebLogic Server は HTTP リクエストを憶えておき、顧客のユーザ名とパスワードの組み合わせが正しいかどうかを判断したあと、そのリクエストを使って Webflow を再度呼び出します。 badlogin.jsp badlogin.jspテンプレート(図 6-22 に示す)は、ユーザ名とパスワードの無効な組み合わせが入力されたことを顧客に通知し、顧客がユーザ名とパスワードの有効な組み合わせを入力してサイトに再度ログインを試みることができるようにします。 このテンプレートの動作は、エラー メッセージを除き、前述の login.jsp テンプレートとまったく同じです。 図6-22 badlogin.jsp を用いて書式化された Web ページ
newuser.jsp newuser.jsp テンプレート では、新規顧客が顧客プロファイルを作成して、e コマース サイトに登録できます。顧客プロファイルには、顧客の個人情報、届け先情報、支払い情報(省略可能)、およびアカウント情報が記載されます。 解説 newuser.jsp を用いて書式化された Web ページのブラウザでの表示例を示します。 図6-23 newuser.jsp を用いて書式化された Web ページ- 個人情報
newuser.jsp の動作の仕組み newuser.jsp は、顧客ログイン ページ (login.jsp) のあとに表示されるページです。 顧客が最初のプロファイル情報を入力したときにエラーがなければ、顧客は自動的にログインしてウェルカム ページに移動します。顧客はそのページにあるさまざまなリンクを選択して、ショッピングを続けるかチェックアウトすることができます (newusercreation.jsp)。 エラーがあった場合には、newuser.jsp が再ロードされ、無効なフォーム フィールドの脇に、そのエラーに対するメッセージが表示されます。 このテンプレートは、Webflow の sampleapp_user ネームスペースの一部です。 newuser.jsp にインクルードされる JSP テンプレート newuser.jsp には、実装時に補助的 JSP テンプレートが 3 つインクルードされます。 これらの JSP は、顧客に届け先住所、クレジット カード情報、およびデモグラフィック情報の入力を求めるすべての JSP テンプレートで行われるフォーム表示とエラー処理の両方についての標準フォーマットを提供します。 以下では、これらのテンプレートについて 説明します。 newaddresstemplate.inc このテンプレートは、顧客に届け先住所の入力を求めるすべての JSP テンプレート(addaddress.jsp を除く)に組み込まれているフォーム フィールド表示とエラー処理の両方についての標準フォーマットを提供します。 フォーム フィールドがテーブル形式で配置されており、フォームが送信されると、newaddresstemplate.inc テンプレートに関連付けられている入力プロセッサがフォームの有効性を検証して、すべての必須フィールドに値が入力されていることを確認します。 エラーが検出された場合には、newaddresstemplate.inc テンプレートが再表示されます。 このとき、画面の上部にエラー メッセージが表示され、無効なフィールドのラベルが赤で表示されます(本来のラベルの色は黒)。 正しく入力された情報は、フォームにそのまま表示されます。 上記の動作は、newaddresstemplate.inc テンプレートで getValidatedValue JSP タグを用いて呼び出されます(リスト 6-15 に示す)。 コード リスト 6-15 newaddresstemplate.inc での getValidatedValue JSP タグの使い方 newcctemplate.inc このテンプレートは、顧客にクレジット カード/支払情報の入力を求めるすべての JSP テンプレートで行われるフォーム表示とエラー処理の両方についての標準フォーマットを提供します。 フォーム フィールドがテーブル形式で配置されており、フォームが送信されると、newcctemplate.inc テンプレートに関連付けられている入力プロセッサがフォームの有効性を検証して、すべての必須フィールドに値が入力されていることを確認します。 エラーが検出された場合には、newcctemplate.inc テンプレートが再表示されます。 このとき、画面の上部にエラー メッセージが表示され、無効なフィールドのラベルが赤で表示されます(本来のラベルの色は黒)。 正しく入力された情報は、フォームにそのまま表示されます。 上記の動作は、newcctemplate.inc テンプレートで getValidatedValue JSP タグを用いて呼び出されます(リスト 6-16 に示す)。 コード リスト 6-16 newcctemplate.inc での getValidatedValue JSP タグの使い方 newdemographictemplate.inc このテンプレートは、顧客にデモグラフィック情報の入力を求めるすべての JSP テンプレートで行われるフォーム表示とエラー処理の両方についての標準フォーマットを提供します。 ラジオ ボタンがテーブル形式で配置されており、フォームが送信されると、newdemographictemplate.inc テンプレートに関連付けられている入力プロセッサがフォームの有効性を検証して、すべての必須フィールドに値が入力されていることを確認します。 エラーが検出された場合には、newdemographictemplate.inc テンプレートが再表示されます。 このとき、フォーム ページの上部にエラー メッセージが表示され、無効なフィールドのラベルが赤で表示されます(本来のラベルの色は黒)。 正しく入力された情報は、フォームにそのまま表示されます。 上記の動作は、newdemographictemplate.inc テンプレートで getValidatedValue JSP タグを用いて呼び出されます(リスト 6-17 に示す)。 コード リスト 6-17 newdemographictemplate.inc での getValidatedValue JSP タグの使い方 イベント newuser.jsp テンプレートでは 2 つのボタンが顧客に表示され、そのそれぞれがイベントと見なされます。 これらのイベントによってデフォルト Webflow の特定の応答がトリガされて、顧客は操作を続けることができます。 この応答では、別の JSP がロードされることもありますが、通常は、入力プロセッサまたは Pipeline コンポーネントが先に呼び出されます。これらのイベントによって呼び出されるビジネス ロジックを 表6-2 に示します。
<!-- 顧客の届け先住所情報用のフィールドをまずテーブルに表示する -->
<table width="90%" border="0">
<tr>
<td width="26%"><webflow:getValidatedValue
fieldName="<%=HttpRequestConstants.CUSTOMER_SHIPPING_ADDRESS1%>"
fieldValue="customerShippingAddress1" fieldStatus="status"
validColor="black" invalidColor="red" unspecifiedColor="black"
fieldColor="fontColor" />
<div class="tabletext"><font color=<%= fontColor %>><b>Address </b>
</font>
</div>
</td>
<td width="74%"> <input type="text"
name="<%=HttpRequestConstants.CUSTOMER_SHIPPING_ADDRESS1%>"
value="<%=customerShippingAddress1%>" size="30" maxlength="30">*
</td>
</tr>
.
.
.
</table><table>
.
.
.
<td width="27%"><webflow:getValidatedValue
fieldName="<%=HttpRequestConstants.CUSTOMER_CREDITCARD_HOLDER%>"
fieldValue="customerCreditCardHolder" fieldStatus="status"
validColor="black" invalidColor="red"
unspecifiedColor="black"
fieldColor="fontColor" />
<div class="tabletext">
<font color=<%= fontColor %>><b>Name on card</b>
</font>
</div>
</td>
<td width="73%"> <input type="text"
name="<%=HttpRequestConstants.CUSTOMER_CREDITCARD_HOLDER%>"
value="<%=customerCreditCardHolder%>" size="30" maxlength="50">*
</td>
.
.
.
</table><webflow:getValidatedValue fieldName="<%=HttpRequestConstants.CUSTOMER_GENDER%>"
fieldDefaultValue="<%=(String)currentPropertyValue%>"
fieldValue="genderValue" fieldStatus="status" validColor="black"
invalidColor="red" unspecifiedColor="black" fieldColor="fontColor" /> <td width="26%"><div class="tabletext"><b><font color=<%= fontColor %>>
Gender*</font></b></div>
</td>
<td width="74%">
<% // Gender (性別) のプロパティ値を取得する
propertyBean.setPropertyName(GENDER);
property = propertyBean.getPropertyObject();
if(property == null || property.getRestrictedValues() == null)
arr = new Object[0];
else arr = property.getRestrictedValues().toArray();%> <ps:getRestrictedPropertyValues propertySetName="Demographics"
propertySetType="USER" propertyName="<%= GENDER %>" id="arr"
result="foobar" /> <table width="100%" border="0" cellpadding="0"
cellspacing="0"><es:forEachInArray id="valueObject" array="<%= arr %>"
type="String">
<tr>
<td width="4%"><input type="radio" name="
<%= HttpRequestConstants.CUSTOMER_GENDER %>" value="<%= valueObject %>"
<% if ( valueObject.equals(genderValue) ) { %>CHECKED<% } %>></td>
<td><%= valueObject %></td>
</tr>
</es:forEachInArray>
</table>
newuser.jsp のフォーム フィールド newuser.jsp テンプレートの主な目的は、 HTML のさまざまなフォーム フィールドを用いて顧客からプロファイル情報を入力できるようにすることです。 また、このテンプレートは、Webflow に必要な情報を渡すためにも使用されます。 newuser.jsp テンプレートで使用されるフォーム フィールド(大部分は他のテンプレートからインポートされる)と、そのそれぞれについての説明を表6-4 にまとめます。 注意: フォーム フィールドが別のテンプレートからインポートされる場合には、解説欄にそう明記します。 そうしたインポート情報の記載のないフォーム フィールドは、newuser.jsp テンプレート内にあります。
注意: JSP コード内でリテラルとして扱われるパラメータは、引用符で囲んで示されています。一方、リテラルでないパラメータを JSP 内で使用するには、スクリプトレット構文(たとえば、 newusercreation.jsp newusercreation.jsp テンプレートは、新しくユーザ プロファイルを作成した顧客に、ログインと登録が完了したことを知らせます。 また、そこからショッピングに戻るためのいくつかのナビゲーション オプションも提供されます。 解説 newusercreation.jsp を用いて書式化された Web ページの例を 図 6-24 に示します。 図6-24 newusercreation.jsp を用いて書式化された Web ページ
<%= HttpRequestConstants.USER_NAME %> など)に従う必要があります。
チェックアウトに進むオプションは、顧客のショッピング カートに商品が入っている場合にのみ、newusercreation.jsp テンプレートに表示されます。 商品が入っていない場合には、図 6-25 に示すように、newusercreation.jsp テンプレートにこのオプションは表示されません。 図6-25 newusercreation.jsp を用いて書式化された Web ページ(ショッピング カートが空の場合)
newusercreation.jsp の動作の仕組み 新規ユーザ プロファイルの作成が正常に終了し、JAAS (Java Authentication and Authorization Service) を用いた自動ログインが完了すると、顧客に対して newusercreation.jsp テンプレートが表示されます。 顧客が新しくプロファイルを作成したあとで自動ログインが完了しなかった場合には、顧客に対して、newusercreation.jsp テンプレートではなく、login.jsp テンプレートが再び表示されます。手動ログインの場合には、顧客に対して main.jsp テンプレートが表示されます。 注意: 以前サイトを利用したときにプロファイルを作成してある顧客が login.jsp テンプレートを用いてログインした場合には、顧客がアクセスしようとしていた保護ページが表示されるだけです。 newusercreation.jsp テンプレートで顧客が行えることは、ショッピング カートに戻ること (shoppingcart.jsp)、ショッピングを続けること、チェックアウト プロセスに進むこと (shipping.jsp)、注文履歴を閲覧すること (orderhistory.jsp)、自分のプロファイルを閲覧すること (viewprofile.jsp)、支払履歴を閲覧すること (paymenthistory.jsp)、ログアウトすること、そしてメインのカタログ ページに戻ること (main.jsp) です。 注意: チェックアウトに進むオプションは、顧客のショッピング カートに商品が入っている場合にのみ、newusercreation.jsp テンプレートに表示されます。 このテンプレートは、Webflow の sampleapp_user ネームスペースの一部です。 イベント 顧客がボタンをクリックして注文の詳細を閲覧する操作は、すべてイベントと見なされます。 イベントのたびに、デフォルト Webflow の特定の応答がトリガされて、顧客は操作を続けることができます。 この応答では、別の JSP がロードされることもありますが、通常は、入力プロセッサと Pipeline の両方またはいずれか一方が先に起動されます。これらのイベントと、それによって呼び出されるビジネス ロジックを 表6-5 に示します。
newuserforward.jsp newuserforward.jsp テンプレートは、未登録のユーザが静的 URI の記述された広告プレースホルダをクリックしたときに、そのユーザを newuser.jsp に誘導するためのものです。 これが必要なのは、プレースホルダで動的 URI がサポートされていないからです。 newuserforward.jsp テンプレートによって、ユーザには newuser.jsp が表示されます。 さらに、newuserforward.jsp は、セキュリティの確保されていない接続からセキュリティの確保された接続への切り替え(.http から .https へ)の橋渡しも行います。 解説 このテンプレートは、Web ページなどの目に見える出力を表示しません。 そのコードは、リスト 6-18 に示すとおりです。 コード リスト 6-18 newuserforward.jsp のコード 表6-6 に主要なテンプレート コンポーネントを示します。
<% String s = com.bea.p13n.appflow.webflow.WebflowJSPHelper.
createWebflowURL(pageContext, "sampleapp_main", "login.jsp",
"button.createUser", true); %><% response.sendRedirect(s) ; %>
newuserforward.jsp の動作の仕組み newuserforward.jsp は、匿名ユーザからアクセスできる任意のページのあとに表示される可能性があります。 ただし、このテンプレートが必要になるのは、未登録のユーザが広告プレースホルダをクリックし、登録するよう勧められた場合だけです。 プレースホルダ内の静的 URI が newuserforward.jsp にアクセスし、今度はそのテンプレートによって、ユーザに newuser.jsp テンプレートが表示されます。 このテンプレートは、Webflow の sampleapp_main ネームスペースの一部です。 イベント newuserforward.jsp テンプレートで扱われるイベントは 1 つで、このイベントによってデフォルト Webflow 内の特定の応答がトリガされ、顧客が処理を続行できるようになります。 この応答では、別の JSP がロードされることもありますが、通常は、入力プロセッサまたは Pipeline が先に呼び出されます。 このイベントとそれによって呼び出されるビジネス ロジックを表6-7 に示します。
usercreationforward.jsp usercreationforward.jsp テンプレートは、登録と、JAAS を用いた自動ログイン プロセスが Webflow で完了したあと、新規ユーザに newusercreation.jsp テンプレートを表示するためのものです。 ユーザが作成されたらリクエストをフラッシュする必要がありますが、その処理は usercreationforward.jsp テンプレートで行われます。 解説 このテンプレートは、Web ページなどの目に見える出力を表示しません。 そのコードは、リスト 6-19 に示すとおりです。 コード リスト 6-19 usercreationforward.jsp のコード usercreationforward.jsp テンプレートでは、com.bea.p13n.appflow.webflow.WebflowJSPHelper パッケージ内の Java クラスを使用しており、以下のインポート文を含んでいる必要があります。 usercreationforward.jsp の動作の仕組み usercreationforward.jsp は、newuser.jsp テンプレートのあとに表示されるページです。 新規ユーザは、自分のプロファイルを保存すると、 JAAS により自動ログインします。ログインが正常に完了すると、以前のリクエストをフラッシュする必要があるので、ユーザを newusercreation.jsp テンプレートにリダイレクトするために usercreationforward.jsp が必要になります。 このテンプレートは、Webflow の sampleapp_user ネームスペースの一部です。 イベント usercreationforward.jsp テンプレートで扱われるイベントは 1 つで、このイベントによってデフォルト Webflow 内の特定の応答がトリガされ、顧客が処理を続行できるようになります。 この応答では、別の JSP がロードされることもありますが、通常は、入力プロセッサまたは Pipeline が先に呼び出されます。 このイベントとそれによって呼び出されるビジネス ロジックを表6-8 に示します。
<% String s = WebflowJSPHelper.createWebflowURL(pageContext,
"sampleapp_user", "usercreationforward.jsp",
"forward.usercreation", true); %><% response.sendRedirect(s) ; %>
<%@ page import="com.bea.p13n.appflow.webflow.
WebflowJSPHelper*" %>
訪問者自主登録で用いられる Webflow コンポーネント 顧客プロファイル用 JSP を実装するで説明したテンプレートでは、入力プロセッサおよび Pipeline と呼ばれる Webflow コンポーネントを用いて、訪問者自主登録を機能させるのに必要なビジネス ロジックの多くを実行します。 この節では、実装されている主要な Webflow コンポーネントについて説明します。 以下のトピックスを扱います。
注意: Webflow の使用、作成、あるいは変更と、入力プロセッサおよび Pipeline コンポーネントの使用については、ポータル ナビゲーションのセットアップ を参照してください。
入力プロセッサ
以下の入力プロセッサは、Webflow メカニズムから起動されたときに、より複雑な訪問者登録処理を実行するために呼び出される Java クラスを表します。
入力プロセッサの詳細については、ノードのタイプを参照してください。
CustomerProfileIP
CustomerProfileIP(入力プロセッサ名はすべて末尾に「IP」という文字が付く)は、newuser.jsp の入力を処理し、顧客が自分のプロファイルを保存できるようにします。 さらに、CustomerValue オブジェクトを作成して Pipeline Processor セッションに格納します。
LoginCustomerIP LoginCustomerIP は、login.jsp の入力を処理し、サイトのセキュリティ保護付きページに顧客からアクセスできるようにします。 さらに、CustomerValue オブジェクトを作成して Pipeline Processor セッションに格納します。
Pipeline コンポーネント この節では、Customer Login and Registration サービスの JSP テンプレートに関連付けられている各 Pipeline コンポーネントについて簡単に説明します。 これらの Pipeline は、訪問者登録に関係する特定タスクの実行を Webflow で開始する際に呼び出されるプロセッサ ノードです。 注意: Pipeline コンポーネントの中には、他の基本 Pipeline コンポーネントを拡張するものがあります。 基本クラスの詳細については、『Javadoc』を参照してください。 Pipeline コンポーネントの詳細については、ノードのタイプを参照してください。 この節では、以下の Pipeline コンポーネントについて説明します。
RegisterUserPC
RegisterUserPC(Pipeline コンポーネント名はすべて末尾に「PC」という文字が付く)は 、Pipeline Processor セッションから CustomerValue オブジェクトとパスワードを取得し、CUSTOMER 属性を作成します。
EncryptCreditCardPC EncryptCreditCardPC は、CREDITCARD_KEY オブジェクトを用いて顧客のクレジット カード情報を取得し、クレジット カード番号を暗号化したあと、修正済みのクレジット カード情報を PipelineSession CustomerValue 属性に追加し直します。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |