1 / 37

Java と XML による BtoB EC サイトの構築

Java と XML による BtoB EC サイトの構築. 日立ソフトウェアエンジニアリング(株) インターネットビジネス推進部 中野 明彦. はじめに. 弊社(日立ソフト)のご紹介 横浜に本社 携帯端末からメインフレームまでのソフトウェア開発 「インターネットビジネス推進部」にて取り組んでいること Java (特に最近はサーバサイドに注力) パッケージ開発 システム・インテグレード. アジェンダ. Assam Commerce Server ( ACS) の概要 ACS の BtoC 機能 ACS のフレームワーク・アーキテクチャ

Download Presentation

Java と XML による BtoB EC サイトの構築

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JavaとXMLによるBtoB ECサイトの構築 日立ソフトウェアエンジニアリング(株) インターネットビジネス推進部 中野 明彦

  2. はじめに • 弊社(日立ソフト)のご紹介 • 横浜に本社 • 携帯端末からメインフレームまでのソフトウェア開発 • 「インターネットビジネス推進部」にて取り組んでいること • Java(特に最近はサーバサイドに注力) • パッケージ開発 • システム・インテグレード

  3. アジェンダ • Assam Commerce Server(ACS)の概要 • ACSのBtoC機能 • ACSのフレームワーク・アーキテクチャ • ACSのBtoB機能

  4. Assam Commerce Server(ACS)の概要

  5. ACSとは • ECサイト構築用のパッケージ・ソフト • 弊社ECサイト「@Buy24-Software」がベース http://www.abuy24.com/soft • ビジネスモデル • BtoCモデル・・・商品陳列型販売サイト • BtoBモデル・・・インターネット調達システムとの連動 • テクノロジ • J2EE(Servlet、JSP、JavaBeans、XML)-α • Webアプリケーション・サーバ

  6. サポートするプラットフォーム Assam Commerce Server WebSphere WebLogic DB2 Oracle WindowsNT Solaris AIX HP-UX

  7. ACSのBtoC機能 • フロントエンド機能 • 商品カタログ • ショッピング・カート • 商品購入(決済機能) • 会員機能 など • バックエンド機能 • 商品管理 • オーダー管理 • 会員管理 など

  8. BtoC機能のデモ

  9. ACSのフレームワーク・アーキテクチャ

  10. Servlet-JSP-JavaBeansの役割分担 <<boundary>> JSP <<command>> JavaBeans DataSource <<controller>> Servlet <<entity>> JavaBeans

  11. ServletAPIの差異の吸収 • Servletのバージョンの違いによるAPIの非互換性  • アプリケーション・サーバによりサポートされるServletAPIのバージョンが異なる • WebSphere3.0 ⇒ ServletAPI2.1 • WebLogic5.1 ⇒ ServletAPI2.2 • 抽象クラス(CommandContext)を用意 • ACSが規定するServletAPIのインタフェースを定義

  12. HttpServletRequest (from javax.servlet) HttpServletResponse (from javax.servlet) ServletContext (from javax.servlet) CommandContextForAPI20 CommandContextForAPI21 CommandContextForAPI22 CommandContext抽象クラス <<abstract>> CommandContext uses +<<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) uses uses

  13. 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” ); • } • }

  14. Entityオブジェクト • 独自の永続化オブジェクト • O-Rマッピングを実現 • データソースの存在をCommandオブジェクトに意識させない • データソース間の相違(SQLの方言)を吸収 • EJB(EntityBean)ではない ;) • ACS開発開始時(昨年半ば)に評価 • 時機尚早と判断 機能的・性能的制限から

  15. 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 +<<static>> getInstance():ConcreatePersister * 1

  16. 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>

  17. APサーバ固有APIの差異の吸収 • Webアプリケーション・サーバの代表的な機能 • コンテナの実装エンジン(Servlet、JSP、EJB) • 各種リソースのPooling機能 • クラスタリング(フェールオーバ、ロードバランス) • 既存システムへのコネクター など • データベース・コネクションのPooling機能 • JDBC2.0で「データソース」として標準化 • 現状のAPサーバは未準拠のものも多い 抽象クラス(PersisterConnector)用意し、固有APIの差異を吸収

  18. WLSPoolConnector GenericJDBCConnector WASPoolConnector PersistConnector抽象クラス <<abstract>> PersisterConnector +<<static>> getInstance():PersisterConnector + begin():boolean + commit() + rollback() + query(String):RecordSet + insert(String):int + update(String):int + delete(String):int

  19. 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; • } • }

  20. ACSのBtoB機能

  21. BtoBの定義 • 企業間の電子商取引 • 従来からEDI(電子データ交換)システムやCALS(生産・運用・調達支援統合システム)として存在 • 情報や取引関係はclosedであった • ACSがねらうBtoBとは • インターネット上でopenな情報の共有と取引関係の確立を実現するもの eg. インターネット調達、マーケットプレイス

  22. 何故XMLなのか? • 従来のBtoB(EDI)との比較 EDI XML シンタックス・ルールが 難解 シンプル(すぎる?) スキーマ テキストフォーマット 固定長バイナリやCSV フォーマットで表現 データ形式 不足している 標準規格APIに従ったものが 無償で提供 ツール/ライブラリ ツール/ライブラリに 制限される Unicodeに対応するため 使用言語を制限しない 使用言語 利点はいろいろあるが・・・

  23. 何故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

  24. Ariba Buyerとの連携 • Ariba Buyer (v7.0) • インターネット調達アプリケーション • Ariba Commerce Service Network(ACSN) • BuyerとSupplierの間のネットワーク・ハブ Ariba Commerce Service Network Supplier (ACS) Ariba Buyer Ariba社 売り手側企業 買い手側企業

  25. cXML • commerce eXtensible Markup Language(cXML) • Ariba社を含む複数のベンダーにより策定 • XML.ORG(http://www.xml.org)のスキーマ・リポジトリに登録 • 資材調達に係るデータの静的および動的な側面を定める • 静的な面: 商品カタログ、見積もり、発注データ など • 動的な面: ローカル・カタログ機能、 インターネット・カタログ(パンチアウト)機能

  26. ローカル・カタログ機能 Buyer管理者 Supplier管理者 Ariba Buyer ACSN Supplier カタログを 作成する Index cXML/HTTP ACSNに ログインする Index cXML/HTTP カタログを Uploadする ACSNに ログインする カタログを Downloadする Index cXML/HTTP カタログを インポートする Index cXML/HTTP

  27. 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>

  28. インターネット・カタログ(パンチアウト)機能インターネット・カタログ(パンチアウト)機能 Buyer利用者 Ariba Buyer ACSN Supplier HTML/HTTP Supplierの選択 PunchOutSetupRequest cXML/HTTP PunchOutSetupRequest cXML/HTTP PunchOutSetupRespone cXML/HTTP PunchOutSetupRespone cXML/HTTP HTML/HTTP SupplierのURI に遷移 HTML/HTTP 商品の選択・追加 PunchOutOrderMessage HTML/HTTP : : PunchOutOrderMessage HTML/HTTP 「注文」ボタンの押下

  29. パンチアウト機能の利点 • アイテム数が多く増加する商品(本、CD、ソフトウェア)を電子カタログ化するコストを削減できる。 • コンフィギュレーションが必要となる商品(コンピュータ・ハードウェア)の見積もりに対応できる。 • 価格やメニューが変化しやすい商品(サービス)の見積もりに対応できる。 • 顧客に応じてパーソナライズしたコンテンツを提供できる。例えば、商品の仕切りや購入金額の上限など。

  30. パンチアウトで使用されるXMLドキュメント cXMLドキュメント 説明 Buyer利用者の認証情報やカート情報が含まれる。 「create」「edit」「inspect」のオペレーション・タイプがある。 PunchOutSetupRequest PunchOutSetupRequestに対する応答ドキュメント。Buyer によって表示されるACS側の画面のURIが含まれる PunchOutSetupResponse 本ドキュメントには、見積もりデータとして、商品コードや 数量、集計金額などが含まれる。 PunchOutOrderMessage 作成 「create」 編集 「edit」 提出 検査 「inspect」 承認完了

  31. 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>sysadmin@ariba.com</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>

  32. PunchOutSetupResponseドキュメント <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.1.008/cXML.dtd"> <cXML payloadID="20000929121955383.1962378.297240000@202.32.87.104" 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

  33. PunchOutOrderMessageドキュメント <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.1.008/cXML.dtd"> <cXML payloadID="20000904170039238.1962458.1176968516@202.32.87.104" 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>

  34. パンチアウト機能の実装 • LaunchListenerServlet ①SAX APIを用いたPunchOutSetupRequestの解析 ②ユーザの認証(ACSへのログイン処理) ③「edit」「inspect」の場合、カート・オブジェクトを再構築 ④遷移先URIを決定 ⑤DOM APIによりPunchOutSetupResponseを生成 • CreateOrderMessageCommand ①DOM APIにより、HTTPセッション・オブジェクト中のカート・オブジェクトからXMLドキュメントを生成 ②生成したXMLドキュメントをHttpRequestオブジェクトに格納 • 既存JSPページの修正 • カート画面のJSPページ など

  35. パンチアウト機能のデモ

  36. 今後の予定 • EJBコンポーネント化を再検討 • 独自Entityオブジェクト ⇒ EntityBean化 • Commandオブジェクト ⇒ SessionBean化? • ACSのBtoBインタフェースの汎用化とAriba以外のプロトコルへの対応 • Commerce One, Inc. • Oracle Internet Procurement、Oracle Exchange

  37. ご参考資料 • インターネットビジネス推進部のホームページ • 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入門”」

More Related