JavaServer Pages(JSP)入門解説と Javaサーバ・アプリケーション開発

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