BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

開発者ガイド

 前 次 目次 索引 PDFで表示  

Commerce サービスのセットアップ

WebLogic Portal で利用できる重要なコマース サービスには、課税や支払などのビジネス トランザクション サービスと、プロダクト カタログ サービスがあります。 これらのサービスに関連する開発作業としては、ローカルの課税サービスとサードパーティの課税サービスの統合、およびローカルの支払サービスとサードパーティの支払サービスの統合があります。 また、プロダクト カタログ サービスについての開発作業には、カタログ データベースへのデータのロードと、カスタム カタログ サービスの作成および機能拡張があります。

この章では、以下の内容について説明します。

 


ポータルとビジネス トランザクション サービスの統合

WebLogic Portal は、課税サービスや支払サービスなどのビジネス トランザクション サービスと統合することができます。 ポータルにこれらのサービスを付け加えると、外部サービスをポータルでローカルに利用できるようになるので、ポータルの機能が拡張されます。 これらのサービスとの統合は開発任務の 1 つであり、そこでは、エンタープライズ アプリケーションに含まれている特定の EJB と、特定のコンフィグレーション ファイルに記述されている URL の更新が必要になります。 ここでは、こうした修正について説明します。

この節では、以下のトピックを扱います。

課税サービスと統合する

WebLogic Portal にインストールされている Tax Web サービスは、デフォルトの TaxCalculator EJB から受け取った取引に関する税額計算を処理するためのデフォルトのフレームワークを提供します。 ビジネス メソッドには、注文に対する課税を遂行するための標準ワークフローが実装されています (Tax Web サービスそのものは、Web サービス化するためのコードでステートレス セッション EJB をラップしたものです)。

エンタープライズ アプリケーションを Tax Web サービスと統合するには、TaxCalculator EJB か Tax Web サービスのどちらかを修正する必要があります。 どちらを修正するかは、自らの組織とサードパーティ税額計算ベンダのどちらが Web サービスのホストになるかで決まります。

重要な注意: WebLogic Portal に付属しているデフォルトの Tax Web サービスでは、注文に対して自動的に 5% の課税を行います。 こうしたデフォルトの税率適用は、実際の運用現場で用いるためのものではありません。 サードパーティ ベンダの課税サービスと統合して、税額を適切に計算する必要があります。

サードパーティ ベンダが Web サービスのホストになる場合

サードパーティ ベンダが Tax Web サービスのホストになる場合には、そのベンダが、同 Web サービスをベンダ プログラムの API と統合し、Web サービス内部の TaxWebService EJB を修正します。この EJB の修正では、SOAP 呼び出し (エンタープライズ アプリケーションの TaxCalculator EJB から Web サービスに送信される SOAP 呼び出し) がベンダ API にとって解釈可能なメッセージに変換され、TaxCalculator EJB に返すための SOAP 呼び出しが適切に作成されるようにします。

ベンダをホストとする Web サービスに接続するには、以下の手順に従います。

  1. Web サービスの tax.jar ファイル内の AVS*.class ファイルまたは Tax*.class ファイルがベンダによって変更されている場合には、変更されたファイルをエンタープライズ アプリケーションにコピーします。 これらのクラスのソース コードは以下の場所にあります。
    <BEA_HOME>¥Weblogic700¥samples¥portal¥wlcsDomain¥beaApps¥
    wlcsApp¥src¥examples¥wlcs¥sampleapp¥tax¥

  2. コマンド ラインから javac を実行するか、あるいは使用している Java エディタの指示に従って、上記ソース ファイルをコンパイルします。

  3. エンタープライズ アプリケーション内の TaxCalculator EJB の修正がベンダにとって必要な場合には、それを実行して、その EJB からベンダの TaxWebService EJB に適切な SOAP 呼び出しが行われるようにします。 TaxCalculator EJBのソース コードは以下の場所にあります。
    <BEA_HOME>¥Weblogic700¥samples¥portal¥wlcsDomain¥beaApps¥
    wlcsApp¥src¥examples¥wlcs¥sampleapp¥tax¥

  4. コマンド ラインから javac を実行するか、あるいは使用している Java エディタの指示に従って、上記ソース ファイルをコンパイルします。

  5. ソース コードのコンパイルが完了したら、生成されたクラス ファイルをエンタープライズ アプリケーション フォルダ内の wlcsSamples.jar に追加します。 クラス ファイルを .jar ファイルに追加する際には、相対的なディレクトリ構造を変更しないようにしてください。

  6. wlcsSample.jar ファイルに対して EJB コンパイラ (ejbc) を実行します。

  7. アプリケーションの META-INF サブディレクトリ内の application-config.xml ファイルで、<TaxServiceClient> という要素を見つけ、ベンダのサーバ上の TaxWebService WSDL ファイルに接続するように TaxCalculatorWSDL 属性値の URL を変更します。

WebLogic Server は、起動時に application-config.xml ファイルを読み込むので、Web サービスの所在がわかります。

自らの組織が Web サービスのホストになる場合

自らの組織が Tax Web サービスのホストになる場合には、エンタープライズ アプリケーションが動作している JVM (Java Virtual Machine) とは別の JVM に Web サービスをデプロイします。 こうすることで、Web サービスが停止して、その稼働元の JVM がフリーズするような事態になっても、エンタープライズ アプリケーションの JVM は稼働し続けることになります。

自らの組織をホストとする Tax Web サービスに接続するには、以下の手順に従います。

  1. サードパーティ ベンダの税額計算ソフトウェアの API を入手します。

  2. SOAP 呼び出しがサードパーティ ソフトウェア製品の API 記述言語に変換されるように、TaxWebService EJB (Web サービス内の EJB) を修正します。 TaxWebService EJB のソース コードは、以下のディレクトリにあります。
    <BEA_HOME>¥Weblogic700¥samples¥portal¥wlcsDomain¥beaApps¥
    wlcsApp¥src¥examples¥wlcs¥sampleapp¥tax¥

  3. コマンド ラインから javac を実行するか、あるいは使用している Java エディタの指示に従って、上記ソース ファイルをコンパイルします。

  4. ソース コードのコンパイルが完了したら、生成されたクラス ファイルを taxWSApp フォルダ内の tax.jar に追加します。 クラス ファイルを .jar ファイルに追加する際には、相対的なディレクトリ構造を変更しないようにしてください。

  5. tax.jar ファイルに対して Web サービス ジェネレータ (servicegen) を使用して、tax-webservice.war というファイルを作成します。

    servicegen の使い方については、『WebLogic Web サービス プログラマーズ ガイド』(http://edocs.beasys.co.jp/e-docs/wls/docs70/webserv/index.html) を参照してください。

  6. TaxWebService EJB への適切な SOAP 呼び出しが行われるように、エンタープライズ アプリケーション内の TaxCalculator EJB を必要に応じて修正します。 TaxCalculator EJB のソース コードは以下の場所にあります。
    <BEA_HOME>¥Weblogic700¥samples¥portal¥wlcsDomain¥beaApps¥
    wlcsApp¥src¥examples¥wlcs¥sampleapp¥tax¥

  7. コマンド ラインから javac を実行するか、あるいは使用している Java エディタの指示に従って、上記ソース ファイルをコンパイルします。

  8. ソース コードのコンパイルが完了したら、生成されたクラス ファイルをエンタープライズ アプリケーション のルート フォルダ内の wlcsSamples.jar に追加します。 クラス ファイルを .jar ファイルに追加する際には、相対的なディレクトリ構造を変更しないようにしてください。

  9. wlcsSample.jar ファイルに対して EJB コンパイラ (ejbc) を実行します。

  10. アプリケーションの META-INF サブディレクトリ内の application-config.xml ファイルで、<TaxServiceClient> という要素を見つけ、Web サービスのサーバ上の TaxWebService WSDL ファイルに接続するように TaxCalculatorWSDL 属性値の URL を変更します。

WebLogic Server は、起動時に application-config.xml ファイルを読み込むので、Web サービスの所在がわかります。

支払サービスと統合する

WebLogic Portal にインストールされている Credit Card Web サービスは、デフォルトの CreditCardService EJBから受け取ったクレジット カード取引の認可(承認)、売上計上、および決済を処理するためのデフォルトのフレームワークを提供します。 ビジネス メソッドには、クレジット カード取引を遂行するための標準ワークフローが実装されています。 取引の現在の状態が維持管理され、各アクションがログに記録されます (Credit Card Web サービスそのものは、Web サービス化するためのコードでステートレス セッション EJB をラップしたものです)。

エンタープライズ アプリケーションを Payment Web サービスと統合するには、CreditCardService EJB か Credit Card Web サービスのどちらかを修正する必要があります。 どちらを修正するかは、自らの組織とサードパーティ支払処理ベンダのどちらが Web サービスのホストになるかで決まります。

重要な注意: WebLogic Portal に付属しているデフォルトの Payment Web サービスでは常に、あたかもサードパーティの支払サービスに接続しそこで承認を受けたかのように支払情報を送信し、エラーを発生しません。 こうしたデフォルトの支払処理は、実際の運用現場で用いるためのものではありません。 サードパーティ ベンダの支払サービスと統合して、支払処理を適切に行う必要があります。

サードパーティ ベンダが Web サービスのホストになる場合

サードパーティ ベンダが Credit Card Web サービスのホストになる場合には、そのベンダが、同 Web サービスをベンダ プログラムの API と統合し、Web サービス内部の CreditCardWebService EJB を修正します。この EJB の修正では、SOAP 呼び出し (エンタープライズ アプリケーションの CreditCardService EJB から Web サービスに送信される SOAP 呼び出し) がベンダ API にとって解釈可能なメッセージに変換され、CreditCardService EJB に返すための SOAP 呼び出しが適切に作成されるようにします。

ベンダをホストとする Credit Card Web サービスに接続するには、以下の手順に従います。

  1. Web サービスの payment.jar ファイル内の PS*.class ファイルがベンダによって変更されている場合には、変更されたファイルをエンタープライズ アプリケーションにコピーします。 これらのクラスのソース コードは以下の場所にあります。
    <BEA_HOME>¥Weblogic700¥samples¥portal¥wlcsDomain¥beaApps¥
    wlcsApp¥src¥examples¥wlcs¥sampleapp¥payment

  2. コマンド ラインから javac を実行するか、あるいは使用している Java エディタの指示に従って、上記ソース ファイルをコンパイルします。

  3. エンタープライズ アプリケーション内の CreditCardService EJB の修正がベンダにとって必要な場合には、それを実行して、その EJB からベンダの CreditCardWebService EJB に適切な SOAP 呼び出しが行われるようにします。 CreditCardService EJBのソース コードは以下の場所にあります。
    <BEA_HOME>¥Weblogic700¥samples¥portal¥wlcsDomain¥beaApps¥
    wlcsApp¥src¥examples¥wlcs¥sampleapp¥payment

  4. コマンド ラインから javac を実行するか、あるいは使用している Java エディタの指示に従って、上記ソース ファイルをコンパイルします。

  5. ソース コードのコンパイルが完了したら、生成されたクラス ファイルをエンタープライズ アプリケーション フォルダ内の wlcsSamples.jar に追加します。 クラス ファイルを .jar ファイルに追加する際には、相対的なディレクトリ構造を変更しないようにしてください。

  6. wlcsSample.jar ファイルに対して EJB コンパイラ (ejbc) を実行します。

  7. アプリケーションの META-INF サブディレクトリ内の application-config.xml ファイルで、<PaymentServiceClient> という要素を見つけ、ベンダのサーバ上の CreditCardWebService WSDL ファイルに接続するように PaymentWebServiceWSDL 属性値の URL を変更します。

WebLogic Server は、起動時に application-config.xml ファイルを読み込むので、Web サービスの所在がわかります。

セキュリティに関する重要な注意

Web サービスは SOAP(すなわち、XML over HTTP)に基づいているので、クレジット カード情報の受け渡しは Web を介してプレーン テキストで行われます。 こうした情報は、盗聴中のハッカーに不正な目的で探知されるおそれがあります。 そのため、クレジット カード処理サービス プロバイダへの専用線を設置し、やり取りされる HTTP 通信にセキュア ソケット レイヤ (SSL) を付け加えることを強くお勧めします。 また、通信内容をすべて暗号化するクレジット カード プロバイダを選ぶことも必要です。

自らの組織が Web サービスのホストになる場合

自らの組織が Credit Card Web サービスのホストになる場合には、エンタープライズ アプリケーションが動作している JVM (Java Virtual Machine) とは別の JVM に Web サービスをデプロイすることを強くお勧めします。 こうすることで、Web サービスが停止して、その稼働元の JVM がフリーズするような事態になっても、エンタープライズ アプリケーションの JVM は稼働し続けることになります。

自らの組織をホストとする Credit Card Web サービスに接続するには、以下の手順に従います。

  1. サードパーティ ベンダの支払処理ソフトウェアの API を入手します。

  2. SOAP 呼び出しがサードパーティ ソフトウェア製品の API 記述言語に変換されるように、CreditCardWebService EJB (Web サービス内部の EJB) を修正します。 CreditCardWebService EJB のソース コードは、以下のディレクトリにあります。
    <BEA_HOME>¥Weblogic700¥samples¥samples¥wlcsDomain¥beaApps¥
    wlcsApp¥src¥examples¥wlcs¥sampleapp¥payment

  3. コマンド ラインから javac を実行するか、あるいは使用している Java エディタの指示に従って、上記ソース ファイルをコンパイルします。

  4. ソース コードのコンパイルが完了したら、生成されたクラス ファイルを paymentWSApp フォルダ内の payment.jar に追加します。 クラス ファイルを .jar ファイルに追加する際には、相対的なディレクトリ構造を変更しないようにしてください。

  5. payment.jar ファイルに対して Web サービス ジェネレータ (servicegen) を使用して、payment-webservice.war というファイルを作成します。

    servicegen の使い方については、『WebLogic Web サービス プログラマーズ ガイド』(http://edocs.beasys.co.jp/e-docs/wls/docs70/webserv/index.html) を参照してください。

  6. CreditCardWebService EJB への適切な SOAP 呼び出しが行われるように、エンタープライズ アプリケーション内の CreditCardService EJB を必要に応じて修正します。 CreditCardService EJBのソース コードは以下の場所にあります。
    <BEA_HOME>¥Weblogic700¥samples¥samples¥wlcsDomain¥beaApps¥
    wlcsApp¥src¥examples¥wlcs¥sampleapp¥payment

  7. コマンド ラインから javac を実行するか、あるいは使用している Java エディタの指示に従って、上記ソース ファイルをコンパイルします。

  8. ソース コードのコンパイルが完了したら、生成されたクラス ファイルをエンタープライズ アプリケーションのルート ディレクトリ内の wlcsSamples.jar に追加します。 クラス ファイルを JAR に追加する際には、相対的なディレクトリ構造を変更しないようにしてください。

  9. wlcsSample.jar ファイルに対して EJB コンパイラ (ejbc) を実行します。

  10. アプリケーションの META-INF サブディレクトリ内の application-config.xml ファイルで、<PaymentServiceClient> という要素を見つけ、Web サービスのサーバ上の CreditCardWebService WSDL ファイルに接続するように PaymentWebServiceWSDL 属性値の URL を変更します。

WebLogic Server は、起動時に application-config.xml ファイルを読み込むので、Web サービスの所在がわかります。

Credit Card Web サービス EJB を修正する際のガイドライン

Payment サービス EJB は、クレジット カード取引の認可(承認)、売上計上、および決済に関係するサービスを提供するステートレス セッション Bean です。 Credit Card Web サービス EJB は、さまざまな支払処理ソリューションとの統合を可能にするインタフェースの役目を果たします。 各取引の現在の状態が維持管理され、各アクションがログに記録されます。 取引の一般的特徴は以下のとおりです。

 


プロダクト カタログのサポート

この節では、プロダクト カタログのサポートに関連する開発作業について説明します。 以下で取り上げる作業の中には、BEA から提供されるリソースを用いて作成されたプロダクト カタログに当てはまるものもあれば、適切なステートレス セッション EJB サービス API を実装することで作成できるカスタム カタログ サービスに当てはまるものもあります。前者については、『管理者ガイド』の「カタログの作成と管理」 (http://edocs.beasys.co.jp/e-docs/wlp/docs70/admin/commerce.htm#1167188) を参照してください。 さらに、JSP を用いてカタログを表示する方法と、カタログ サービスとカタログ キャッシュを統合する方法についても取り上げます。

この節では、以下のトピックを扱います。

プロダクト カタログ データベース スキーマへの商品データのロード

最も重要な開発作業は、商品に関する情報を WebLogic にとって解釈可能な形式に変換することです。 それには、DBLoader プログラムを使用します。 DBLoader を使用すれば、任意のデータをデータベース内の任意のテーブルに一度にロードすることができます。

DBLoader を用いてプロダクト カタログを作成するには、以下の手順に従う必要があります。

ステップ 1: DBLoader の使用準備をする

商品情報をデータベースに追加するには、まず、データベースに関する以下の問題点について検討し、入力ファイルを用意する必要があります。

データベースに関する重要事項を確認する

DBLoader プログラムを使用する際には、以下に示すように、データベースに関して念頭に置いておかなければならない重要なポイントがいくつかあります。

参照整合性と制約: プロダクト カタログのスキーマでは、制約を用いて、テーブル間のデータ整合性および参照整合性を実現します。 たとえば、WLCS_PRODUCTWLCS_CATEGORY についての主キー制約や、WLCS_PRODUCT_CATEGORY についての外部キー制約などです。

主キーとユニークなインデックスがあれば、テーブルにエントリが重複して格納されるおそれはなくなります。 外部キー制約では、親キーがすでに存在することを確認してからデータベースへの子レコードの書き込みを許可することで、参照整合性が確保されます。

注意: WLCS_PRODUCT テーブルと WLCS_CATEGORY テーブルのどのエントリについても、対応するエントリを CATALOG_ENTITY テーブルにも作成する必要があります。

Java における String の取り扱い: Java では、すべての String が Unicode 2.0 文字の列として表されます (Unicode 2.0 は、世界中の主要な言語をサポートする 16 ビット文字エンコーディングです)。 したがって、JVM (Java Virtual Machine) にテキストを読み込む際と、JVM からテキストを書き出す際には、エンコーディング体系を用いて、オペレーティング システムで使用される「ネイティブ」エンコーディングと Unicode 2.0 の間の変換を行う必要があります。 テキスト ファイルに記述されたデータは、そのエンコーディングが JVM(およびオペレーティング システム)のデフォルトのファイル エンコーディングに一致する際には、Unicode 2.0 に自動的に変換されます。

プロダクト カタログ スキーマにロードする商品情報入力ファイルを用意する

この節で示すルールに従って、Web サイトで使用する商品情報を記載した入力ファイル(テキスト ファイル)を作成します。 データベース テーブルごとに、別個のファイルを作成します。

入力ファイルのファイル構造の検証: 入力データ ファイルは、デフォルトでは、パイプで値を区切ったテキスト ファイルです。 この入力ファイルの構造は以下のとおりです。

表14-1 に入力ファイルの構造を示します。

表14-1 入力ファイルの構造

内容

第 1 行

ファイルのヘッダーでは以下を指定する必要がある。

第 2 行

第 2 行では、データのロード先となるテーブル カラムの名前を指定する。 入力ファイルには、主キー カラム(複数の場合あり)がなければならない。 それぞれの主キー カラム名の先頭にはアスタリスク (*) を付ける。 テーブル内の主キー カラム以外のカラムは、すべて NULL がデフォルト値になる。 したがって、NULL が値として許容されるカラムについては、カラム名を省略でき、NULL 以外の値を持つカラムだけを指定する。

第 3 行

第 3 行では、ロード対象となる各カラムのデータ型を指定する。

第 4 〜 第 N 行

入力データ ファイル内の以降の行はすべてデータ値である。

リスト 14-1 に、簡単な入力ファイルの例を示します。

コード リスト 14-1 簡単な入力ファイル

3|WLCS_PRODUCT
*SKU|NAME|IN_STOCK|EST_SHIP_TIME|SPECIAL_NOTES|CREATION_DATE
VARCHAR|VARCHAR|VARCHAR|VARCHAR|VARCHAR|DATE
P123|CoolKid|N|Out of stock until further notice|Special order
only|02-Oct-2000
P124|FastKid|Y|One week|No special order|02-Oct-2000
P125|RadSneakers|Y||regular stock|02-Oct-2000

注意: 簡単な入力ファイルは以下の場所でも参照できます。 <PORTAL_HOME>¥db¥data¥sample¥wlcs¥hardware¥PRODUCT.dat

空の入力文字列: データ ファイル内に空の入力文字列があると、データベースには空の文字列として挿入されます。 値を指定しないカラムが入力レコード内に存在する場合には、その対応する位置(第 2 行で列挙したカラムの位置に一致)に区切り文字(デフォルトでは、カンマ)を入れて、そのことを明示する必要があります。 たとえば、以下のように指定します。

P125|RadSneakers|Y||regular stock|02-Oct-2000

非主キー フィールドの未指定値: 上記の例では、第 4 カラム (EST_SHIP_TIME) の値が指定されていません。 このカラムはデータベース レコードの主キーではないので、これでも問題ありません。 このカラムの値は、空の文字列として格納されます。

注意: データベース内で主キー以外のカラムにヌル値を格納したい場合には、該当するレコード内のそのカラムの位置に NULL と入力しなければなりません。 ただし、NULL を引用符で囲んではいけません。引用符で囲むと、カラムは文字列として格納されることになるからです。

ステップ 2: databaseload.properties ファイルを編集する

DBLoader では、databaseload.properties ファイルに記載された情報を用いて、 データとロード処理についての情報 (たとえば、どのようなドライバ、データベース、あるいはログインを使用するかといったこと) を決定します。 <PORTAL_HOME>¥db ディレクトリにある databaseload.properties ファイルを開きます。 使いたいデータベース用の行についてコメントを外し、正しい設定を入力します。 Pointbase 以外のデータベースを使用する場合は、必ず Pointbase の行をコメントアウトします。

databaseload.properties ファイルで、先頭に # 記号の付いた行はすべてコメント行です。 ファイルには、コメント行と空白行のどちらも含めることができます。

表14-2

プロパティ名

デフォルト値

解説

jdbcdriver

databaseload.properties 参照。

データベースへの接続に使用する JDBC ドライバを指定する。 デフォルトのドライバは、WebLogic に付属の Pointbase JDBC ドライバ。

connection

databaseload.properties 参照。

使用するデータベースに接続するためのドライバ用に必要なデータベース接続文字列。

dblogin

databaseload.properties 参照。

データベース ユーザ名。 ログイン名は操作対象のテーブルに対する読み込み/書き込み特権を持っていなければならない。

dbpassword

databaseload.properties 参照。

データベース ユーザのパスワード。

delimiter

|

入力データ ファイル内で値を区切るのに用いられる認識可能な区切り文字。これは変更可能。 その場合には、区切り記号として別の文字、たとえばアクセント記号 (^) などを選ぶ。

dateformat

dateformat=mm-YY-dd

入力データ内の日付カラムで使われる書式を指定する。 日付の書式はロケール固有である。 databaseload.properties ファイル内の他の書式はコメントアウトする。

timestamptable

WLCS_CATEGORY,
WLCS_PRODUCT

DBLoader による更新追跡の対象となるデータベース テーブルを指定する。 カラム名は Commerce サービスから提供されるスキーマで固定されている。 ただし、他のテーブル(各 WLCS テーブル以外)に対して DBLoader を使用する場合には、その他の独自カラム名を指定できる。

timestampfield

MODIFIED_DATE

WLCS_CATEGORY テーブルと WLCS_PRODUCT テーブルにおいて当該レコードの最新変更日時を示すカラムを指定する。 DBLoader では、 timestamptable プロパティで指定されたテーブル内の各レコードに対する最新の更新日時を判断する際に、このカラムの値を用いる。 カラム名は、Commerce サービスから提供されるスキーマで固定されている。 ただし、他のテーブル(各 WLCS テーブル以外)に対して DBLoader を使用する場合には、その他の独自カラム名を指定できる。

commitTxn

50

何件のレコードをロードしてから更新をデータベースにコミットするかを設定する。 この値が 1 以下の場合には、DBLoader は各レコードのロードが完了するたびにコミットする。

encoding

databaseload.properties ファイルには指定されない。そのため、デフォルト値は Java 2 SDK のプラットフォーム デフォルト値。

マルチバイト文字のエンコーディング タイプを設定する。 指定可能なプロパティ値は UCS2 または UTF8。

データベースに対してデータの書き込みや読み込みを行う際には、システムで使用されるネイティブ文字エンコーディングと Unicode 2.0 は、Java によって透過的に変換される。 これに対してユーザは、特に何もする必要はない。

ただし、システムのネイティブ エンコーディングとは異なるエンコーディングのデータベースに対してデータの書き込み/読み込みを行う必要がある場合には、明示的に変換を行う必要がある。

databaseload.properties ファイルで設定可能な値

ステップ 3: DBLoader プログラムを実行してデータをロードする

これで、入力ファイルの作成と databaseload.properties ファイルのセットアップが完了したので、databaseload スクリプトを実行して DBLoader プログラムを起動します。

databaseload の基本事項を確認する

スクリプトは以下の場所にあります。

注意: PORTAL_HOMEは、WebLogic Portal のインストール先ディレクトリです。

databaseload スクリプトでは、以下のタスクを実行します。

非 Windows 環境 - スクリプトの実行準備をする

非 Windows 環境の場合、databaseload スクリプトを実行するには、その前にまず、databaseload.properties ファイルで指定しているのと同じデータベースを set-environment スクリプトにも指定していることを確認しておきます。 set-environment スクリプトは、databaseload スクリプトと同じディレクトリに入っています。 たとえば、databaseload.properties ファイルに `jdbc:pointbase:server://localhost:9092/wlportal' 接続が指定されている場合には、set-environment スクリプト側では SET DATABASE=POINTBASE となっていなければなりません。

すでに述べたように、DBLoader の動作は WebLogic Portal サーバとは無関係です。 したがって、ローダを実行しようとする場合にサーバを停止する必要はありません。

WebLogic Portal サーバを Oracle と連携して実行する場合には、データがデータベースにロードされる間はパフォーマンスが低下することがあります。

注意: DBLoader を実行する前に、更新対象のテーブルをバックアップしたほうがよいでしょう。 DBLoader プログラムでは、データベース内に履歴レコードを保存しません。

databaseload スクリプトを実行する

スクリプトを実行するコマンドのフォーマットは、以下のとおりです。

>> databaseload { -insert | -update | -delete } input-file.dat

たとえば、以下のように入力します。

>> databaseload -update product_categories.dat

上の例では、DBLoader プログラムは、プロダクト カタログ データベース内の行のうち、category.dat 入力ファイルに指定されている主キーに一致するものを更新します。

操作のタイプの選択: 実行可能な 3 種類の操作、すなわち -insert、-update、または -delete の中から 1 つを選択する必要があります。

UNIX と特権: UNIX システムでは、databaseload.sh ファイルのデフォルトの保護設定に実行特権が含まれている必要があります。 その設定には、通常、以下のコマンドを用います。

$ chmod +x databaseload.sh

複数のテーブルへのデータのロード: 複数テーブル内のデータの挿入、更新、削除を行うには、テーブルごとに、対応する入力ファイル名をパラメータとして指定して、databaseload スクリプトを別々に実行します。 更新されるテーブルの順序については、 他のすべての SQL 文の場合と同じデータ整合性ルールに従わなければなりません。 たとえば、主キー制約のある親テーブルに行を挿入してから、外部キー制約のある子テーブルに行を挿入します。

ステップ 4: DBLoader ログ ファイルを用いてトラブルシューティングする

以下の 2 つの監査トレイル ログ ファイルを用いて、DBLoader 操作の実行時に発生したエラーなどの問題を明らかにすることができます。

この節では、以下のトピックを扱います。

ログ ファイルの検査のタイミングを決定する

各操作のあとすぐにログ ファイルを調べる必要があります。DBLoader の各操作によってログ ファイルが上書きされるからです。 どちらのファイルも、databaseload スクリプトの実行時と同じディレクトリに作成されます。

dbloader.log ファイルを検査する

dbloader.log ファイルには、以下の情報が含まれています。

dbloader.err ファイルを検査する

データベースへのロード操作を実行中にエラーが発生した場合には、dbloader.err ファイルに以下の情報が書き込まれます。

DBLoader プログラムでは、ロードの影響を受けるカラムの数(入力データ ファイルの第 2 行に指定されている)と、各レコード内の入力カラムの数を照合します。 カラム区切り記号はカンマ(デフォルト)であるので、この文字を入力カラムの文字列に含めることはできません。 LONG_DESC(詳細な説明)カラム内の句読点など、余分なカンマをうっかり入れると、エラーが発生し、dbloader.err ファイルに記録されます。 この種のエラーを避けるには、入力データのカラム値を区切るのに用いているカンマの数を注意深くチェックします。 あるいは、別の区切り文字を選んで、databaseload.properties ファイル内に指定します。 詳細については、ステップ 2: databaseload.properties ファイルを編集するを参照してください。

エラーと例外はすべて、DBLoader プログラムが動作しているコンソールに表示されます。 エラーのあるレコードは読み飛ばされ、処理はファイルの最後まで続行します (エラーが発生しても、プログラムはトランザクションをロール バックしません)。

JSP を用いたカタログの表示

Commerce サービス に用意されている JavaServer Pages (JSP) テンプレートと JSP タグを利用すれば、プロダクト カタログのプレゼンテーション部分を容易に作成することができます。 これらのテンプレートは、訪問者がカタログのカテゴリと商品アイテムを閲覧するためのメカニズムを提供します。すなわち、これらのテンプレート内の JSP タグには、そうした機能が実装されているのです。

JSP タグ ライブラリを使用すれば、プロダクト カタログに含まれている商品やカテゴリの属性を簡単に取得することができます。 取得した属性はそのあと、HTML タグを用いて書式化することができます。 カスタム レイアウトの作成には、どのような HTML エディタでも使用することができます。 また、JSP 内にカスタム Java コードを組み込んで、カテゴリや商品を表示することもできます。

カタログ JSP タグを使用するには、JSP に以下のコードを追加することで、cat.tld タグ ライブラリを JSP ファイルにインポートする必要があります。

<%@ taglib uri="cat.tld" prefix="catalog" %>

BEA から提供されるデフォルトのプロダクト カタログを構成する JSP テンプレートでは、以下の 3 つの基本タグが使用されます。

ビジネス ニーズに合わせ、必要に応じて、これら以外のタグを追加することができます。

<catalog:getProperty> タグの使い方

ProductItem または Category から表示用のプロパティを取得するには、<catalog:getProperty> タグ(表14-3 参照)を用います。 プロパティは、明示的プロパティ(Catalog アイテムに対して get メソッドを呼び出して取得できるプロパティ)でも、暗黙的プロパティ(Catalog アイテムに対して ConfigurableEntity getProperty メソッドを呼び出して取得できるプロパティ)でもかまいません。 このタグは、まず、指定されたプロパティを明示的プロパティとして取得できるかどうかを調べます。 それができない場合には、指定されたプロパティは暗黙的プロパティとして取得されます。

表14-3 <catalog:getProperty> タグの属性

タグ属性

必須

データ型

解説

R/C

getterArgument

いいえ

String

明示的プロパティのゲッター メソッドへの引数として指定されるオブジェクトへの参照を示す。

これは、プロパティ セット フレームワークを用いて定義される暗黙的(すなわちカスタム)プロパティの取得にも使用されることがある。その場合には、プロパティ セットのスコープ名は getterArgument となる(以下に示すサンプル 2 を参照)。

オブジェクトは、<%= getterArgumentReference %> という形式で指定する必要があり、また、実行時表現でなければならない。

R

id

いいえ

String

id=”newInstance”

id 属性が指定された場合には、取得されたプロパティの値は、id に割り当てられた変数名で利用できるようになる。 そうでない場合には、プロパティの値は、インラインに埋め込まれる。

C

object

はい

Catalog アイテム

ProductItem オブジェクトまたは Category オブジェクトへの参照を示す。 これは、<%= objectReference %> の形式で指定する必要がある。

R

propertyName

はい

String

propertyName=”propertyName”

取得するプロパティの名前。 明示的プロパティの場合には、プロパティ名は表14-4 に示す値のいずれか。

C

returnType

いいえ

String

returnType=”returnType”

id 属性が指定された場合には、id 属性で指定された変数のデータ型を宣言する。

C


 

表14-4 propertyName に指定可能な値

プロパティ名

カタログ アイテム タイプ

“contributor | coverage | creationDate | creator | description | image | key | language | modifiedDate | name | publisher | relation | rights | source”

CatalogItem
(共通プロパティ)

“jsp”

Category

“availability | currentPrice | format | jsp | msrp | shippingCode | taxCode | type | visible”

ProductItem


 

サンプル 1: アイテムからの JSP の詳細情報の取得 リスト 14-2 では、既存の ProductItem から JSP の詳細情報が取得されます。

コード リスト 14-2 アイテムからの JSP の詳細情報の取得

<%@ taglib uri=”cat.tld” prefix=”catalog” %>
<catalog:getProperty
object="<%= item %>"
propertyName="Jsp"
getterArgument=
"<%= new Integer(ProductItem.DETAILED_DISPLAY_JSP_INDEX) %>"
id="detailJspInfo"
returnType="com.beasys.commerce.ebusiness.catalog.JspInfo"
/>

サンプル 2: getterArgument 属性の使い方 リスト 14-3 では、getterArgument 属性を用いて、以下の特徴を持つプロパティ セット/スキーマの暗黙的(すなわちカスタム)プロパティを取得する方法を示しています。

注意: getterArgument は実行時表現でなければならないため、ここでは、MyCatalog を String 変数に代入し、その変数を getterArgument の値として用いています。

コード リスト 14-3 getterArgument 属性の使い方

<%@ taglib uri=”cat.tld” prefix=”catalog” %>
<% 
String myPropertySetName = "MyCatalog";
ProductItem myProductItem = .....; // ProductItem への参照
%>
<catalog:getProperty
object="<%=myProductItem%>
propertyName="color"
getterArgument="<%=myPropertySetName%>"
/>

<catalog:iterateViewIterator> タグの使い方

ViewIterator に対して反復処理を行うには、<catalog:iterateViewIterator>タグ(表14-5 参照)を用います。 ViewIterator は、固定サイズの一連の View に分割される潜在的に大量のリモート データ群に対するイテレータです。 ViewIterator は、多数の ProductItem または Category から成る集合を返す可能性があるすべての Catalog サービス API メソッドから返されます。 このタグを使用すれば、ViewIterator 内の要素を順に調べ、一度に 1 つのアイテム(ProductItem または Category)を、あるいは一度に 1 つの View 全体(一定数の ProductItem または Category から成る集合)を処理することができます。前者がデフォルトの動作です。 このタグは、処理の完了時に ViewIterator の状態をリセットしないことに注意してください。

表14-5 <catalog:iterateViewIterator> タグの属性

タグ属性

必須

データ型

解説

R/C

id

はい

String

id=”newInstance”

現在、反復処理の対象になっているオブジェクトの値は、id に割り当てられた変数名で利用できるようになる。

C

iterator

はい

ViewIterator

ViewIterator オブジェクトへの参照を示す。
<%= iteratorReference %> という形式で指定する必要がある。

R

iterateByView

いいえ

String

iterateByView=”{true|false}”

ViewIterator に対する反復処理を View 単位で行うか、Catalog アイテム単位で行うかを指定する。 指定されない場合、ViewIterator は Catalog アイテム単位で反復処理される。

C

returnType

いいえ

String

returnType=”returnType”

id 属性で指定された変数のデータ型を宣言する。 デフォルトは java.lang.Object。

iterateByViewtrue の場合には、 データ型は com.beasys.commerce.ebusiness.catalog.View と仮定される。

C

サンプル 1: ViewIterator 内に含まれるカテゴリのキーの表示 リスト 14-4 では、ViewIterator 内の全カテゴリのキーが表示されます。

コード リスト 14-4 ViewIterator 内に含まれるカテゴリのキーの表示

<%@ taglib uri=”cat.tld” prefix=”catalog” %>
<catalog:iterateViewIterator
iterator="<%= myIterator %>"
id="category"
returnType="com.beasys.commerce.ebusiness.catalog.Category">
<%= category.getKey().toString() %>
</catalog:iterateViewIterator>

サンプル 2: ViewIterator 内の全 View の表示 リスト 14-5 では、ViewIterator 内に含まれているすべての View が表示されます。

コード リスト 14-5 ViewIterator 内の全 View の表示

<%@ taglib uri=”cat.tld” prefix=”catalog” %>
<catalog:iterateViewIterator 
iterator="<%= myIterator %>"
id="view"
returnType="com.beasys.commerce.ebusiness.catalog.ViewIterator"
iterateByView=”true”>
<%= view.toString() %>
</catalog:iterateViewIterator>

<catalog:iterateThroughView> タグの使い方

<catalog:iterateThroughView> タグ (表14-6 参照) は、指定された ViewIteratorView について反復処理を行います。 このタグは、View の最後に達するまで、View 内の Catalog アイテムを一度に 1 つずつ反復処理します。 反復対象となる特定の View を(インデックスによって)指定しない場合には、ViewIterator の現在の View が使用されます。 このタグは、処理の完了時に ViewIterator の状態をリセットしないことに注意してください。

表14-6 <catalog:iterateThroughView>タグの属性

タグ属性

必須

データ型

解説

R/C

id

はい

String

id=”newInstance”

現在、反復処理の対象になっているオブジェクトの値は、id に割り当てられた変数名で利用できるようになる。

C

iterator

はい

ViewIterator

ViewIterator オブジェクトへの参照を示す。
<%= iteratorReference %> という形式で指定する必要がある。

R

returnType

いいえ

String

returnType=”returnType”

id 属性で指定された変数のデータ型を宣言する。 デフォルトは java.lang.Object

C

viewIndex

いいえ

Integer

反復処理の対象となる View のインデックス(ViewIterator の先頭からの相対番号)を指定する。 参照先のオブジェクトは、<%= viewIndexIntegerReference %> という形式で指定されなければならない。

R


 

サンプル 1: ViewIterator の現在の View に含まれている全 ProductItem のキーの表示 リスト 14-6 では、指定された ViewIterator の現在の View に含まれているすべての ProductItem のキーが表示されます。

コード リスト 14-6 ViewIterator の現在の View に含まれている全 ProductItem のキーの表示

<%@ taglib uri=”cat.tld” prefix=”catalog” %>
<catalog:iterateThroughView
iterator="<%= myIterator %>"
id="item"
returnType="com.beasys.commerce.ebusiness.catalog.ProductItem">
<%= item.getKey().toString() %>
</catalog:iterateThroughView>

サンプル 2: ViewIterator の先頭の View に含まれている全 ProductItem のキーの表示 リスト 14-7 では、指定された ViewIterator の先頭の View に含まれているすべての ProductItem のキーが表示されます。

コード リスト 14-7 ViewIterator の先頭の View に含まれている全 ProductItem のキーの表示

<%@ taglib uri=”cat.tld” prefix=”catalog” %>
<catalog:iterateThroughView
iterator="<%= myIterator %>"
id="item"
returnType="com.beasys.commerce.ebusiness.catalog.ProductItem"
viewIndex=”new Integer(0)”>
<%= item.getKey().toString() %>
</catalog:iterateThroughView>

ショッピング カートとカタログを接続する

ショッピング カートとカタログを接続するには、カタログに shoppingcart.jsp テンプレートを実装する必要があります。 このテンプレートには、ショッピング カート サービスを正常に実行するのに必要なビジネス ロジックとバックエンド処理の多くを管理するのに用いられる必須の入力プロセッサや Pipeline コンポーネントの実装など、ショッピング カート サービスを管理するコードが記述されています。 このテンプレートをそのまま実装してもよいし、特定のニーズに合うように手を加えてもかまいません。

shoppingcart.jsp を実装する

shopppingcart.jsp を実装するには、まず、この JSP がアプリケーションの適切なポートレット フォルダに格納されていることを確かめます。 そのあと、以下のいずれかを行います。

または

shoppingcart.jsp の動作の仕組み

顧客は、任意の商品カタログ ページ内の [カートの中を見る] ボタン(あるいはそれと同等の機能を果たすもの)をクリックすることで、そのページから shoppingcart.jsp テンプレートに移動できます。 shoppingcart.jsp テンプレートには、顧客のショッピング カートに現在入っている商品が表示されます。 顧客がカート(現在の買物のアクティブな構成要素)に追加した商品ごとに、数量、商品名、定価、実売価格、割引、および小計が、shoppingcart.jsp テンプレートに表示されます。 この情報に従って、注文の合計金額が表示されます。

商品の数量は編集可能なフィールドに表示され、顧客は、このフィールドに新しい数量を入力して [Update] ボタンをクリックするだけで、商品の数量を変更できます。 顧客にとって便利なように、商品名は、プロダクト カタログ内の当該商品の説明にハイパーリンクされています。 また、ショッピング カート内の商品ごとに、[Remove] ボタンと [Buy later] ボタンも用意されています。 [Remove] ボタンをクリックすると、その商品はショッピング カートから削除され、一方、[Buy later] ボタンをクリックすると、その商品は [ショッピング カート] から [保存されているアイテム] リストに移されます。 [保存されているアイテム] リストに表示されている商品ごとに、ハイパーリンク付きの商品名と商品概要が表示されます。 さらに、このセクションの [Remove] ボタンや [Add to cart] ボタンを利用すると、顧客はその商品を完全に削除したり、アクティブな [ショッピング カート] に戻すことができます。

顧客が個々の商品アイテムのリンクをクリックして、その商品についての詳細情報を参照しようとすると、適切なプロダクト カタログ ページが次に表示されます。 顧客が [Update]、[Empty cart]、[Remove]、[Buy later] のいずれかのボタンをクリックした場合には、適切な入力プロセッサや Pipeline が実行されて変更内容が保存されたあと、ショッピング カート ページ (shoppingcart.jsp) に戻ります。

顧客は、ショッピング カートに表示されている内容を見てこれでよいと思ったら、[Check out] ボタンをクリックしてチェックアウト プロセスを開始することができます。 その場合には、配送情報のページ (shipping.jsp) が次に表示されます。

注意: 顧客がまだサイトにログインしていない状態で [Check out] ボタンをクリックした場合には、(shipping.jsp テンプレートがロードされる前に)login.jsp テンプレートが表示され、ログインするように促されます。

[保存されているアイテム] リストの機能を利用するには、顧客はまずログインしておく必要があります。

顧客のショッピング カートに何も商品が入っていない場合には、[Emptycart] ボタン、[Update] ボタン、および [Check out] ボタンは利用できません。

顧客は、ショッピング カートの内容を見てこれでよいと思ったら、[Check out] ボタンをクリックしてチェックアウト プロセスを開始することができます。

注意: 顧客が e コマース サイトにログインしていない場合には、チェックアウト プロセスの次のステップに進む前に、ログインを求められます。

顧客が最初からやり直したいと思った場合には、[Empty cart] ボタンをクリックすれば、ショッピング カートの中身(アクティブなアイテムも保留中のアイテムも)をそっくり空にすることができます。 顧客が買い物を続けたい場合には、[Continue shopping] ボタンをクリックすれば、プロダクト カタログに戻ることができます。

解説

shoppingcart.jsp テンプレートに注釈を付けたものを、図 14-1図 14-2 に示します。図 14-1 に示すのは、まだログインしていない顧客に表示されるページです。

図14-1 shoppingcart.jsp − まだログインしていない訪問者用に書式化された Web ページ


 

図 14-2 に示すのは、ログイン済みの顧客に表示されるページです。

図14-2 shoppingcart.jsp − ログイン済みの訪問者用に書式化された Web ページ


 

このテンプレートのメイン コンテンツ領域には、動的に生成されるデータと静的なコンテンツが両方とも表示されています。 shoppingcart.jsp の動的なコンテンツは、 WebLogic Server JSP タグと Pipeline JSP タグを用いて生成されます。これらの JSP タグでは、アクティブなショッピング カート用のコンテンツも [保存されているアイテム] リスト用のコンテンツも取得し表示します。 shoppingcart.jsp テンプレートの場合、フォーム ポストを行うものには、[Empty cart]、[Check out]、[Remove]、[Update]、および [Continue shopping] があります。

ユーザがログインする前後での変更点は、以下のとおりです。

  1. [ログイン] リンクが [ログアウト] に変わります。

  2. [ようこそ] セクションが表示され、その中に顧客の名前、顧客のプロファイルを参照するためのリンク、およびログアウトのためのリンクが示されます。

  3. [履歴を見る] セクションが表示され、その中に顧客の注文履歴と支払履歴のリンクが示されます。

テンプレートの主要コンポーネントを表14-7 に示します。

表14-7 テンプレート コンポーネント

コンポーネントのタイプ

コンポーネント

インクルードされるテンプレート

タグ ライブラリ

<%@ taglib uri="weblogic.tld" prefix="wl" %>
<%@ taglib uri="webflow.tld" prefix="webflow" %>
<%@ taglib uri="i18n.tld" prefix="i18n" %>

インポートされる Java パッケージ

java.util.*

java.text.*

com.beasys.commerce.axiom.units.*

com.beasys.commerce.ebusiness.shoppingcart.*

com.bea.commerce.ebusiness.price.service.DiscountPresentation

com.bea.commerce.ebusiness.price.quote.OrderAdjustment

com.bea.commerce.ebusiness.price.quote.AdjustmentDetail

com.beasys.commerce.webflow.HttpRequestConstants

com.beasys.commerce.webflow.PipelineSessionConstants

com.bea.p13n.appflow.webflow.WebflowJSPHelper


デフォルト Webflow での位置

顧客は、[カートの中を見る] ボタンをクリックすることで、任意の商品カタログ ページから shoppingcart.jsp テンプレートに移動できます。 顧客は、このページに表示されているショッピング カートの内容を見てこれでよいと思ったら、[Check out] ボタンをクリックしてチェックアウト プロセスを開始することができます。 その場合には、配送情報のページ (shipping.jsp) が次に表示されます。

注意: 顧客がまだサイトにログインしていない状態で [Check out] ボタンをクリックした場合には、(shipping.jsp テンプレートがロードされる前に)login.jsp テンプレートが表示され、ログインするように促されます。

顧客が個々の商品アイテムのリンクをクリックして、その商品についての詳細情報を参照しようとすると、適切なプロダクト カタログ ページが次に表示されます。 顧客が [Update]、[Empty cart]、[Remove]、[Buy later] のいずれかのボタンをクリックした場合には、適切な入力プロセッサや Pipeline が実行されて変更内容が保存されたあと、ショッピング カート ページ (shoppingcart.jsp) に戻ります。

この JSP テンプレートは、sampleapp_order ネームスペース内にあります。

イベント

顧客がショッピング カートの内容を操作するボタンをクリックするたびに、その操作はイベントとみなされます。 各イベントが発生すると、デフォルト Webflow 内の特定の応答がトリガされて、顧客は操作を続けることができます。 この応答によって別の JSP がロードされることもありますが、通常は、入力プロセッサまたは Pipeline が先に呼び出されます。これらのイベントとそれによって呼び出されるビジネス ロジックを表14-8 に示します。

表14-8 shoppingcart.jsp で扱われるイベント

イベント

Webflow の応答

--

InitShoppingCartIP

--

RefreshSavedList

button.checkout

InitShippingMethodListIP

button.deleteItemFromShoppingCart

DeleteProductItemFromShoppingCartIP

button.deleteItemFromSavedList

UpdateSkuIP DeleteProductItemFromSavedList

button.emptyShoppingCart

EmptyShoppingCartIP

button.moveItemToSavedList

UpdateSkuIP

MoveProductItemToSavedList

button.moveItemToShoppingCart

UpdateSkuIP MoveProductItemToShoppingCart

button.updateShoppingCartQuantities

UpdateShoppingCartQuantitiesIP


 

表14-9 では、表14-8 に示した各 Pipeline について簡単に説明します。

表14-9 ショッピング カートに関連付けられている Pipeline

Pipeline

解説

RefreshSavedList

RefreshSavedListPC を含み、トランザクション対応でない。

DeleteProductItemFromSavedList

DeleteProductItemFromSavedListPCPriceShoppingCartPC を含み、トランザクション対応である。

MoveProductItemToSavedList

MoveProductItemToSavedListPCPriceShoppingCartPC を含み、トランザクション対応である。

MoveProductItemToShoppingCart

MoveProductItemToShoppingCartPCPriceShoppingCartPC を含み、トランザクション対応である。


 

注意: InitShoppingCartIPRefreshSavedList Pipeline は shoppingcart.jsp テンプレートに関連付けられていますが、いずれも、このページで発生するイベントでトリガされるわけではありません。 これらはどちらも、shoppingcart.jsp が表示される前に実行されるのです。 InitShoppingCartIP 入力プロセッサが、顧客の買い物に備えて空のショッピング カートを作成するのに対して、RefreshSavedList Pipeline は、顧客がそれまでに保留にしたショッピング カート内商品のリストを取得します。

shoppingcart.jsp でのデータ表示の仕組み

shoppingcart.jsp テンプレートの目的の 1 つは、顧客の買い物に関するデータを表示して、顧客がそれを確認できるようにすることです。 shoppingcart.jsp では、WebLogic Server JSP タグ、Pipeline JSP タグ、およびアクセサ メソッド/属性を組み合わせて、これを実現しています。

まず、getProperty JSP タグによって、Pipeline セッションから SHOPPING_CART 属性と SAVED_SHOPPING_CART 属性が取得されます。表14-10 に、これらの属性の詳細を示します。

表14-10 shoppingcart.jsp Pipeline セッションの属性

属性

データ型

解説

PipelineSessionConstants.SAVED_SHOPPING_CART

com.beasys.commerce.ebusiness.shoppingcart.ShoppingCart

保留状態のショッピング カート(保留されている商品アイテムの発生元)

PipelineSessionConstants.SHOPPING_CART

com.beasys.commerce.ebusiness.shoppingcart.ShoppingCart

現在アクティブになっているショッピング カート


 

getProperty JSP タグを用いて Pipeline セッションからこれらの属性を取得する方法を、リスト 14-8 に示します。

コード リスト 14-8 ショッピング カート属性の取得

<webflow:getProperty id="shoppingCart"
property="<%=PipelineSessionConstants.SHOPPING_CART%>"
type="com.beasys.commerce.ebusiness.shoppingcart.ShoppingCart"
scope="session" namespace="sampleapp_main" />
<webflow:getProperty id="savedShoppingCart"
property="<%=PipelineSessionConstants.SAVED_SHOPPING_CART%>"
type="com.beasys.commerce.ebusiness.shoppingcart.ShoppingCart"
scope="session" namespace="sampleapp_main" />

Pipeline セッション属性内に格納されているデータには、Java スクリプトレット内でアクセサ メソッド/属性を用いてアクセスします。ShoppingCart(および savedShoppingCart)のアクセサ メソッド/属性の詳細を表14-11 に、また、ShoppingCartLine のアクセサ メソッド/属性については表14-12 に、それぞれ示します。

表14-11 ShoppingCart のアクセサ メソッド/属性

メソッド/属性

解説

getShoppingCartLineCollection()

ショッピング カート内の個々の明細行(すなわち、ShoppingCartLine)のコレクション。

getTotal

この場合には、OrderConstants.LINE_TAX パラメータを指定して計算される合計税額。

注意: getTotal() メソッドでは、異なる合計タイプを組み合わせることもできる。 詳細については、『Javadoc』を参照のこと。


 

getShoppingCartLineCollection() メソッドを使用すると、ショッピング カート内の個々の明細行のコレクションを取得できるので、各明細行に含まれている個々の情報を取り出すためのアクセサ メソッド/属性も用意されています。これらのメソッドおよび属性を表14-12 に示します。

表14-12 ShoppingCartLine のアクセサ メソッド/属性

メソッド/属性

解説

getQuantity()

商品アイテムの数量。

getProductItem()

ショッピングカートの明細行に記載されている商品アイテム。

getUnitPrice()

ショッピング カートに追加された時点での商品の単価。 MSRP(希望小売価格)とは異なる場合がある。

getBaseTotal(int totalType)

割引前の注文総額。


 

Java スクリプトレット内でのこれらのアクセサ メソッド/属性の使用例を、リスト 14-9 に示します。

コード リスト 14-9 shoppingcart.jsp Java スクリプトレット内でのアクセサ メソッドの使い方

<<td align="right" valign="top" bgcolor="#CCCCFF"><div class="tabletext" nowrap>
<%-- i18n タグを用いることで、"currency.properties" ファイルでは、返される 3 文字の --%>
<%-- ISO4217 コード ("USD" など) の代わりに "$" などの表示通貨を使用できるようになる。 --%>

<i18n:getMessage bundleName="/commerce/currency" messageName="<%=
shoppingCartLine.getProductItem().getMsrp().getCurrency() %>"/>
<%= WebflowJSPHelper.priceFormat(shoppingCartLine.getProductItem().
getMsrp().getValue() ) %></div>
      </td>

<td align="right" valign="top"><div class="tabletext" nowrap>

<i18n:getMessage bundleName="/commerce/currency" messageName="<%=
shoppingCartLine.getUnitPrice().getCurrency() %>"/>

<%= WebflowJSPHelper.priceFormat( shoppingCartLine.getUnitPrice().
getValue() ) %></div>
      </td>
<td align="right" valign="top" bgcolor="#CCCCFF"><div class="tabletext"
nowrap>

<i18n:getMessage bundleName="/commerce/currency" messageName="<%=
shoppingCartLine.getBaseSavings().getCurrency() %>"/>
         		<%= WebflowJSPHelper.priceFormat( shoppingCartLine.getBaseSavings().
getValue() ) %></div>
      </td>

<td align="right" valign="top"><div class="tabletext" nowrap>

<i18n:getMessage bundleName="/commerce/currency" messageName="<%=
shoppingCartLine.getBaseTotal().getCurrency() %>"/>
         <%= WebflowJSPHelper.priceFormat( shoppingCartLine.getBaseTotal().
getValue() ) %>

</div>
</td>

shoppingcart.jsp で用いられるフォーム フィールド

shoppingcart.jsp テンプレートのもう 1 つの目的は、さまざまな HTML フォーム フィールドを用いて、顧客が自分のショッピング カートの内容を変更できるようにすることです。 また、これらのフォーム フィールドは、必要な情報を Webflow に渡すためにも使用されます。

shoppingcart.jsp テンプレートで使用されるフォーム フィールドとそれらの解説を、表14-13 にまとめます。

表14-13 shoppingcart.jsp のフォーム フィールド

パラメータ名

タイプ

解説

“event”

Hidden

どのイベントがトリガされたかを示す。 次の処理を決定するために Webflow で使用。

“origin”

Hidden

現在のページ (shoppingcart.jsp) の名前。Webflow で使用。

HttpRequestConstants.
CATALOG_ITEM_SKU

Hidden

イベントの作用を受ける商品の SKU。

NewQuantity_<SKU>

ここで、<SKU> はショッピング カートの明細行に記載されている商品の SKU。

Textbox

ショッピング カート内の当該商品の新しい数量。 このページで顧客からの入力が必要なのは、このフォーム フィールドのみ。


 

注意: JSP コード内でリテラルとして扱われるパラメータは、引用符で囲んで示されています。一方、リテラルでないパラメータを JSP 内で使用するには、スクリプトレット構文 (たとえば、
<%= HttpRequestConstants.CATALOG_ITEM_SKU %> など) に従う必要があります。

shoppingcart.jsp で用いられる入力プロセッサ

shoppingcart.jsp では、入力プロセッサおよび Pipeline と呼ばれる Webflow コンポーネントを用いて、必要なビジネス ロジックの多くを実行します。 この節では、利用可能な主要入力プロセッサについて説明します。 これらの入力プロセッサは、Webflow メカニズムから起動されたときに、より複雑なショッピング カート サービス タスクを実行するために呼び出される Java クラスを表します。

この節では、以下に示すこれらの入力プロセッサについて説明します。

注意: Webflow の使用、作成、あるいは変更と、入力プロセッサの使用については、ポータル ナビゲーションのセットアップを参照してください。

DeleteProductItemFromShoppingCartIP

この入力プロセッサ (入力プロセッサ名はすべて末尾に「IP」という文字が付く) は、ショッピング カートから商品アイテムを削除します。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.webflow.

DeleteProductItemFromShoppingCartIP


HTTPServletRequest
の必須パラメータ

HttpRequestConstants.CATALOG_ITEM_SKU

必須の Pipeline
セッション 属性

PipelineSessionConstants.SHOPPING_CART
PipelineSessionConstants.CATALOG_ITEM

更新される Pipeline
セッション 属性

PipelineSessionConstants.SHOPPING_CART

削除される Pipeline
セッション 属性

なし

検証

なし

例外

ProcessingException。必須のリクエスト パラメータや必須の Pipeline セッション属性が利用できない場合に送出される。


 

EmptyShoppingCartIP

この入力プロセッサは、新しいショッピング カートを作成し、それを Pipeline セッションに格納したあと、古いショッピング カートを破棄します。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.webflow.

EmptyShoppingCartIP


HTTPServletRequest
の必須パラメータ

なし

必須の Pipeline
セッション 属性

なし

更新される Pipeline
セッション 属性

PipelineSessionConstants.SHOPPING_CART
PipelineSessionConstants.UPDATED_QUANTITY_DELTAS
PipelineSessionConstants.UPDATED_PRODUCT_ITEMS

削除される Pipeline
セッション 属性

なし

検証

なし

例外

なし


 

InitShoppingCartIP

この入力プロセッサは、shoppingcart.jsp テンプレートをロードする前に、アクティブなショッピング カートを初期化します。 ショッピング カートがすでに存在している場合には、この入力プロセッサは何もしません。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.webflow.

InitShoppingCartIP


HTTPServletRequest
の必須パラメータ

なし

必須の Pipeline
セッション 属性

なし

更新される Pipeline
セッション 属性

PipelineSessionConstants.SHOPPING_CART
PipelineSessionConstants.UPDATED_QUANTITY_DELTAS

削除される Pipeline
セッション 属性

なし

検証

なし

例外

なし


 

UpdateShoppingCartQuantitiesIP

この入力プロセッサは、ショッピング カートの各明細行の数量フィールドを検証し、それらの数量を設定します。 数量が 0 の場合には、その商品アイテムをショッピング カートから削除します。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.webflow.

UpdateShoppingCartQuantitiesIP

HTTPServletRequest
の必須パラメータ

NewQuantity_<SKU>

ここで、<SKU> はショッピング カートの明細行に記載されている商品の SKU。

必須の Pipeline
セッション 属性

PipelineSessionConstants.SHOPPING_CART

更新される Pipeline
セッション 属性

PipelineSessionConstants.SHOPPING_CART
PipelineSessionConstants.UPDATED_QUANTITY_DELTAS
PipelineSessionConstants.UPDATED_PRODUCT_ITEMS

削除される Pipeline
セッション 属性

なし

検証

数量フィールドに正の整数だけが入力されているかどうかを確認する。

例外

ProcessingException。必須のリクエスト パラメータや必須の Pipeline セッション属性が利用できない場合に送出される。


 

UpdateSkuIP

この入力プロセッサは、HTTP リクエストから SKU を読み込んで、Pipeline セッション内に設定します。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.webflow.

UpdateSkuIP


HTTPServletRequest
の必須パラメータ

HttpRequestConstants.CATALOG_ITEM_SKU

必須の Pipeline
セッション 属性

なし

更新される Pipeline
セッション 属性

PipelineSessionConstants.CATALOG_ITEM_SKU

削除される Pipeline
セッション 属性

なし

検証

なし

例外

ProcessingException。必須のリクエスト パラメータが利用できない場合に送出される。


 

shoppingcart.jsp で用いられる Pipeline コンポーネント

この節では、shoppingcart.jsp テンプレートに関連付けられている各 Pipeline コンポーネントについて簡単に説明します。 これらの Pipeline は、Shopping Cart サービスに関係する特定タスクの実行を Webflow で開始する際に呼び出されるプロセッサ ノードです。

注意: Pipeline コンポーネントの中には、他の基本 Pipeline コンポーネントを拡張するものがあります。 基本クラスの詳細については、『Javadoc』を参照してください。

Pipeline コンポーネントの詳細については、ノードのタイプを参照してください。

この節では、以下の Pipeline コンポーネントについて説明します。

注意: Webflow の使用、作成、あるいは変更と、Pipeline コンポーネントの使用については、ポータル ナビゲーションのセットアップを参照してください。

DeleteProductItemFromSavedListPC

このPipeline コンポーネント (Pipeline コンポーネント名はすべて末尾に「PC」という文字が付く) は、保留アイテム リストから商品を削除し、データベース内の WLCS_SAVED_ITEM_LIST テーブルを更新します。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.pipeline.
DeleteProductItemFromSavedListPC

必須の Pipeline
セッション 属性

PipelineSessionConstants.CATALOG_ITEM_SKU

PipelineSessionConstants.SAVED_SHOPPING_CART

PipelineSessionConstants.USER_NAME

更新される Pipeline
セッション 属性

PipelineSessionConstants.SAVED_SHOPPING_CART

削除される Pipeline
セッション 属性

なし

タイプ

セッション Bean

JNDI 名

examples.wlcs.sampleapp.shoppingcart.pipeline.DeleteProductItemFromSavedListPC

例外

PipelineException。必須の Pipeline セッション属性が利用できない場合に送出される。


 

MoveProductItemToSavedListPC

この Pipeline コンポーネントは、ショッピング カートから商品アイテムを削除し、それを保留アイテム リストに追加します。 その後、データベース内の WLCS_SAVED_ITEM_LIST テーブルを更新します。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.pipeline.
MoveProductItemToSavedListPC

必須の Pipeline
セッション 属性

PipelineSessionConstants.CATALOG_ITEM_SKU

PipelineSessionConstants.SAVED_SHOPPING_CART

PipelineSessionConstants.SHOPPING_CART

PipelineSessionConstants.USER_NAME

更新される Pipeline
セッション 属性

PipelineSessionConstants.SAVED_SHOPPING_CART

PipelineSessionConstants.SHOPPING_CART
PipelineSessionConstants.CATALOG_ITEM
PipelineSessionConstants.QUANTITY

削除される Pipeline
セッション 属性

なし

タイプ

セッション Bean

JNDI 名

examples.wlcs.sampleapp.shoppingcart.pipeline.
MoveProductItemToSavedListPC

例外

PipelineException。必須の Pipeline セッション属性が利用できない場合に送出される。


 

MoveProductItemToShoppingCartPC

このPipeline コンポーネントは、保留アイテム リストから商品を削除し、それを数量 1 としてショッピング カートに追加します。 その後、データベース内の WLCS_SAVED_ITEM_LIST テーブルを更新します。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.pipeline.
MoveProductItemToShoppingCartPC

必須の Pipeline
セッション 属性

PipelineSessionConstants.CATALOG_ITEM_SKU

PipelineSessionConstants.SAVED_SHOPPING_CART

PipelineSessionConstants.SHOPPING_CART

PipelineSessionConstants.USER_NAME

更新される Pipeline
セッション 属性

PipelineSessionConstants.SAVED_SHOPPING_CART

PipelineSessionConstants.SHOPPING_CART
PipelineSessionConstants.CATALOG_ITEM

削除される Pipeline
セッション 属性

なし

タイプ

セッション Bean

JNDI 名

examples.wlcs.sampleapp.shoppingcart.

pipeline.MoveProductItemToShoppingCartPC

例外

PipelineException。必須の Pipeline セッション属性が利用できない場合に送出される。


 

RefreshSavedListPC

この Pipeline コンポーネントは、WLCS_SAVED_ITEM_LIST テーブルにクエリを発行し、Pipeline セッション内の保留ショッピング カートをリフレッシュします。 Pipeline セッション内に保留ショッピング カートが存在しない場合には、保留アイテム リストだけが更新されます。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.pipeline.
RefreshSavedListPC

必須の Pipeline
セッション 属性

PipelineSessionConstants.USER_NAME

更新される Pipeline
セッション 属性

PipelineSessionConstants.SAVED_SHOPPING_CART

削除される Pipeline
セッション 属性

なし

タイプ

セッション Bean

JNDI 名

examples.wlcs.sampleapp.shoppingcart.pipeline.
RefreshSavedListPC

例外

PipelineException。必須の Pipeline セッション属性が利用できない場合に送出される。


 

PriceShoppingCartPC

この Pipeline コンポーネントは、Pricing サービスを呼び出して、各明細行の総額(小計)、割引額、ショッピング カート全体の総額、およびショッピング カート全体の割引総額を計算します。

呼び出されるクラス

examples.wlcs.sampleapp.shoppingcart.pipeline.
PriceShoppingCartPC

必須の Pipeline
セッション 属性

PipelineSessionConstants.SHOPPING_CART

PipelineSessionConstants.USER_NAME

更新される Pipeline
セッション 属性

PipelineSessionConstants.SHOPPING_CART

削除される Pipeline
セッション 属性

なし

タイプ

Java オブジェクト

JNDI 名

なし

例外

PipelineException。Pricing サービスが何らかの点で正常に機能しない場合に送出される。


 

AddToCartTrackerPC

この Pipeline コンポーネントは、カートにどの商品アイテムが追加されたかを示す AddToCartEvent を発生させます。 このイベントの詳細については、イベントおよび行動追跡を参照してください。

呼び出されるクラス

examples.wlcs.sampleapp.tracking.pipeline.AddToCartTrackerPC

解説


必須の Pipeline
セッション 属性

PipelineSessionConstants.CATALOG_ITEM

PipelineSessionConstants.HTTP_SESSION_ID

PipelineSessionConstants.USER_NAME

PipelineSessionConstants.STOREFRONT

PipelineSessionConstants.CUSTOM_REQUEST

更新される Pipeline
セッション 属性

なし

削除される Pipeline
セッション 属性

なし

タイプ

Java オブジェクト

JNDI 名

なし

例外

なし


 

RemoveFromCartTrackerPC

この Pipeline コンポーネントは、カートからどの商品アイテムが削除されたかを示す RemoveFromCartEvent を発生させます。 このイベントの詳細については、イベントおよび行動追跡を参照してください。

呼び出されるクラス

examples.wlcs.sampleapp.tracking.pipeline.RemoveFromCartTrackerPC

必須の Pipeline
セッション 属性

PipelineSessionConstants.CATALOG_ITEM

PipelineSessionConstants.HTTP_SESSION_ID

PipelineSessionConstants.USER_NAME

PipelineSessionConstants.STOREFRONT

PipelineSessionConstants.CUSTOM_REQUEST

更新される Pipeline
セッション 属性

なし

削除される Pipeline
セッション 属性

なし

タイプ

Java オブジェクト

JNDI 名

なし

例外

なし


 

UpdateShoppingCartQuantitiesTrackerPC

この Pipeline コンポーネントは、ショッピング カートの明細行ごとに以下のいずれかを実行します。

サービスとカタログ キャッシュを統合する

カタログ アーキテクチャには、プロダクト カタログ内の商品アイテムおよびカテゴリ用の強力なキャッシング メカニズムが用意されています。 サービスとキャッシュの統合に当たっては、サービスをキャッシュのフロントエンドにするか、バックエンドにするかを選択することができます。 現在、ProductItemManager と CategoryManager では、キャッシング アーキテクチャが活用されています。

CatalogManager のデプロイメント記述子で Bean のJNDI 名を変更することによって、キャッシュのフロントエンドにあるサービスが別のものに置き換わります。 元のサービスは、独自のキャッシング メカニズムを実装するか、あるいはキャッシングの活用を諦めなければなりません。

あらかじめ定義されているサービス (CatalogManager のデプロイメント記述子で指定されている) では、商品アイテムとカテゴリにアクセスするためのキャッシュを実装しています。 以下の Bean は、キャッシュに問い合わせ、キャッシュされたデータがあればそれを返します。そうでなければ、デプロイメント記述子で指定されている Bean に処理を委託します。

ProductItemManager Bean と CategoryManager Bean のデプロイメント記述子を編集することで、キャッシュのバックエンドでもプロダクト カタログの機能を利用できるようにすることができます。 それによって、キャッシング アーキテクチャのことを気にせずに、カタログの永続性モデルに専念できるようになります。 リスト 14-10 に示すように、ejb-jar.xml デプロイメント記述子で指定されている現在の代理サービス プロバイダ クラス (JdbcCategoryManager) を、CategoryManager インタフェースを実装する新しいセッション Bean の名前に置き換える必要があります。 同様の変更を、weblogic-ejb-jar.xml ファイルに対しても行う必要があるでしょう。

コード リスト 14-10 CategoryManager のデプロイメント記述子 (ejb-jar.xml)

<session>
<ejb-name>
com.beasys.commerce.ebusiness.catalog.service.
category.CategoryManager
</ejb-name>
<home>
com.beasys.commerce.ebusiness.catalog.service.
category.CategoryManagerHome
</home>
<remote>
com.beasys.commerce.ebusiness.catalog.service.
category.CategoryManager
</remote>
<ejb-class>
com.beasys.commerce.ebusiness.catalog.service.
category.CategoryManagerImpl
</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
    <!--  delegateName を指定して、どの EJB に委託するかをブリッジ
コンポーネント (カタログ マネージャで使用されるもの) に指示する。
このように、env-entry を変更することで委託先を変更することができる...
-->
  <env-entry>
<env-entry-name>delegateName</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>ejb/JdbcCategoryManager</env-entry-value>
</env-entry>
   <ejb-ref>
<ejb-ref-name>ejb/JdbcCategoryManager</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>
com.beasys.commerce.ebusiness.catalog.service.category.
JdbcCategoryManagerHome
</home>
<remote>
com.beasys.commerce.ebusiness.catalog.service.
category.JdbcCategoryManager
</remote>
</ejb-ref>
   .
.
.
</session>

ejb-jar.xml ファイルと weblogic-ejb-jar.xml ファイルは、ebusiness.jar ファイルにパッケージ化されています。この JAR ファイルは、<BEA_HOME>¥weblogic700¥common¥templates¥domains¥ shared¥bea¥portal¥apps¥jars ディレクトリ内にあります(<BEA_HOME> は、BEA アプリケーションのインストール先ディレクトリ)。

 

ページの先頭 前 次