JavaとXMLによるBtoB ECサイトの構築 日立ソフトウェアエンジニアリング(株) インターネットビジネス推進部 中野 明彦 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. はじめに • 弊社(日立ソフト)のご紹介 – 横浜に本社 – 携帯端末からメインフレームまでのソフトウェア開発 • 「インターネットビジネス推進部」にて取り組んでいること – Java(特に最近はサーバサイドに注力) – パッケージ開発 – システム・インテグレード C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 2 アジェンダ • • • • Assam Commerce Server(ACS)の概要 ACSのBtoC機能 ACSのフレームワーク・アーキテクチャ ACSのBtoB機能 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 3 Assam Commerce Server(ACS)の概要 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 4 ACSとは • ECサイト構築用のパッケージ・ソフト – 弊社ECサイト「@Buy24-Software」がベース http://www.abuy24.com/soft • ビジネスモデル – BtoCモデル・・・商品陳列型販売サイト – BtoBモデル・・・インターネット調達システムとの連動 • テクノロジ – J2EE(Servlet、JSP、JavaBeans、XML) -α – Webアプリケーション・サーバ C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 5 サポートするプラットフォーム Assam Commerce Server WebSphere WebLogic DB2 Oracle WindowsNT Solaris AIX HP-UX C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 6 ACSのBtoC機能 • フロントエンド機能 – 商品カタログ – ショッピング・カート – 商品購入(決済機能) – 会員機能 など • バックエンド機能 – 商品管理 – オーダー管理 – 会員管理 など C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 7 BtoC機能のデモ C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 8 ACSのフレームワーク・アーキテクチャ C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 9 Servlet-JSP-JavaBeansの役割分担 <<boundary>> JSP <<controller>> Servlet <<command>> JavaBeans <<entity>> JavaBeans C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. DataSource 10 ServletAPIの差異の吸収 • Servletのバージョンの違いによるAPIの非互換性 • アプリケーション・サーバによりサポートされるServletAPI のバージョンが異なる – WebSphere3.0 ⇒ ServletAPI 2.1 – WebLogic5.1 ⇒ ServletAPI 2.2 • 抽象クラス(CommandContext)を用意 – ACSが規定するServletAPIのインタフェースを定義 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 11 CommandContext抽象クラス <<abstract>> CommandContext +<<static>> getInstance(ServletContext, HttpServletRequest, HttpServletResponse) :CommandContext + getSession():HttpSession + invalidateSession() + setAttributeToSession(String, Obejct, boolean):boolean + getAttributeFromSession(String):Object + setAttributeToRequest(String, Object) + getAttributeFromRequest(String):Object + getParameterValue(String):String + getParameterValues(String):String[] + forward(String) + include(String) CommandContextForAPI20 CommandContextForAPI21 HttpServletRequest uses uses (from javax.servlet) HttpServletResponse (from javax.servlet) uses ServletContext (from javax.servlet) CommandContextForAPI22 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 12 CommandContextの使用例 Public class LoginServlet { public void service(HttpServletRequest request, HttpServletResponse response) { CommandContext cmdCtx = CommandContext.getInstance( getServletConfig().getServletContext(), request, response ); String userID = cmdCtx.getParameterValue( “USER_ID” ); String password = cmdCtx.getParameterValue( “PASSWORD” ); : cmdCtx.setAttributeToSession( “USER_ID”, userID, true ); cmdCtx.forward( “welcome.jsp” ); } } C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 13 Entityオブジェクト • 独自の永続化オブジェクト – O-Rマッピングを実現 – データソースの存在をCommandオブジェクトに意識さ せない – データソース間の相違(SQLの方言)を吸収 • EJB(EntityBean)ではない ;) – ACS開発開始時(昨年半ば)に評価 – 時機尚早と判断 機能的・性能的制限から C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 14 EntityインタフェースとPersister抽象クラス <<interface>> Entity <<abstract>> Persister + validate() + update() + remove() + update(Entity) + insert(Entity) + remove(Entity) + query(String):Entity + queries(String):Vector # getSQLForInsert(Entity):Vector # getSQLForUpdate(Entity):Vector # getSQLForDelete(Entity):Vector # getSQLForSingleQuery(String):Vector # getSQLForMultipleQuery(String):Vector ConcreteEntity ConcretePersister uses +<<static>> getInstance(String):ConcreateEntity * +<<static>> getInstances(String):Vector 1 +<<static>> getInstance():ConcreatePersister C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 15 Entityの使用例 ・・・ CustomerEntity customer = new CustomerEntity(); customer.setName( “中村” ); customer.setAddress( “横浜市” ); customer.setPhoneNumber( “045-123-4567” ); customer.validate(); customer.update(); <%@ import=“jp.co...CustomerEntity” %> <HTML><BODY> <% CustomerEntity customer = CustomerEntity.getInstance( “cust000001” ); %> 名前: <%= customer.getName() %> 住所: <%= customer.getAddress() %> 電話: <%= customer.getPhoneNumber() %> </BODY></HTML> C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 16 APサーバ固有APIの差異の吸収 • Webアプリケーション・サーバの代表的な機能 – コンテナの実装エンジン(Servlet、JSP、EJB) – 各種リソースのPooling機能 – クラスタリング(フェールオーバ、ロードバランス) – 既存システムへのコネクター など • データベース・コネクションのPooling機能 – JDBC2.0で「データソース」として標準化 – 現状のAPサーバは未準拠のものも多い 抽象クラス(PersisterConnector)用意し、固有APIの差異を吸収 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 17 PersistConnector抽象クラス <<abstract>> PersisterConnector +<<static>> getInstance():PersisterConnector + begin():boolean + commit() + rollback() + query(String):RecordSet + insert(String):int + update(String):int + delete(String):int WLSPoolConnector WASPoolConnector GenericJDBCConnector C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 18 PersistConnectorの使用例 public abstract class ItemPersister extends Persister { ・・・ public Entity query(String id) { PersisterConnector connector = PersisterConnector.getInstance(); try { connector.begin(); Vector aVector = getSQLForSingleQuery(id); String sql = (String)aVector.elementAt(0); RecordSet aRecordSet = connector.query(sql); target = (Item)createInstance(aRecordSet); } catch(Exception e) { connector.rollback(); } connector.commit(); return target; } } C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 19 ACSのBtoB機能 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 20 BtoBの定義 • 企業間の電子商取引 – 従来からEDI(電子データ交換)システムやCALS(生 産・運用・調達支援統合システム)として存在 – 情報や取引関係はclosedであった • ACSがねらうBtoBとは – インターネット上でopenな情報の共有と取引関係の確 立を実現するもの eg. インターネット調達、マーケットプレイス C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 21 何故XMLなのか? • 従来のBtoB(EDI)との比較 EDI XML スキーマ シンタックス・ルールが 難解 シンプル(すぎる?) テキストフォーマット データ形式 固定長バイナリやCSV フォーマットで表現 不足している 標準規格APIに従ったものが 無償で提供 ツール/ライブラリに 制限される Unicodeに対応するため 使用言語を制限しない ツール/ライブラリ 使用言語 利点はいろいろあるが・・・ C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 22 何故XMLなのか?(cnt’d) • 標準技術として認知されたことが一番の理由(だと思う) – TCP/IPとかHTTPとかと同じ(デファクトの強み) – EDIFACTやANSI X.12は対照的な例 • Javaとの相性がよいこと – XMLドキュメントを解析・生成するためのライブラリ (パーサ)が既に数多く提供されている – eg. Sun Project X(JAXP)、IBM XML Parser for Java Apache Xeres Java Parser C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 23 Ariba Buyerとの連携 • Ariba Buyer (v7.0) – インターネット調達アプリケーション • Ariba Commerce Service Network(ACSN) – BuyerとSupplierの間のネットワーク・ハブ Ariba Buyer Ariba Commerce Service Network Supplier (ACS) Ariba社 買い手側企業 売り手側企業 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 24 cXML • commerce eXtensible Markup Language(cXML) – Ariba社を含む複数のベンダーにより策定 – XML.ORG(http://www.xml.org)のスキーマ・リポジトリ に登録 • 資材調達に係るデータの静的および動的な側面を定める – 静的な面: 商品カタログ、見積もり、発注データ など – 動的な面: ローカル・カタログ機能、 インターネット・カタログ(パンチアウト)機能 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 25 ローカル・カタログ機能 Buyer管理者 Supplier管理者 Ariba Buyer ACSN Supplier カタログを 作成する Index cXML/HTTP ACSNに ログインする Index cXML/HTTP カタログを Uploadする ACSNに ログインする カタログを Downloadする カタログを インポートする Index cXML/HTTP Index cXML/HTTP C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 26 Indexドキュメント <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Index SYSTEM "http://xml.cxml.org/schemas/cXML/1.1.008/cXML.dtd" > <Index> <SupplierID domain="DUNS">0000002-T</SupplierID> <IndexItem> <IndexItemAdd> <ItemID> <SupplierPartID>ABC001</SupplierPartID> </ItemID> <ItemDetail> <UnitPrice> <Money currency="JPY">4660</Money> </UnitPrice> <Description xml:lang="ja"> <ShortName>Sample商品001</ShortName> Sample商品001の詳細説明 </Description> <UnitOfMeasure>EA</UnitOfMeasure> <Classification domain="SPSC">55555555</Classification> </ItemDetail> <IndexItemDetail> <LeadTime>7</LeadTime> </IndexItemDetail> </IndexItemAdd> </IndexItem> <IndexItem> <IndexItemDelete> <ItemID> <SupplierPartID>ABC002</SupplierPartID> </ItemID> </IndexItemDelete> </IndexItem> </Index> C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 27 インターネット・カタログ(パンチアウト)機能 Buyer利用者 Ariba Buyer ACSN Supplier PunchOutSetupRequest Supplierの選択 HTML/HTTP PunchOutSetupRequest cXML/HTTP cXML/HTTP PunchOutSetupRespone PunchOutSetupRespone SupplierのURI に遷移 cXML/HTTP cXML/HTTP HTML/HTTP HTML/HTTP 商品の選択・追加 PunchOutOrderMessage : : 「注文」ボタンの押下 HTML/HTTP PunchOutOrderMessage HTML/HTTP C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 28 パンチアウト機能の利点 • アイテム数が多く増加する商品(本、CD、ソフトウェア)を 電子カタログ化するコストを削減できる。 • コンフィギュレーションが必要となる商品(コンピュータ・ ハードウェア)の見積もりに対応できる。 • 価格やメニューが変化しやすい商品(サービス)の見積も りに対応できる。 • 顧客に応じてパーソナライズしたコンテンツを提供できる。 例えば、商品の仕切りや購入金額の上限など。 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 29 パンチアウトで使用されるXMLドキュメント cXMLドキュメント PunchOutSetupRequest 説明 Buyer利用者の認証情報やカート情報が含まれる。 「create」「edit」「inspect」のオペレーション・タイプがある。 PunchOutSetupRequestに対する応答ドキュメント。Buyer PunchOutSetupResponse によって表示されるACS側の画面のURIが含まれる 本ドキュメントには、見積もりデータとして、商品コードや PunchOutOrderMessage 数量、集計金額などが含まれる。 作成 「create」 編集 「edit」 提出 検査 「inspect」 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 承認完了 30 PunchOutSetupRequestドキュメント <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE cXML SYSTEM " http://xml.cxml.org/schemas/cXML/1.1.008/cXML.dtd "> <cXML version="1.0" payloadID="970197090991.2144681359@sirius" timestamp="2000-09-29T12:11:30-15:00"> <Header> <From> <Credential domain="NetworkId"> <Identity>AN00000001-T</Identity> </Credential> </From> <To> <Credential domain="DUNS"> <Identity>0000002-T</Identity> </Credential> </To> <Sender> <Credential domain="AribaNetworkUserId"> <Identity>[email protected]</Identity> <SharedSecret>XXXXXXXX</SharedSecret> </Credential> <UserAgent>B2B Buyer 7.0 </UserAgent> </Sender> </Header> <Request deploymentMode="test"> <PunchOutSetupRequest operation="create"> <BuyerCookie>123456789</BuyerCookie> <BrowserFormPost> <URL>https://an.ariba.com/punchout?ansessionid=123456789</URL> </BrowserFormPost> </PunchOutSetupRequest> </Request> </cXML> C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 31 PunchOutSetupResponseドキュメント <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.1.008/cXML.dtd"> <cXML payloadID="[email protected]" timestamp="2000-09-29T12:19:55+09:00" xml:lang="ja" version="1.1.008"> <Response> <Status code="200" text="OK"></Status> <PunchOutSetupResponse> <StartPage> <URL>http://www.abuy24.com/servlet/Default</URL> </StartPage> </PunchOutSetupResponse> </Response> </cXML> • StartPageとして以下のURIを応答する。 – 「create」の場合: ACSのトップページのURI – 「edit」「inspect」の場合: ACSのカート画面のURI C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 32 PunchOutOrderMessageドキュメント <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.1.008/cXML.dtd"> <cXML payloadID="[email protected]" timestamp="2000-09-04T17:00:39+09:00" xml:lang="ja" version="1.1.009"> <Header> ・・・ </Header> <Message> <PunchOutOrderMessage> <BuyerCookie>123456789</BuyerCookie> <PunchOutOrderMessageHeader operationAllowed="edit"> <Total><Money currency="JPY">5393</Money></Total> </PunchOutOrderMessageHeader> <ItemIn quantity="1"> <ItemID><SupplierPartID>ASI0360</SupplierPartID></ItemID> <ItemDetail> <UnitPrice><Money currency="JPY">4660</Money></UnitPrice> <Description xml:lang="ja"> <ShortName>Sample商品001</ShortName> Sample商品001の詳細説明 </Description> <UnitOfMeasure>EA</UnitOfMeasure> <Classification domain="SPSC">55555555</Classification> </ItemDetail> </ItemIn> </PunchOutOrderMessage> </Message> </cXML> C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 33 パンチアウト機能の実装 • LaunchListenerServlet ①SAX APIを用いたPunchOutSetupRequestの解析 ②ユーザの認証(ACSへのログイン処理) ③「edit」「inspect」の場合、カート・オブジェクトを再構築 ④遷移先URIを決定 ⑤DOM APIによりPunchOutSetupResponseを生成 • CreateOrderMessageCommand ①DOM APIにより、HTTPセッション・オブジェクト中のカート・オブ ジェクトからXMLドキュメントを生成 ②生成したXMLドキュメントをHttpRequestオブジェクトに格納 • 既存JSPページの修正 – カート画面のJSPページ など C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 34 パンチアウト機能のデモ C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 35 今後の予定 • EJBコンポーネント化を再検討 – 独自Entityオブジェクト ⇒ EntityBean化 – Commandオブジェクト ⇒ SessionBean化? • ACSのBtoBインタフェースの汎用化とAriba以外のプロト コルへの対応 – Commerce One, Inc. – Oracle Internet Procurement、Oracle Exchange C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 36 ご参考資料 • インターネットビジネス推進部のホームページ – http://e-biz.hitachi-sk.co.jp • ACS製品情報 – http://e-biz.hitachi-sk.co.jp/sub/frm_sol.html • 関連記事 – IDGジャパン JavaWORLD 2000年3月号:「ECサイト構築事例に見るWebアプリケー ション開発手法」 2000年11月号:「加速するEC、進化するJ2EE」Part2~4 2000年4月号より連載: 「部下には聞けない“Java入門”」 C Hitachi Software Engineering Co.,Ltd. 2000. All Rights Reserved. 37
© Copyright 2024 ExpyDoc