...

アナウンスメント・ワークショップ バッチ WebSphere Application Server V8.0 XML &

by user

on
Category: Documents
443

views

Report

Comments

Transcript

アナウンスメント・ワークショップ バッチ WebSphere Application Server V8.0 XML &
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
®
WebSphere Application Server V8.0
アナウンスメント・ワークショップ
XML & Javaバッチ
© 2011 IBM Corporation
1
WAS V8.0 アナウンスメント・ワークショップ
WAS V8.0 アナウンスメント・ワークショップ
1
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Disclaimer
ƒ この資料は日本アイ・ビー・エム株式会社ならびに日本アイ・ビー・エム シス
テムズ・エンジニアリング株式会社の正式なレビューを受けておりません。
ƒ 当資料は、資料内で説明されている製品の仕様を保証するものではありませ
ん。
ƒ 資料の内容には正確を期するよう注意しておりますが、この資料の内容は
2011年7月現在の情報であり、製品の新しいリリース、PTFなどによって動作、
仕様が変わる可能性があるのでご注意下さい。
ƒ 今後国内で提供されるリリース情報は、対応する発表レターなどでご確認くだ
さい。
ƒ IBM、IBMロゴ、ibm.comおよびWebShereは、世界の多くの国で登録された
International Business Machines Corporationの商標です。他の製品名およ
びサービス名等は、それぞれIBMまたは各社の商標である場合があります。
現時点でのIBMの商標リストについては、
http://www.ibm.com/legal/copytrade.shtmlをご覧ください。
ƒ JavaおよびすべてのJava関連の商標は Oracleやその関連会社の米国およ
びその他の国における商標または登録商標です。
ƒ UNIXはThe Open Groupの米国およびその他の国における登録商標です。
© 2011 IBM Corporation
2
WAS V8.0 アナウンスメント・ワークショップ
WAS V8.0 アナウンスメント・ワークショップ
2
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Agenda
1. XML
2. Javaバッチ
© 2011 IBM Corporation
3
WAS V8.0 アナウンスメント・ワークショップ
WAS V8.0 アナウンスメント・ワークショップ
3
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
1. XML
© 2011 IBM Corporation
4
WAS V8.0 アナウンスメント・ワークショップ
WAS V8.0 アナウンスメント・ワークショップ
4
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Agenda
1. XML
–
–
–
–
–
–
–
–
–
–
–
–
–
XMLとは
XMLに関連する仕様群
XPath / XSLTとは
XMLプログラミングモデルの歴史
JavaからXMLを操作するためのAPI
オブジェクト指向プログラミングとXMLプログラミングモデル
WASのサポートするXMLプログラミングモデル
XPath 2.0 / XSLT 2.0の新機能
XQuery 1.0とは
IBM XML APIの基本的な使用法
IBM XML ランタイムの実行オプション
互換性
まとめ
© 2011 IBM Corporation
5
WAS V8.0 アナウンスメント・ワークショップ
WAS V8.0 アナウンスメント・ワークショップ
5
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
WAS V8でのFeature Pack
© 2011 IBM Corporation
6
WAS V8.0 アナウンスメント・ワークショップ
このセッションでは、WASのXML機能およびJavaバッチ機能についてお話します。これらの機能は
WAS V7ではFeature Packとして提供されていましたが、WAS V8では製品の機能に組み込まれて
います。セッションの前半ではまずXML機能についてお話します。
WAS V8.0 アナウンスメント・ワークショップ
6
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XML(eXtensible Markup Language)とは
ƒ データを表すフォーマット(データスタイル)
–もともとは電子出版用に作られた文書フォーマット
ƒ 主な特徴
–テキストで記述できるためプラットフォームに依存しない
–タグを拡張でき(extensible)さまざまなデータを記述できる
–人間とコンピューターの双方にとって理解しやすい
ƒ WASにおいても様々なところで利用されている
RSS / ATOM
XHTML
User
Interface
XFORMS
Web 2.0
RESTful
Web Services
Data / Documents
Web Services
B2B Interchange
ACORD, FIXML, OAGIS, HL7, TWIST, XBRL, etc
7
© 2011 IBM Corporation
WAS V8.0 アナウンスメント・ワークショップ
まず、そもそもXMLについて簡単におさらいします。
XMLはもともとは文書の形式を表す文書フォーマットから発展してきました。現在では文書フォー
マットしてだけでなく、むしろデータの形式を表すデータフォーマットとして、その利用がなされていま
す。
ここではXMLの主な特徴を3つ挙げています。
XMLはWASにおいてもさまざまなところで利用されています。
WAS V8.0 アナウンスメント・ワークショップ
7
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XML利用の例
ƒ ブログからRSSデータを取得し、DBに格納されているXMLデータ
とマッシュアップしてXHTMLを出力
© 2011 IBM Corporation
8
WAS V8.0 アナウンスメント・ワークショップ
ここで、XMLの利用の例を一つ挙げてみます。
これは外部ブログからRSSを取得し、DBに格納されているXMLデータとマッシュアップして結果を
XHTMLにアプトプットするというようなシナリオです。
WASのXML機能を使用することで、RSSやDB内のXMLデータに対して、クエリーや変換を容易に実
行することができます。
WAS V8.0 アナウンスメント・ワークショップ
8
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XMLの例
ƒ XMLデータは階層構造データ
処理命令ノード:
–すべてがノード単位で構成
root
ルートノード:最上位ノード
XML処理命令を表す
?xml-stylesheet ..?
<?xml version="1.0" encoding=“UTF-8" ?>
<?xml-stylesheet type="type" href="uri" ?>
<!-- コメント -->
<re:cars xmlns:re=“http://rent.co.jp/car”>
<re:car type=”SUV”>
<re:name>ランドクルーザー</re:name>
<re:price>200</re:price>
</re:car>
<re:car type=”セダン”>
<re:name>クラウン</re:name>
コメントノード:コメントを表す
コメント
名前空間ノード:名前空間を表す
http://rent.co.jp/car
cars
要素ノード:
XML要素を表す
属性ノード:属性を表す
type
SUV
type
car
セダン
car
<re:price>120</re:price>
</re:car>
</re:cars>
name
price
name
price
ランド
クルーザー
200
クラウン
120
テキストノード:開始タグと終了タグで囲われた文字列を表す
© 2011 IBM Corporation
9
WAS V8.0 アナウンスメント・ワークショップ
XMLの具体的な例を見てみましょう。
XMLデータは階層型になっています。すべてがノード単位で構成されており、最上位のノードである
ルートノードから、要素ノード、属性ノード、テキストノードといったノードが階層型になっています。
WAS V8.0 アナウンスメント・ワークショップ
9
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XMLに関連する仕様群
ƒ XML 1.0
–XML文書の文法を定めた仕様
ƒ XML名前空間
–XML文書の要素名と属性名をURIに関連付ける事で限定するための仕様
ƒ XML Schema
–XML文書で使用される要素や属性を定義するための仕様
ƒ XPath
–XMLのある部分を参照するための仕様
ƒ XSLT(XSL Transformations)
–XML文書の変換を行うための仕様
© 2011 IBM Corporation
10
WAS V8.0 アナウンスメント・ワークショップ
XMLは関連するさまざまな仕様によって成り立っています。ここでは主なものについて説明します。
XML 1.0はXMLの文書の文法を定めた仕様です。
XML名前空間はXMLタグを書き分けるための仕様です。XMLでは自由にタグの名前を決めること
ができるため、2つの文書をマージしたときに名前が衝突してしまう可能性があります。名前をURI
に関連づけることで一意なものとすることができます。
XML SchemaではXMLの中でどのようなタグが使用可能であり、タグの中にはどのようなデータが
入るべきなのか、といったXML文書の形式を定義することができます。
XPathはXMLのある部分を参照するための仕様です。
XSLTはXML文書の参照を変換を行うための仕様です。
XPathとXSLTについてはこの後もう少し詳しく説明します。
WAS V8.0 アナウンスメント・ワークショップ
10
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XPathとは
ƒXML文書内の特定の部分を指定するための言語
–XMLの構造をたどり、要素・属性・文字列などを指し示す
• 特定のノードだけでなく、ある条件に適合するノードの集合を返すことができ
る、問い合わせ言語ともいえる
–XSLTなどのホスト言語に埋め込まれる形で使用される
doc
データの例
name
names.xml
first
(Jane)
last
(Doe)
name
first
(Jim)
name
last
(Smith)
first
(John)
last
(Doe)
XPathによる記法の例(簡易記法)
/doc/name[1]/@last
Doe
/doc/name/@last
Doe, Smith, Doe
© 2011 IBM Corporation
11
WAS V8.0 アナウンスメント・ワークショップ
XPathはXML文書の特定の部分を指定するための言語です。
XMLの構造をたどり、要素・属性・文字列を指し示します。
特定のノードだけでなく、ある条件に適合するノードの集合を返すことができますので、このXPathも
ある種の問い合わせ言語であるともいえます。
XSLTなどのホスト言語に埋め込まれる形で利用されます。
ここでは、簡易記法での記述の例を紹介しています。ディレクトリやURLの記法に似た、直感的の
理解しやすいものとなっています。詳細記法ではまた別の記述になります。
WAS V8.0 アナウンスメント・ワークショップ
11
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XSLTとは
ƒ XSLTとは
–XML文書を変換するためのスクリプト言語仕様
–XML文書に対してXSLスタイルシートを適用して変換を行う
• XML文書から別のXML文書、HTML文書、CSVやテキストを生成するといったさ
まざまな変換が可能
XSLTによる
変換の例
names.xml
output.xml
sample.xsl
doc
name
first
(Jane)
last
(Doe)
name
first
(Jim)
last
(Smith)
name
name
first
(John)
last
(Doe)
fullname
fullname
fullname
Jane,Doe
Jim,Smith
John,Doe
© 2011 IBM Corporation
12
WAS V8.0 アナウンスメント・ワークショップ
XSLTは文書の変換を行うためのスクリプト言語仕様です。
もともとはXSLの一部として変換を行うために開発されたものですが、現在は独立した仕様ともなっ
ています。
XSLTを利用することで、XMLから別のXML文書を作成したり、HTMLやCSVやテキストを生成すると
いったさまざまな変換処理が可能です。
WAS V8.0 アナウンスメント・ワークショップ
12
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XMLプログラミングモデルの歴史
ƒ XSLT 1.0とXPath 1.0から7年でXSLT 2.0 と XPath 2.0 が登場
ƒ XMLに対してクエリーを実行しデータを取得する新たな標準規格のXQuery
1.0 が登場
© 2011 IBM Corporation
13
WAS V8.0 アナウンスメント・ワークショップ
XMLの登場は1998年ですが、XPathとXSLTはバージョン1.0が2000年に登場しています。これら
XMLプログラミングモデル7年を経て、バージョン2.0が登場しています。また、XMLに対してクエリー
を実行する新たな規格であるXQueryもあわせて登場しています。
WAS V8.0 アナウンスメント・ワークショップ
13
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
JavaからXMLを操作するためのAPI
ƒ JAXP(Java API for XML Processing)
– JavaからXMLを操作するためのAPI
• DOM、SAX、StAX、XPath 1.0、XSLT 1.0などの上位層としてベンダー固有のAPIの差異
を吸収する
– DOM(Document Object Model)
• XML文書をツリー構造として解釈しアクセスする
• 高機能ではあるが、XML文書をツリー構造に解析してメモリ上に展開する必要があるため、
大きな文書の操作には向いていない
– SAX(Simple API for XML)
• XML文書を先頭から順に読み込んでいきイベントドリブンで処理を行う
• 順次処理していくため高速だが、文書中をあちこち参照するような複雑な処理には向いて
いない
– StAX(Streaming API for XML)
• 文書内のある位置を示すカーソルをもとにプログラムの操作を行う
• SAXをパーサーがアプリケーションにデータを送るpush型とすると、StAXはアプリケーショ
ンがカーソルを操作して必要な情報を取り出すpull型
ƒ JAXB(Java Architecture for XML Binding)
– XMLをJavaのオブジェクトにマッピングする
© 2011 IBM Corporation
14
WAS V8.0 アナウンスメント・ワークショップ
ここで、プログラムからXMLを操作するために定義されている仕様についてご紹介します。
JavaからXMLを操作するための仕様はJAXPとしてJavaSEの中で定義されています。もともとDOM
やSAXによるXMLの操作はベンダーのAPIの依存したものでしたが、JAXPによってその差異が抽
象化されました。
DOMではXMLをツリー構造として解釈してアクセスします。ランダムアクセスが可能であり高機能で
すが、 XMLをメモリー上に展開するため、大きな文書の操作には向いていません。
SAXではXMLを先頭から順に読み込んでいき、イベントドリブンで処理を行います。少ないメモリー
使用量で高速な処理が可能ですが、ランダムアクセスといった処理には向いていません。
StAXはDOMとSAXの中間を意識した仕様です。文書内の位置を示すカーソルをもとにプログラム
の操作を行います。SAXがパーサーがアプリケーションにデータを送りつけるpush型とすると、
StAXはアプリケーションがカーソルを操作して必要な情報を取り出すpull型です。
これらとはまた少し毛色の異なる仕様としてJAXBがあります。JAXBではXMLをJavaのオブジェクト
にマッピングします。
WAS V8.0 アナウンスメント・ワークショップ
14
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
オブジェクト指向プログラミングとXMLプログラミングモデル
ƒ オブジェクト指向のアプローチ
–命令的なプログラミングモデル
• Javaランタイムに対して必要なデータに対してどのようにたどり着くのかを記述
する必要があり、プログラムが複雑になりやすい
–DOM
• パフォーマンスの観点で課題がある
–JAXB
• オブジェクトに上手くマッピングできない複雑なXMLスキーマでは、DOMを使っ
た例外的なプログラミングを必要とする
• 一度オブジェクトにマッピングされるとXMLスキーマにアクセスできない
ƒ XMLプログラミングモデル(XPath、XSLT、XQuery)
–宣言的なプログラミングモデル
• XMLランタイムに対してどのデータが必要なのかを伝えるだけでよい
© 2011 IBM Corporation
15
WAS V8.0 アナウンスメント・ワークショップ
ここでは、従来からあるDOMのようなオブジェクト指向のプログラミングと、XPathやXSLTのような
XMLプログラミングとの違いを見てみます。
DOMのようなオブジェクト指向のアプローチではJavaランタイムに対して、必要なデータにどのよう
にたどり着くのかを記述する必要があります。このようなプログラミングは命令的なプログラミングモ
デルと呼ばれます。
このようなプログラミングは複雑になりやすく、また、DOMではパフォーマンスの観点でも課題があ
ります。
JAXBの場合は、XMLスキーマが複雑な場合にうまくオブジェクトにマッピングできずに結局DOMを
使った例外的なプログラミングが必要になったり、一度オブジェクトにマッピングされるとXMLスキー
マにアクセスできないという課題があります。
XML指向のプログラミングモデルは、XMLランタイムに対してどのデータが必要なのかを伝えるだ
けでよく、このようなプログラミングは宣言的プログラミングモデルと呼ばれます。
WAS V8.0 アナウンスメント・ワークショップ
15
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
オブジェクト指向プログラミングとXMLプログラミングモデルの例
必要な操作
1.
root要素から開始
2.
すべての子要素から”feed”
という要素を探す
3.
すべての子要素から”entry”
という要素を探す
4.
すべての子要素から”id”と
いう要素を探し、テキスト
に”.blog-”を含むものを探す
5.
見つかった“id”とその子要
素の”title”を返す
ƒ 命令的アプローチ(DOM)ではどのようにデータを取得するかを記述する
– コードの作成と維持に多大な労力を必要とする
– たくさんのオブジェクトを生成するため、パフォーマンスへの悪影響をもたらす
ƒ 宣言的アプローチ(XPath)ではどのデータが必要かを記述する
© 2011 IBM Corporation
16
WAS V8.0 アナウンスメント・ワークショップ
実際のコードでの比較を見てみます。
DOMの場合はどのようにデータを取得するかを記述する必要があり、コードに作成とメンテナンス
に多大な労力が必要になります。
XPathやXSLTのようなXMLプログラミングモデルとをDOMやSAXと組み合わせて利用することがで
きますし、複雑な操作ではDOMの方が向いている場合もあるので適切な使い分けが必要ですが、
利用可能な部分ではXMLプログラミングモデルを活用することで、コードの作成とメンテナンスにか
かるコストを減らすことができます。
WAS V8.0 アナウンスメント・ワークショップ
16
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
WAS 7およびWAS 8のサポートするXMLプログラミングモデル
ƒ WAS 7はXPath 1.0とXSLT 1.0をサポート
–Java SEのJAXPではXPath 1.0とXSLT 1.0が利用可能
ƒ WAS 7はXML Feature PackによりXPath 2.0、XSLT 2.0、
XQuery 1.0を追加サポート
ƒ WAS 8はXML Feature Packの機能が製品本体に組み込まれ、
XPath 2.0、XSLT 2.0、XQuery 1.0をサポート
–com.ibm.xml.xapiパッケージを使って利用する
XML Feature Pack
XPath 2.0, XSLT 2.0,
XQuery 1.0 Runtime
XPath 2.0, XSLT 2.0,
XQuery 1.0 Runtime
WAS 8.0
WAS 7.0
XPath 1.0
XSLT 1.0
XPath 1.0
XSLT 1.0
© 2011 IBM Corporation
17
WAS V8.0 アナウンスメント・ワークショップ
ここでは、WASにおいて使用可能なXMLプログラミングモデルについて確認します。
WAS 7ではXPath 1.0とXSLT 1.0が使用可能です。これはJava SEのJAXPにおいてこれらが使用可
能であるからです。
WAS 7ではXML Feature Packを導入し、Feature Packの機能が利用可能なプロファイルを作成する
か既存のプロファイルを拡張することにより、XPath 2.0、XSLT 2.0、XQuery 1.0が使用可能になりま
す。
WAS 8ではXML Feature Packの機能が製品本体に組み込まれています。
WAS V8.0 アナウンスメント・ワークショップ
17
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XPath 2.0の主な新機能
ƒ 新しいデータ・タイプをサポート
– XPath 1.0では以下のデータ・タイプのみをサポート
• node-set, boolean, number (floating-point), string
– XPath 2.0ではXML Schemaデータ・タイプをサポート
• プリミティブ・データ・タイプや、ユーザーが定義したデータ・タイプ
ƒ 新しいデータ・タイプの処理を行うための関数および演算子が追加
– 日時の処理の支援、ストリング処理の強化、正規表現のマッチングおよびトークン化
のサポート、数字処理の拡張、シーケンス処理関数の追加など
ƒ シーケンスにもとづいた処理
– XPath 1.0ではノードセット
• 順序性のないノードの集合
– XPath 2.0ではシーケンス
• 順序に意味のある、ノードまたはアトミック値の集合
• 同じものが複数回登場してもかまわない
ƒ 条件 (if/then/else ブランチ)、反復 (for ループ)、および量化表現式 (some お
よび every テスト) の追加
© 2011 IBM Corporation
18
WAS V8.0 アナウンスメント・ワークショップ
ここでは、XPath 2.0の主な新機能を紹介します。
WAS V8.0 アナウンスメント・ワークショップ
18
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XPath 2.0の新機能 – Date型
ƒ XPath 1.0 ではDateはStringであり、処理には追加のライブラリが必要
ƒ XPath 2.0 ではDate型が扱え、関数や演算子が利用できる
– コンテキスト関数 – 現在の時刻に関する情報を動的コンテキストから取得
• fn:current-date(), fn:current-time(), fn:current-dateTime()
– コンストラクター関数
• Basic
– xs:dateTime(), xs:date(), xs:time()
• Gregorian
– xs:gYearMonth(), xs:gYear(), xs:gMonthDay(), xs:gMonth(), xs:gDay(), xs:duration(), xs:yearMonthDuration(),
xs:dayTimeDuration()
– 比較演算子
• 大なり、小なり、等しいといった比較がDateに関して可能
– コンポーネント抽出
• durationsからyears/months/days/hours/minutes/secondsを抽出
• dateからyear/month/day/timezone、timeからhour/minute/second/timezone、dateTimeから
year/month/day/hour/minute/second/timezoneを抽出
– タイムゾーン調整
• adjust-dateTime/date/time-to-timezone
– 算術演算子
• times, dates, dateTimesの引き算からdurationsを計算
• times, dates, dateTimesにdurationsを足し引き
ƒ例
– xs:date("2009-01-01") + xs:yearMonthDuration('P1M') = 2009-02-01
– xs:date("2009-01-01") < fn:current-date() = true
– fn:adjust-date-to-timezone(xs:date("2009-01-02"), xs:dayTimeDuration("-PT5H")) = 2009-01-02-05:00
© 2011 IBM Corporation
19
WAS V8.0 アナウンスメント・ワークショップ
XPath 2.0の新機能のうち、一つをここで紹介します。
Date型の処理に関する新機能について説明します。
WAS V8.0 アナウンスメント・ワークショップ
19
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XSLT 2.0の主な新機能
ƒ グループ化のサポート
– xsl:for-each-group、current-group()、currentgrouping-key()を使って容易にグループ化が可
能
ƒ ユーザー定義関数のサポート
– XSLT 2.0では、新しくxsl:function要素が採用
• この要素を使用することによって、他のプログラミング言語の関数のように操作される関数を定義するこ
とが可能
ƒ 一時ツリーのサポート
– XSLT 1.0ではXSL変数および中間XSL変換の結果は単純に文字列
• XPath式による参照不可
– XSLT 2.0では一時ツリーをサポート
• 一時ツリーは文書ノードであるため、XPathの式でアクセスしたり、<xsl:apply-templates>および
<xsl:for-each>要素、Key()およびid()関数によって処理可能
ƒ 単一スタイルシートからの複数の結果文書の出力
ƒ XHTMLのサポート
– 特定の変換の出力をXHTMLとしてシリアライズするように指定できる
ƒ 文字マッピング
– XSLT 1.0では、文字のエスケープ指定は使用が難しいためエラーが起こりがち
– XSLT 2.0では、xsl:character-map要素を使用して、最上位レベルのスタイルシートで文字マッ
ピングを宣言
© 2011 IBM Corporation
20
WAS V8.0 アナウンスメント・ワークショップ
ここでは、XSLT 2.0の主な新機能を紹介します。
WAS V8.0 アナウンスメント・ワークショップ
20
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XSLT 2.0の新機能 – 複数の結果文書
ƒ XSLT 1.0では出力は単一のツリーに制限される
ƒ XSLT 2.0ではどの結果文書に出力するかを指定可能
–xsl:result-documentを使って出力先の結果文書を指定
names.xml
output1.xml
multipleresult.xsl
output2.xml
© 2011 IBM Corporation
21
WAS V8.0 アナウンスメント・ワークショップ
XSLTの主な新機能のうち、一つをここで紹介します。
XSLT 1.0では出力は単一の結果文書に制限されていました。XSLT 2.0では複数の結果文書への
出力が可能になりました。
WAS V8.0 アナウンスメント・ワークショップ
21
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XQueryとは
ƒ XMLデータに対するクエリー言語
–XPath 2.0の拡張仕様
• データモデル、演算子、関数をXPath2.0と共有
• 型システムはXMLスキーマをベースとする
–FLOWR表現式がXQueryの主な機能
• 「for,let,order by,where,return」の5つの句から成り立つ
– for:繰り返しを表す
– let:変数を割り当て
– where:フィルターをかける
– order by:順番を決める
– return:結果の作成
names.xml
sample.xq
output.xml
© 2011 IBM Corporation
22
WAS V8.0 アナウンスメント・ワークショップ
XQueryはXMLデータに対するクエリー言語です。
XPath 2.0の拡張使用となっていて、XPath表現式を使った問い合わせも可能ですが、FLOWER表
現式がXQueryの主な機能となります。
WAS V8.0 アナウンスメント・ワークショップ
22
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
XQuery 1.0の機能 - Join
ƒ XQueryの強みの一つがXMLツリーをまたがったJoin
–理解しやすい言語
–すべての典型的なjoin (outer join, left outer join, full outer join)が可能
sales.xml
productStasOut.xml
productStas.xq
products.xml
23
© 2011 IBM Corporation
WAS V8.0 アナウンスメント・ワークショップ
ここでは、XQueryならではの便利な機能の一つとして、Join機能を紹介します。
WAS V8.0 アナウンスメント・ワークショップ
23
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
IBM XML APIの基本的な使用法
ƒ XPath / XSLT / XQuery で共通のステップ
–
–
–
–
–
1. factoryを作成(共通のクラス)
2. factroyからexecutableを作成
3. 入力となるStreamSourceを作成
4. executableを実行
5. 結果を表示する(XSLTでは結果はオブジェクトに格納)
© 2011 IBM Corporation
24
WAS V8.0 アナウンスメント・ワークショップ
実際にWASにおいてXPath 2.0、XSLT 2.0、Qeury 1.0を使う方法を解説します。
JAXPではこれらの機能は使用可能ではないため、IBMが提供するcom.ibm.xml.xapiパッケージを使
用します。
このパッケージを使う場合のプログラミングのお作法は3つの仕様間で共通となっており、簡単で理
解しやすいものです。
ここで、IBM独自のAPIを使用することが将来の制約となることを懸念される方もいるかと思います。
XSLTなどを呼び出すためのAPIは独自のものとなりますが、XSLTなどの資産そのものは別の実装
でも使用することができます。
WAS V8.0 アナウンスメント・ワークショップ
24
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
カスケードの例
ƒ XQueryの出力をXSLTの入力とするカスケードの例
–1. 初期データで処理を開始
–2. 入力されたデータに対してクエリーを実行し、中間データを生成
–3. クエリーの結果を変換の入力とし、最終的なデータを生成
© 2011 IBM Corporation
25
WAS V8.0 アナウンスメント・ワークショップ
実際のプログラミングにおいては、3つの使用を組み合わせて、ある処理の出力を別の処理の入力
とするいわゆるカスケードを行うことができます。
WAS V8.0 アナウンスメント・ワークショップ
25
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
IBM XMLランタイムの実行オプション
ƒ 3つの実行モードを提供
ƒ インタープリター(デフォルト)
–実行可能ファイルがアドホックで生成され、再利用されない場合に推奨
ƒ コンパイラー(初回アクセス時にコンパイルし、再利用する)
–実行可能ファイルがアドホックで生成され、再利用される場合に推奨
–プログラミングコードにおいてXStaticContext.setUseCompiler(true)を使用
する
ƒ プリコンパイル
–実行可能ファイルがアプリケーションの作成時にわかっている場合に推奨
–スクリプト、ANTタスクまたはJavaコードによってプリコンパイルする
–プログラミングコードにおいて、プリコンパイルされた実行可能ファイルを
ロード
© 2011 IBM Corporation
26
WAS V8.0 アナウンスメント・ワークショップ
実際にXML操作を実行する場合の実行オプションについて説明します。
インタープリター(デフォルト)とコンパイラーを選択できます。また、事前にプリコンパイルを行うこと
が可能な場合もあります。
ある処理の実行速度はコンパイルされた実行可能ファイルのほうが一般的に早くなりますが、コン
パイルされた実行可能ファイルの作成にかかるコストと、実行時間はトレードオフの関係にあります。
ある実行可能ファイルに対して入力される文書が少ない場合はコンパイルを行うメリットがあまりな
いかもしれません。入力される文書の数が多い場合やサイズが大きい場合は、コンパイルを行うメ
リットが大きいといえます。
また、もっとも処理の効率のよいのはプリコンパイルですが、プリコンパイルがすべてのアプリケー
ションに利用できるとは限りません。
WAS V8.0 アナウンスメント・ワークショップ
26
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
互換性
ƒ 既存のJAXP XPath 1.0, XSLT 1.0アプリケーションは新しいラン
タイム(WAS 8, WAS 7 XML FeP)でも変更なく動作する
ƒ これらのアプリケーションを新しいランタイム用にコンバートするこ
とも可能
–呼び出しAPIをIBM XML APIに変更する(変更の容易さはJAXP APIの使
用方法に依存)
–XPath 2.0とXSLT 2.0 仕様では、純粋な1.0動作との違いを最小化するた
め、後方互換モードを定義している
• XPathではAPIで指定する
• XSLTではスタイルシートのxsl:version属性で指定する
– xsl:use-when属性を使って、バージョンによって異なる動作をさせることも可
能
ƒ 長期的な視点では、機能拡張のアドバンテージを得て、プログラ
ムの複雑さを減らすために、バージョン2.0のアプリケーションとラ
ンタイムに移行することが推奨
© 2011 IBM Corporation
27
WAS V8.0 アナウンスメント・ワークショップ
最後に互換性について説明します。
WAS V8.0 アナウンスメント・ワークショップ
27
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
WASが提供するXML機能のまとめ
ƒ XPath 2.0、XSLT、2.0、XQuery 1.0により、XMLを扱うプログラ
ミングがより簡単に
–XPathはXMLのある部分を指し示す言語
–XSLTはXMLの変換を行う言語
–XQueryはXMLに対して問い合わせを行う言語
ƒ WASではV8またはV7 + XML Feature Packでこれらの新しい仕
様をサポート
© 2011 IBM Corporation
28
WAS V8.0 アナウンスメント・ワークショップ
WASが提供するXMLプログラミングモデルについてのまとめになります。
WAS V8.0 アナウンスメント・ワークショップ
28
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
参考資料
ƒ 仕様
– XPath2.0
• http://www.w3.org/TR/xpath20/
– XSLT2.0
• http://www.w3.org/TR/xslt20/
– XQuery1.0
• http://www.w3.org/TR/xquery/
ƒ XML Feature Pack関係のリンク集
– http://bit.ly/XMLFEP
ƒ developerWorks : XML
– http://www.ibm.com/developerworks/jp/xml/
ƒ developerWorks : WebSphere
– http://www.ibm.com/developerworks/jp/websphere/
ƒ Feature Pack for XML 製品ページ
– http://www.ibm.com/software/jp/websphere/apptransaction/was/featurepacks/x
ml/
ƒ Feature Pack for Modern XML InfoCenter
– http://publib.boulder.ibm.com/infocenter/wasinfo/fep/index.jsp
© 2011 IBM Corporation
29
WAS V8.0 アナウンスメント・ワークショップ
developerWorksにはXMLに関連したさまざまなトピックの記事がたくさんありますのでぜひ参照して
ください。
WAS V8.0 アナウンスメント・ワークショップ
29
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
2. Javaバッチ
© 2011 IBM Corporation
30
WAS V8.0 アナウンスメント・ワークショップ
WAS V8.0 アナウンスメント・ワークショップ
30
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Agenda
§2. Javaバッチ
–
–
–
–
–
–
–
–
–
–
–
–
–
–
バッチ処理とは
Javaバッチ登場の背景
WASにおけるJavaバッチ機能
バッチ実行環境の基本コンポーネント
xJCLとは
呼び出し用インターフェース
スケジューラー
チェックポイント&リスタート機能
Javaバッチの実行環境および開発環境
Compute Grid Toolsで簡単開発
バッチ・プログラミング・モデルの主な要素
アプリケーションのパッケージング
WCGのご紹介
まとめ
© 2011 IBM Corporation
31
WAS V8.0 アナウンスメント・ワークショップ
WAS V8.0 アナウンスメント・ワークショップ
31
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
WAS V8でのFeature Pack
© 2011 IBM Corporation
32
WAS V8.0 アナウンスメント・ワークショップ
セッションの後半はJavaバッチ機能についてお話します。
WAS V8.0 アナウンスメント・ワークショップ
32
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
バッチ処理とは
ƒ バッチ処理
⇔オンライン処理
– データを纏めて一括処理
– 複数の手順からなる処理を自動的に連続して処理
– 処理の実行に時間がかかる
– 処理中にユーザーとの対話は発生しない
ƒ バッチ処理の例
– 外部イベント契機の非同期・長時間処理
•
•
•
•
受注を受けて、多数の工程を含む生産計画を作成する(製造業)
工業製品のデザイン変更の影響を、数時間かけてシミュレーション(製造業)
価格変動の膨大な履歴を入力して、数時間かけてリスク分析計算(金融業)
帳票の作成・印刷
– 定時起動による定型処理(日次/月次/期末の処理等)
• 金融機関における振り込み処理
• クレジット会社の請求書作成業務
企業のITインフラではバッチ処理が重要な役割を担っている
企業のITインフラではバッチ処理が重要な役割を担っている
© 2011 IBM Corporation
33
WAS V8.0 アナウンスメント・ワークショップ
そもそも、バッチ処理というのは、どういう処理なのでしょうか?
バッチ処理とは、一括処理を行う処理方式です。
処理に時間がかかることが最大の特徴です。
対義語となるのはオンライン処理で、こちらは比較的短時間で処理が終わります。
ここではバッチ処理の例をいくつか挙げていますが、このように企業のITインフラではバッチ処理が
とても重要な役割を担っています。
WAS V8.0 アナウンスメント・ワークショップ
33
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Javaバッチ登場の背景
ƒ 既存資産に対応可能な技術者の減少
– 従来のバッチ処理は、COBOL、PL/Iなどが中心
– これらのスキル保有者減少によりメンテナンスが困難
ƒ 新規システム構築時の課題
– 開発言語を統一化したい(複数開発言語の担当者が必要)
Javaバッチにすると
Javaバッチにすると
オンラインもバッチもJava開発担当者
オンラインもバッチもJava開発担当者
– オンライン処理システムとの連携が困難
ƒ Javaの台頭
Javaバッチにすると
Javaバッチにすると
– Java実行性能の向上
– 大規模開発における実績
オンライン処理との連携が容易
オンライン処理との連携が容易
オンラインバッチでのコンポーネント共有が可能
オンラインバッチでのコンポーネント共有が可能
オンライン処理のバッチ化、バッチ処理のオンライン化が可能
Javaでバッチ処理!
© 2011 IBM Corporation
34
WAS V8.0 アナウンスメント・ワークショップ
Javaバッチ処理登場には以下の3つの背景があります。
・既存資産に対応可能な技術者の減少
・新規システム構築時の問題
・Java実行性能の向上
WAS V8.0 アナウンスメント・ワークショップ
34
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
WASにおけるJavaバッチ機能
ƒ JavaEEアプリケーション・サーバーを活用した、バッチ/グリッド・アプリケーショ
ン実行エンジン(バッチ・コンテナー)
– トランザクション・バッチ / 数値計算型バッチの2種類のバッチ処理をサポート
– ジョブ受付とジョブ実行のサーバーを分離、非同期に処理を実行
ƒ POJOによるバッチアプリケーション開発
– 最低限必要なコーディングはジョブ実装部分のPOJO開発のみ
ƒ WAS V7ではFeature Pack for Modern Batch(Batch FeP)によりJavaバッチ
機能を提供
ƒ WAS V8ではJavaバッチ機能は製品に組み込み済み
トランザクション・バッチ
Web
Container
EJB
Container
数値計算型バッチ
Batch
Container
WAS V8またはWAS V7 + Batch FeP
© 2011 IBM Corporation
35
WAS V8.0 アナウンスメント・ワークショップ
WASではJavaEEアプリケーション・サーバー活用したバッチ/グリッド・アプリケーションの実行エン
ジンを提供しています。トランザクション・バッチと数値計算型の2つのタイプのアプリケーション・プ
ログラム実行をサポートしています。
バッチアプリケーション開発における最低限必要なコーディングはジョブ実装部分のみでPOJO開
発となっています。
Javaバッチ機能はWAS V7ではFeature Pack for Modern Batchによって提供されますが、WAS V8
では製品に組み込み済みの機能となりました。両者の機能の大きな違いはないため、これ以降で
は、両者をまとめて「WASのJavaバッチ機能」として説明します。
WAS V8.0 アナウンスメント・ワークショップ
35
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
サポートするバッチ・アプリケーションの種類
トランザクション・バッチ
入力
データ
次行読み込み
(Batch Loop)
データ
読み込み
バッチ・
ロジック
(Step1)
データを読み込んでは処理を行い、
書き込むことを繰り返し行う構造の
アプリケーション
チェックポイント&リスタート機能をサ
ポートする
例)日次処理、月次処理など
データ
分割1
非同期実行
計算データ
UOWコミット
(チェックポイント
取得)
出力
データ
次行読み込み
(Batch Loop)
データ
読み込み
バッチ・
ロジック
(Step2)
数値計算型バッチ
CPUを長時間大量消費して計算
を行い、結果を非同期に出力する
計算集約型のアプリケーション
例)科学技術計算・金融シミュレー
ションなど
非同期実行
UOWコミット
(チェックポイント
取得)
非同期実行
© 2011 IBM Corporation
36
WAS V8.0 アナウンスメント・ワークショップ
WASがサポートするバッチ・アプリケーション・タイプは2種類になります。
①トランザクション・バッチ
入力データを読み込んでは処理を行い、処理結果データをファイルもしくはDBへ書き込むというトラ
ンザクションを繰り返し行うタイプのアプリケーションです。日次処理、月次処理などに代表されるい
わゆるバッチ処理がこれにあたります。Entity EJB(CMP) をベースにしたプログラミング・モデルと
なります。チェックポイント&リスタート機能をサポートします。
②数値計算型(Compute-Intensive)バッチ
CPUを大量消費して長時間にわたる計算処理を行い、その結果を非同期に出力するタイプのアプ
リケーションです。科学技術計算・金融シミュレーションなどのようなものに代表され、入力データを
分割して大量のサーバーで計算処理を実行させるいわゆるGrid的なアプリケーションがこれにあた
ります。Asnyc Bean をベースにしたプログラミング・モデルとなります。
WAS V8.0 アナウンスメント・ワークショップ
36
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
バッチ実行環境の基本コンポーネント
WAS セル
ƒ ジョブ・スケジューラー
– インターフェースからのジョブ受付
– グリッド・エンドポイントへのジョブ割り振り
– ジョブ情報をデータベースに保存
– 管理コンソールからホストするクラスター/
サーバーを指定
Deployment
Manager
グリッド・
エンドポイント
ジョブ受付
xJCL
ジョブ・スケ
ジューラー
グリッド・
エンドポイント
ƒ グリッド・エンドポイント
– バッチ・アプリケーションの実行環境
クラスター
or 単体サーバー
:
クラスター
or 単体サーバー
• トランザクション・バッチ型と数値計算型のア
プリケーションが共に稼動
• 通常のJavaEEアプリケーションと共存可能
– チェックポイント情報(ジョブ実行状況)を
データベースに保存
ジョブ情報
チェックポイント情報
ジョブ・データ
ベース
© 2011 IBM Corporation
37
WAS V8.0 アナウンスメント・ワークショップ
Javaバッチの実行環境を構成する基本のコンポーネントを紹介します。
ジョブ・スケジューラーではジョブ実行制御機能を提供しています。管理インターフェースからジョブ
を受付け、グリッド・エンドポイントに対してジョブを割り振ります。受け付けたジョブの情報や状態は
ジョブ・データベースに保存します。
WAS管理コンソールからジョブ・スケジューラーをホストさせるクラスター/単体サーバーを指定する
ことで、該当するサーバーにLongRunningScheduler.ear
がデプロイされジョブ・スケジューラーとして稼動します。
グリッド・エンドポイントではバッチ・アプリケーションの実行環境を提供します。トランザクション・
バッチ型と数値計算型のアプリケーション稼動が可能ですが、通常のJavaEEアプリケーションも同
一サーバー上で稼動させることができます。
グリッド・エンドポイントで稼動するバッチ・アプリケーションはチェックポイント情報(ジョブの実行状
況)をジョブ・データベースに保存します。
ジョブ・スケジューラー、グリッド・エンドポイントはそれぞれ単体サーバーもしくはクラスターに構成
できます。典型的な構成はジョブ・スケジューラーが単体もしくは2台程度のクラスターで、グリッド・
エンドポイントがクラスター構成となります。
ジョブ・スケジューラー、グリッド・エンドポイントともにジョブの状態管理などのためにDBを使用しま
す。それぞれ単体構成であれば自動的にWAS付属のDerbyを使用した構成となります。複数サー
バーからアクセスするクラスター構成の場合、Derbyのネットワーク・サーバー環境を使用してDBを
作成するか、DB2/OracleのDBMSを使用して構成します。必要なDDLなどは製品導入ディレクトリ
で提供されます。
ジョブを実行する際には、クライアントからいずれかの管理インターフェースを使用してジョブ・スケ
ジューラーに対してリクエストが投げられます。ジョブ実行に必要なパラメーター群をXMLファイルで
渡します。このXMLファイルはXMLベース・ジョブ管理言語、「xJCL」で記述されます。ジョブ・スケ
ジューラーはクライアントに対し、ジョブIDと呼ばれる一意の値をリクエスト受領の旨として返します。
ジョブ・スケジューラーはその後空いているグリッド・エンドポイントを探し、ジョブの実行を依頼しま
す。ジョブが完了すると結果はジョブ・スケジューラーに通知されるのですが、クライアント側には通
知されません。従ってクライアントは定期的に終了したかどうかを確認する必要があります。
WAS V8.0 アナウンスメント・ワークショップ
37
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
xJCL(XML-based Job Control Language)とは
ƒ
ジョブの定義/実行手順(JCL=Job Control Language)をXMLで記述
–
–
–
xJCLをもって、ジョブ・スケジューラーへジョブの実行依頼
ジョブ・スケジューラーはxJCL情報をグリッドエンドポイントへ渡してジョブをディスパッチ
グリッドエンドポイントは、xJCL定義に従ってディスパッチされたジョブを実行
Client
xJCL
Job Scheduler
Grid Endpoint
Submit
Dispatch
<Job ID>
Result
Execute
ƒ
バッチ・アプリケーションの種類によりxJCLのエレメント(XML Schema)は
異なる
–
–
トランザクション・バッチ型
数値計算(CI)型
© 2011 IBM Corporation
38
WAS V8.0 アナウンスメント・ワークショップ
ホストを触ったことがある方であればなじみがあると思いますが、ホストでは実行ジョブの定義と実
行手順を記述したものにJob Control Language (JCL)があります。WASのJavaバッチ機能では、
ジョブの定義と実行手順はxJCLとよばれる XMLベースのJCLで記述します。
xJCLへは、ジョブの名前、JNDI名と実装クラス名、ジョブの実行順序、そのほかジョブの実行制御
に関わるパラメータとプロパティを記述します。
以下のように、ジョブのサブミット、ジョブの実行環境へのディスパッチ、ジョブの実行は、すべて
xJCLに書かれている定義に従って実施されることになります。
①クライアントは、スケジューラーに対してxJCLをもってジョブを実行依頼します。
②スケジューラーは、サブミットされたxJCLの定義に従い、該当のジョブを処理可能な実行環境を
選択し、ディスパッチします。
③グリッド実行環境も、xJCLの定義に従い、サブミットされたジョブに該当するアプリケーションを実
行します。
バッチ・アプリケーションの種類によりサポートされるxJCLのエレメント、すなわちXMLのSchemaが
異なっていますので注意してください。
続く2ページで、各アプリケーションの種類ごとのサンプルxJCLを載せていますので、参考にしてく
ださい。
WAS V8.0 アナウンスメント・ワークショップ
38
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
(参考)サンプルxJCL – トランザクション・バッチ型
job
step-scheduling-criteria
checkpoint-algorithm
result-algorithms
job-step
batch-data-streams
<?xml version="1.0" encoding="UTF-8"?>
<job name="BatchTest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<jndi-name>ejb/BatchTestEJBController</jndi-name>
<step-scheduling-criteria>
チェックポイント・ア
<scheduling-mode>sequential</scheduling-mode>
ルゴリズムの記述
</step-scheduling-criteria>
<checkpoint-algorithm name="recordbased">
<classname>com.ibm.wsspi.batch.checkpointalgorithms.recordbased</classname>
<props>
チェックポイント・アル
<prop name="recordcount" value="1000" />
<prop name=“TransactionTimeOut" value="1000" />
ゴリズムのプロパティ
</props>
</checkpoint-algorithm>
<results-algorithms>
リザルト・アルゴ
<results-algorithm name="jobsum">
リズムの記述
<classname>com.ibm.wsspi.batch.resultsalgorithms.jobsum</classname>
</results-algorithm>
</results-algorithms>
リザルト・アルゴリ
<job-step name="Step1">
ズムのクラス名
<jndi-name>ejb/BTStep1EJB</jndi-name>
<checkpoint-algorithm-ref name="recordbased" />
<results-ref name="jobsum"/>
バッチステップ
<props>
Bean のJNDI名
<prop name="LOG_LEVEL" value="2" />
</props>
<batch-data-streams>
<bds>
BDSのクラス名
<logical-name>step1bds-in</logical-name>
<impl-class>com.ise.sample.batchtest.bds.BTStep1_BDS_IN</impl-class>
<props>
<prop name="INPUT_FILENAME" value=“/work/data/BT01IN_1000000.txt" />
</props>
</bds>
BDSに渡すプロパティー
<batch-data-streams>
</job-step>
<job-step name=“Step2”>
・・・
</job-step>
</job>
© 2011 IBM Corporation
39
WAS V8.0 アナウンスメント・ワークショップ
xJCLへは、バッチ・アプリケーションに含まれているバッチ・ステップの実行定義(JNDI名と実装クラ
ス名)、実行順序、そしてチェックポイント・アルゴリズムの挙動など、ジョブの実行制御に関係ある
記述をします。
最も大きなエレメントとして、jobがあります。その中に、step-scheduling-criteria、checkpointalgorithm、result-algorithmsおよびjob-stepなどのエレメントが含まれます。job-stepエレメントの中
にはbatch-data-stream要素が含まれます。その他に、バッチ型では複数バッチ・ジョブ・ステップが
サポートされますので、このサンプルでは詳細を見せていないため有りませんが、ジョブ内に複数
バッチ・ジョブ・ステップを定義している場合には、step-schedulingエレメントというものでバッチ・ジョ
ブ・ステップの実行の可否を判断するものも有ります。
WAS V8.0 アナウンスメント・ワークショップ
39
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
(参考)サンプルxJCL – 数値計算(CI)型
実行するCIController
(SLSB)のJNDI名
job
job-step
<?xml version="1.0" encoding="UTF-8"?>
<job name="SimpleCIEar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<jndi-name>ejb/com/ibm/ws/ci/SimpleCIEJB</jndi-name>
<job-step name="Step1">
実行する
<!-- classname element within the job-step indicates this is a CI application -->
CIWorkクラス名
<classname>com.ibm.websphere.ci.samples.SimpleCIWork</classname>
<!-- following element is used to pass properties (name-value pairs) to CI application -->
<props>
<prop name="calculationTimeInSecs" value="30" />
SimpleCIWork
<prop name="outputFileName" value="/tmp/SimpleCI.out" />
に渡すプロパティー
</props>
</job-step>
</job>
© 2011 IBM Corporation
40
WAS V8.0 アナウンスメント・ワークショップ
基本的な大枠はCI型でもバッチ型と同様ですが、CI型でサポートされるバッチ・ジョブ・ステップ数は
1ステップのみとなっており、またチェックポイント機能などもないため、ジョブの実効制御に関わる
定義の数も少なくなっています。サンプルを見ても、非常にシンプルであることがわかると思います。
WAS V8.0 アナウンスメント・ワークショップ
40
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
呼び出し用インターフェース
•GUIツール
- ジョブ管理コンソール(JMC)
•コマンドライン
- lrcmd
•API
- EJB Clients
- Web Services clients
グリッド・
エンドポイント
xJCL
xJCL
ジョブ・
スケジューラー
クラスター
or 単体サーバー
グリッド・
エンドポイント
:
クラスター
or 単体サーバー
© 2011 IBM Corporation
41
WAS V8.0 アナウンスメント・ワークショップ
クライアントはグリッド・エンドポイントには直接アクセスせず、ジョブ・スケジューラーに対してリクエ
ストを投げます。提供されている呼び出し用インターフェースを紹介します。ジョブ実行以外にもジョ
ブ・ステータスの確認等を行う管理インターフェースとなります。
クライアントはCUIのコマンド(lrcmd)、GUIのブラウザー画面(ジョブ管理コンソール)を選ぶことが
出来ます。ジョブ・スケジューラーの受付プログラムはEJBのシステム・アプリケーションであり、そ
のアプリケーションに対するWebサービスのラッパーが提供されているので(lrcmdなども内部でこ
れらのアプリケーションにアクセスしています)、EJBもしくはWebサービスのAPIを使用してクライア
ント・アプリケーションを自作することも可能です。
WAS V8.0 アナウンスメント・ワークショップ
41
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
ジョブ管理コンソール(JMC)
ƒ ジョブ実行及び管理をブラウザ・ベースで実施
– xJCLファイルを指定したジョブのサブミット
– 実行ジョブの状態表示
• 実行ジョブに対するアクション(取り消し、除去、再始動、再開、停止、中断)
• ジョブログの表示
http://localhost:9080/jmc/console.jsp
© 2011 IBM Corporation
42
WAS V8.0 アナウンスメント・ワークショップ
ジョブ管理コンソールでは、ジョブの実行及び管理をブラウザ・ベースで実施することができます。
WASの管理コンソールとは別に提供されており、以下のURLにアクセスします。ジョブ管理コンソー
ルは、ジョブ・スケジューラー上で稼動するアプリケーションなので、ホスト名/ポート番号にはジョ
ブ・スケジューラーの値を指定します。
http://<host_name>:<port#>/jmc/console.jsp
ジョブ管理コンソールではあらかじめ用意したxJCLファイルと共にジョブのサブミットを実行すること
ができます。xJCLファイルに変数が使用されている場合は、値入力も行います。
グリッド・エンドポイントで実行中(完了)のジョブの状態を表示し、「取り消し/除去/再始動/再開/
停止/中断」のアクションを施すことができます。
WAS V8.0 アナウンスメント・ワークショップ
42
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
lrcmdコマンド
ƒ 基本のコマンド・ライン・ツール
– ジョブに対する全ての操作が可能
– JavaEEクライアント・アプリケーションとして実装されている
• ジョブの実行依頼をしてもジョブの終了まで待たない
– TWS(TivoliWorkloadScheduler)など外部スケジューラー連携の場合には、工夫が必
要(後述)
• コマンド実行毎にJVMが起動
– ステータス確認などのため、繰返し実行するにはオーバーヘッドが大きい
ジョブの実行依頼
C:¥WebSphere¥AppServer¥bin>lrcmd.bat -port=9080 -cmd=submit -xJCL=..¥longRunning¥postingSampleXJCL.xml userid=wasadmin -password=passw0rd
CWLRB4940I: com.ibm.ws.batch.wsbatch : -port=9080 -cmd=submit -xJCL=..¥longRunning¥postingSampleXJCL.xml userid=wasadmin -password=********
CWLRB4960I: Thu Oct 25 13:52:12 JST 2007 : com.ibm.ws.batch.wsbatch : ジョブ [PostingsSampleEar:10] がサブミットされます
ジョブのステータス確認
C:¥WebSphereXD¥AppServer¥bin>lrcmd.bat -port=9080 -cmd=status -jobid=PostingsSampleEar:10 -userid=wasadmin password=passw0rd
CWLRB4940I: com.ibm.ws.batch.wsbatch : -port=9080 -cmd=status -jobid=PostingsSampleEar:10 -userid=wasadmin password=********
CWLRB5160I: Thu Oct 25 13:53:48 JST 2007 : ジョブ [PostingsSampleEar:10] の実行は終了しました。
© 2011 IBM Corporation
43
WAS V8.0 アナウンスメント・ワークショップ
lrcmdはジョブの実行および管理を行うコマンド・ライン・ツールです。ジョブ管理に関わる一通りの
操作が可能です。
先にも述べましたが、lrcmdコマンドはジョブのサブミットを行っても、当該ジョブのサブミット処理が
終了するとジョブIDを返して直ぐに抜けてしまい、ジョブの成否を待ちません。したがって、ジョブの
成否は改めてlrcmdからステータス確認のコマンドを実行するか、ジョブ管理コンソールから確認す
る必要があります。
lrcmdはJ2EEクライアント・アプリケーションとして実装されており、コマンドの実行毎にJVMが起動/
停止します。lrcmdのステータス確認コマンドをポーリングなどの用途に使用するには実行するには
オーバーヘッドが大きくなり、注意が必要です。コマンドの実行毎にJVMが起動しますので、外部ス
ケジューラーにより同時に複数のlrcmdコマンドがキックされた際にも、複数のJVMが同時に起動し、
マシン・リソースを浪費してしまうことがありますので注意が必要です(連携シェル内で一度に起動
できるlrcmdコマンドの数を制限するなどが現実的な対応です)。
WAS V8.0 アナウンスメント・ワークショップ
43
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
スケジューラー
ƒ WASのJavaバッチ機能ではスケジューラー機能を提供していない
スケジューラー製品を利用するかどうか?
ƒ スケジューラーの役割
– 様々な起動条件での稼動
21時ジョブ
起動
• 時間起動
• ファイルが生成されたら起動
• 複数ジョブの依存関係
JobAが完了した
らJobB実行
ファイル検
知で起動
JobA
JobB
– 稼動状況のモニタリング、異常時の通知
• オフラインバッチの数十個のジョブの稼動状況確認
• 予定時間にジョブCが終了していない場合の原因特定
• 異常時の画面通知やメール送信
製品を利用しないと実装困難
ƒ スケジューラー製品
– IBM TWS(Tivoli Workload Scheduler)
– 日立 JP1
ƒ スケジューラー製品を利用しないケース
– 数個~10個のジョブ数で、処理制御が複雑でないケース
– UNIX系環境では、シェルとcronで制御することが多い
– Java EEアプリケーションでの実装(Async Bean / EJB Timer)
• 管理インターフェースのEJBやWebサービスのAPIを使用
© 2011 IBM Corporation
44
WAS V8.0 アナウンスメント・ワークショップ
バッチ実行にはスケジューラーが必要となりますが、WASでは機能提供されていません。そこで、ス
ケジューラー機能をどう実装するかを検討する必要があります。スケジューラーの役割として重要
なのは「様々な起動条件での稼動」と「稼動状況のモニタリング、異常時の通知」です。
スケジューラーの実装を検討する際に、まずは製品を使用するかどうかという判断が必要になりま
す。
スケジューラー製品を利用しない場合、UNIX系環境ではシェルとcronで制御することが多いのです
が、製品を利用しなくとも実装可能かどうかを検討する必要があります。特に稼動状況のモニタリン
グや異常時に通知を上げるといった機能はスケジューラー製品で提供されていますが、シェルと
cronでは実装は困難です。
稼動状況のモニタリングといった機能は大規模システムでの数十個のオフラインバッチなどで必要
とされる要件です。大規模なオフラインバッチでは製品の採用を検討し、数個~10個程度のジョブ
数で処理制御も複雑でないケースは製品を利用しないのが一般的です。
WAS V8.0 アナウンスメント・ワークショップ
44
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
(参考)TWS連携:lrcmdでの実装例
TWS
シェル名や引数を渡して、ジョブを起動
連携スクリプトや引数、TWS変数を指定して実行
JOB
①ジョブの実行依頼
レポジトリに登録したジョブ名と置換える変数の値を引数に
指定し、lrcmdコマンドよりジョブ実行依頼
lrcmdのリターンとして、JOBIDを受取る
lrcmd.sh –cmd=submit …
②ジョブのステータス確認
定期的に(1分間隔など)、SQLでジョブ・データベースの
ジョブ・ステータスを直接監視
※lrcmdコマンドでもステータスは確認できるが、コマンド実行
毎にJVMが起動し負荷が高いため注意が必要
グリッド・エ
ンドポイント
ジョブ・スケ
ジューラー
JOB
BatchApp:101
ジョブDB
③リターン・コードを戻す
TWSにジョブの成否を伝える
FP Batchのジョブ・ステータスをそのまま返すか、
シェル自体のリターン・コードを返す
select STATUS from LRSSCHEMA.JOBSTATUS
where JOBID= ‘BatchApp:101’
© 2011 IBM Corporation
45
WAS V8.0 アナウンスメント・ワークショップ
lrcmdでのTWS連携の実装例です。
変数が使えることでxJCLの生成処理は不要であり、xJCLは事前にレポジトリーに登録しておくこと
ができます。
ジョブの実効依頼は、レポジトリに登録したジョブ名と置換え変数値を引数に渡して行います。
lrcmdコマンドを使用してTWS連携を実装する場合、TWSとバッチジョブの連携のためのスクリプトに
必要な機能は以下のようになります。
(オプション)実行用xJCLの生成:xJCL内で変数が使用可能なので基本的には実行時にxJCLを生
成するといった作業は不要です。変数を利用することができず、実行時に毎回xJCLを生成する必
要がある場合のみの処理です。
①ジョブの実行依頼:ジョブ・スケジューラーに対して、ジョブの実行依頼を行います。
②ジョブのステータス監視、終了検知:TWSにバッチ・ジョブの実行結果を戻すために、ジョブのス
テータスを確認する必要があります。lrcmdコマンドはジョブの終了を待機しないため、連携スクリプ
トの中で独自にポーリングの実装を盛り込む必要があります。
③ジョブの成否をリターン・コードでTWSへ返す:最終的なジョブの実行結果をTWSにリターン・コー
ドとして返す必要があります。
WAS V8.0 アナウンスメント・ワークショップ
45
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
チェックポイント&リスタート機能(1/2)
ƒ ジョブ実行時にエラーが発生した際の対応
–最初からのジョブ再実行
• 大量データ処理では非現実的
• 実行時間帯が決まっている場合は適さない
–未完了部分からの再実行
• どこまでの処理が完了しているかステータス確認して、ジョブ再実行
• 処理ステータスをDBに保存
1件ごとに完了ステータスを書き込むのはパフォーマンスが悪いため、再
実行単位でチェックポイントのステータスを書き込む。チェックポイントから、
ジョブを再実行
© 2011 IBM Corporation
46
WAS V8.0 アナウンスメント・ワークショップ
ジョブ実行時にエラーが発生した場合、どのような処理が必要になるでしょうか?一つは完了処理
を全てロールバックし、最初からのジョブ再実行が考えられますが、バッチ処理を行うためにオンラ
イン処理を停止する時間帯、いわゆるバッチ・ウィンドウを設けている場合、途中で障害が発生した
時に処理を最初からやり直していては、バッチ・ウィンドウを突き抜けて、オンラインの再開時刻ま
でにバッチ処理が完了しない懸念があります。
最初からではなく、未完了部分からの再実行が効率的です。エラー発生時にどこまでの処理が完
了しているかステータスを確認しジョブを再実行します。処理完了のステータスはデータベースや
ファイル等に保存しておく必要があります。1件の処理ごとに完了ステータスを書き込むのはパ
フォーマンスの悪化をまねくため、一定の件数ごとにチェックポイントとしてステータスを書き込み、
エラー発生時にはチェックポイントからジョブを再実行するのが一般的です。
WASのJavaバッチ機能では、障害時の処理の復旧に要する時間を短縮するための、チェック・ポイ
ント&リスタート機能を提供しています。バッチ実行基盤は指定されたタイミングでバッチの状態
データをDBに保存し、もし、障害による中断が発生すれば、障害発生直前のチェック・ポイント時の
状態を復旧し、その時点から処理を再開します。
WAS V8.0 アナウンスメント・ワークショップ
46
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
チェックポイント&リスタート機能(2/2)
ƒ
ƒ
ƒ
指定された間隔で処理済みレコード数をチェックポイントとしてDBに保管
トランザクションが開始後、チェックポイント取得時に処理済レコード(UOW)をコミット
WASでは製品機能として提供されており、2つのチェックポイント・アルゴリズムを提供
–
–
ファイルから読み込ん
だデータをDBに書き
込む処理
timebased(秒指定) / recordbased(レコード数指定)
xJCLファイルで指定
checkpoint-algorithm
checkpoint-algorithm
=com.ibm.wsspi.batch.checkpointalgorithms.recordbased
=com.ibm.wsspi.batch.checkpointalgorithms.recordbased
recordcount
recordcount
=10
=10
file
file
Batch1
Batch2
DB
DB
ACCOUNT
トランザクション開始
ACCOUNTID
UOW
チェックポイント取得
ロールバック
障害発生
OVERDRAFTPROTECTION
OVERDRAFTUSED
BALANCE
更新
1000
0
0
更新
1001
0
0
62.0
更新
1002
0
0
563.0
更新
1003
300
0
504.00
更新
1004
0
0
437.00
更新
1006
0
0
1010.00
更新
1008
500
0
983.00
更新
1009
0
0
811.00
更新
1010
0
0
553.00
更新
1011
0
0
1251.00
更新
1014
0
0
730.00
更新
1015
0
0
736.00
更新
47
133.00
トランザクション開始
再実行時は
ここから再開
更新
更新
© 2011 IBM Corporation
1016
100
0
198.00
更新
WAS V8.0 アナウンスメント・ワークショップ
チェックポイント&リスタート機能について解説します。チェックポイント機能とは、バッチが障害など
の理由で途中停止した場合に備えて指定タイミングで定期的にコミットを取り、その進捗を記録する
ことで、回復時に再実行可能な状態にしておく機能です。リスタート機能はチェックポイントの情報を
読み取り、再実行された際に最後にコミットしたレコードの次の行からの処理を行う機能です。
WASのJavaバッチ機能では、チェックポイント&リスターと機能が製品機能として提供されています。
チェックポイントのコミット・タイミングの指定は、xJCL内部のcheckpoint-algorithmで指定します。指
定可能なアルゴリズムは上記例にある“recordbased”(処理行数)の他に、“timebased”(処理秒
数)指定が可能です。ジョブステップの単位で異なるチェックポイント・アルゴリズムを指定することも
出来ます。しかし、チェックポイント指定の単位、すなわち最大UOWの単位はジョブではなくステップ
ですので、三つのステップを内在するジョブでは最小でも三つのUOWに分かれることに注意してくだ
さい。上記の例は、チェックポイントをrecordbasedで10行単位と指定し、障害が起きた場合の挙動
を示しています。
WAS V8.0 アナウンスメント・ワークショップ
47
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Javaバッチの実行環境および開発環境
ƒ 実行環境
–WAS V8.0
–WAS V7.0.0.13~にBatch FePを適用
ƒ 開発環境
–RAD V8.0.1~
–Compute Grid Toolsを使用可能
V8.0.1
New
EAR形式でWAS環境にデプロイ
RAD 8.0.1
ComputeGrid Tools
EAR
WAS 8.0
WAS 7.0 + Batch FeP
xJCL
ジョブ実行時にxJCLを使用
© 2011 IBM Corporation
48
WAS V8.0 アナウンスメント・ワークショップ
Javaバッチの実行環境および開発環境について説明します。
実行環境はWAS V8またはWAS V7.0.0.13以上にBatch FePを適用します。WAS V7の場合は
Feature Packの導入後、Javaバッチ機能が利用可能な専用のプロファイルを作成する必要があり
ます。
開発環境はRAD V8.0.1以上が推奨となります。RAD V8.0.1からはバッチ開発用として新たに
Compute Grid Toolsが提供されるようになりました。
RAD V8.0.1で開発したバッチ・アプリケーションはEAR形式でエクスポートし、WAS環境にデプロイ
するという流れになります。xJCLファイルは実行時に使用しますが、RAD V8.0.1で開発しエクス
ポートしておきます。
WAS V8.0 アナウンスメント・ワークショップ
48
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Javaバッチプログラムの開発・テストの流れ
ƒ Webアプリ同様、RAD/Ecripse上にてバッチ・アプリケーションを開発・テスト
– プログラムはPOJOで開発可能
WSBatch
Packager
• Jarファイルとして書き出した
POJOプログラムをEARにパッ
ケージするユーティリティ
EAR
Eclipse (or RAD)
ComputeGrid
Tools
RAD統合
Java Batch 環境
(スタンドアローン
WAS)
• POJO開発&単体テストを支援
• RAD上のテスト用WASランタ
イムに統合することで効率的
なテストが可能
開発・単体テスト
機能テスト
49
Compute Grid
QA, Production
(WAS ND)
結合テスト~
© 2011 IBM Corporation
WAS V8.0 アナウンスメント・ワークショップ
Javaバッチの開発環境についてもう少し詳しく説明します。
バッチアプリケーションの開発は、Rational Application DeveloperなどのIDEを使用して行うのが一
般的です。
RADでプログラムを書いたら、これをEARファイルにパッケージングして、実際のテスト環境なり本
番環境に通常のWASアプリケーションと同じ要領でインストールします。
パッケージングに関しては、ComputeGrid Toolsを使用できる環境であればそのままEAR形式で
exportできます。 ComputeGrid Toolsが使えない環境の場合は、開発したPOJOをjarとしてexportし、
WSBatchPackagerという専用のパッケージングユーティリティーでもってEAR形式にパッケージする、
という手順をとります。
RADを使用する場合は、RADに統合されたスタンドアローンのWAS環境を使って、テストの実行を
容易に行うことができます。
WAS V8.0 アナウンスメント・ワークショップ
49
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Javaバッチ開発環境の構成イメージ
Rational
Rational Application
Application Developer
Developer V8.0.1~
V8.0.1~
開発
開発
WAS
WAS V8.0
V8.0
WAS
WAS V7.0
V7.0 ++ Batch
Batch FeP
FeP
ワークスペース
テスト
テスト
スタンドアローン・
スタンドアローン・ プロファイル(テスト環境)
プロファイル(テスト環境)
server1
LongRunningScheduler.ear
ComputeGrid Toolsで
開発を支援!
(バッチ・スケジューラー)
JMC
モニター
モニター
Firefox
IE
BatchJob.ear
LRSCHED
Derby
Derby
© 2011 IBM Corporation
50
WAS V8.0 アナウンスメント・ワークショップ
Javaバッチ開発環境の構成イメージになります。
Javaバッチ開発環境としては、以下があります。
・Rational Application Develoer V8.0.1(以下、RAD)
エンタープライズ・アプリケーションを効率よく開発するための機能を豊富に備えた統合開発環境。
開発環境にWASのテスト環境も含まれます。
RADテスト環境では、WAS V7の場合はテストサーバーに対してBatch FePを導入し、テストサー
バーとしてBatch FePのプロファイルを作成します。WAS V8の場合は通常のスタンドアローンのプ
ロファイルが使用できます。
プロファイルの作成後、テスト環境にバッチ機能を統合してテストするための追加のセットアップを
行います。このセットアップはセットアップ用の専用のスクリプトを利用することが用意されています。
なお、システムアプリケーションが使用するリポジトリーのデータベースも、テスト環境の準備の中
でテストサーバーに組み込まれているDerbyデータベースがセットアップされますので、別途リポジ
トリー用DBを用意する必要はありません。但し、作成するバッチ・アプリケーションが使用するアプ
リケーション・データ用のDBは別途用意していただく必要があります。
作成したアプリケーションのテストは、RADのジョブランチャーを使用するか、通常のJavaバッチ機
能が構成された環境と同様に、lrcmdコマンドもしくはジョブ管理コンソール(JMC)から実施します。
WAS V8.0 アナウンスメント・ワークショップ
50
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
Compute Grid Toolsで簡単開発
ƒ
ƒ
ƒ
ƒ
バッチ・プロジェクトの生成
バッチ・ジョブの生成
xJCLエディター
バッチPOJO開発機能
– コードアシスト
ƒ ジョブ実行機能
xJCLエディター
– xJCLファイルから直接ジョブ実行
Job Launcher
• 開発対象は大きく2つ
• ビジネスロジック ⇒POJO
• ジョブ定義
⇒xJCL
• これらの生成を強力に支援!
© 2011 IBM Corporation
51
WAS V8.0 アナウンスメント・ワークショップ
Compute Grid Toolsで提供されているバッチ・アプリケーション開発機能は以下になります。
•バッチ・プロジェクトの生成/バッチ・ジョブの生成:JavaEEアプリケーションでWebプロジェクト生成
のウィザードが提供されているように、「バッチ・ププロジェクト」および「バッチ・ジョブ」を生成するた
めのウィザードが提供されています。
•xJCLエディター:XMLベースのバッチ情報を含んだxJCLファイルを設定ベースで生成するエディ
ターが提供されています。以前は全て作りこみでの生成でしたが、xJCLエディターを使用すること
で容易に誤りなく生成が可能になりました。
•バッチ実行部分のPOJO開発を行う際のコードアシスト機能を提供しています。
•ジョブ実行機能:ワークスペースでxJCLファイルから直接ジョブ実行を行うJob Launcherが提供さ
れています。
WAS V8.0 アナウンスメント・ワークショップ
51
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
バッチ・プログラミング・モデルの主な要素
ユーザーがコードする部分
ƒ バッチ・データ・ストリーム(BDS)
BDS
– レコードの出入力を行う
– com.ibm.websphere.batch.BatchDataStream を実装するPOJO
ƒ バッチ・ジョブ・ステップ
Job Step
– レコードをどのように処理するか、実際のビジネス・ロジックを実装する
– com.ibm.websphere.batch.BatchJobStepInterface を実装するPOJO
ƒ バッチ・コントローラーBean
– バッチ・ジョブ・ステップのコントローラーとして働くStateless Session Bean
– 実装は製品が提供: com.ibm.ws.batch.BatchJobControllerBean
ƒ チェックポイント・アルゴリズム
Compute Grid Toolsのウィザードで生成
– バッチ・ジョブ・ステップのチェックポイント・タイミングを制御するJavaクラス
ƒ 結果アルゴリズム
– 各バッチ・ステップのリターン・コードより、ジョブ全体のリターン・コードを制御するた
めのJavaクラス
© 2011 IBM Corporation
52
WAS V8.0 アナウンスメント・ワークショップ
WASのJavaバッチ機能では、チェック・ポイント&リスタート機能やxJCLパラメータの取得などのた
めに、バッチ・コンテナとのインターフェースが定義されています。バッチ・プログラミング・モデルで
は、このインターフェースを使うことで、開発者はバッチ基盤機能との連携を図りながら、様々な
ケースに対応できます。また、処理や入出力には多くの場合に適合する一定のパターンがあります。
例えば、1つのテキスト・ファイルから入力して処理を行い、結果を1つのテキスト・ファイルに出力す
るといった処理は、非常に一般的に行われる処理です。WASでは、このような典型的なパターンに
適合する場合に、インターフェースの実装を省き、開発を省力化するためのフレームワークを提供
しています。
バッチ・プログラミング・モデルで、ユーザーがコードを書かなくてはいけない部分は、ビジネスロ
ジックの部分(ジョブステップ)と、データ入出力(BDS)に関連する部分になります。それぞれフレー
ムワークが提供するインターフェースを実装してコードを記述します。
その他、チェックポイントを取得するアルゴリズムであったり、リターンコードを制御する部分は
Wizardで設定可能です。
チェックポイント取得は特に、件数ベース、時間ベースのどちらの方式でやるのか選択することにな
ります。
WAS V8.0 アナウンスメント・ワークショップ
52
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
アプリケーションのパッケージング
ƒ パッケージング・ツールの提供
– WSBatchPackager
– 複雑なパッケージングを自動化
BatchPOJOtemp.jar
BatchPOJOtemp.jar
POJOStep1Bean
POJOStep2Bean
# WSBatchPackager
Step1BDS
Step2BDS
アプリケーション開発者
ComputeGrid Tools を使用すると・・・
• RADから直接EARをExport可能
• WSBatchPackagerによるパッケージング作業
を省略してさらに省力化
© 2011 IBM Corporation
53
WAS V8.0 アナウンスメント・ワークショップ
アプリケーションのパッケージングについて説明します。
ユーザーはバッチ処理の中心となるBatchJobStepをPOJOとして開発を行い、これをjarファイルに
まとめます。
そして、WSBatchPackagerを用いて、EARへのパッケージングを行います。
開発者自身は、開発したバッチ・アプリケーションが最終的にCMPベースのフレーム・ワークで稼動
することを意識する必要はありません。複雑なパッケージング処理は全てツールにより行われ、ア
プリケーション開発者はビジネス・ロジックに集中できるようになりました。
ComputeGridToolsを使用する場合は、このパッケージング処理をする必要はなく、RADから直接
EARをExportできます。
WAS V8.0 アナウンスメント・ワークショップ
53
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
WebSphere XD Compute Grid(WCG)のご紹介
ƒ WebSphere Application Serverの上位エディションとして、
Javaバッチ実行環境、管理基盤を提供する製品
ƒ 多様なアプリケーションの混在をサポート
– オンライン処理実行環境とバッチ実行環境の間でサーバー資源を共有
– サーバー資源の統合管理&仮想化を実現
リソースの仮想化
高度なジョブ制御機能
ネイティブプログラム実行機能
WebSphere XD
Compute Grid 環境
© 2011 IBM Corporation
54
WAS V8.0 アナウンスメント・ワークショップ
最後に、WebSphere XD ComputeGridについて説明します。
実はこれまで説明してきたWASのJavaバッチ機能はWCGのサブセットにあたります。
WCGはWASの上位エディションの位置づけにあり、Javaバッチ実行環境、管理基盤を提供する製
品です。
WASのJavaバッチ機能と同様にオンライン処理実行環境とバッチ実行環境の間でサーバー資源の
共有を実現します。
WCGではさらに、リソースの仮想化、高度なジョブ制御機能、ネイティブプログラム実行機能を提供
しています。
WAS V8.0 アナウンスメント・ワークショップ
54
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
WebSphere XD Compute Gridとの機能比較
ƒ WCGではWASのJavaバッチ機能はすべて提供されている
– バッチ処理を拡張する高機能を提供
WAS V8
WXD CG(WASとの差分のみ記述)
ƒ WSGrid 機能による
スケジューラー連携
インターフェース
ƒ ジョブ管理コンソール
ƒ EJB/Webサービス API
ƒ lrcmdコマンド
ロギング機能
ƒ ジョブログの出力
ƒ ジョブ管理コンソールからの確認
ジョブ実行機能
ƒ ジョブの並行実行
ƒ ネイティブプログラムの実行
ƒ ジョブの自動分割並行実行
ジョブ制御機能
ƒ リポジトリーDBに実行情報を格納
ƒ ジョブ実行環境に静的にジョブを割り振り
ƒ
ジョブの優先度や並行処理数、ジョブ実行
ƒ
簡易スケジュール機能
時間の制御
ƒ 負荷状況に応じて動的にジョブを割り振り
(WebSphere Virtual Enterpriseと連携)
障害検知・対応機能
ƒ コンテナー管理によるチェックポイント・リス
タート機能
© 2011 IBM Corporation
55
WAS V8.0 アナウンスメント・ワークショップ
WCGではWASが提供するJavaバッチ機能はすべて提供されています。プログラミングモデルなども
一緒です。
バッチ処理を更に拡張する高機能を提供していますが、その機能比較を表一覧に示します。
特に注目すべきは、スケジューラ連携機能です。
先の説明で、スケジューラーと連携する場合は、考慮が必要である旨説明しましたが、WSGridとい
うツール、インターフェースを用いることで作りこみなしで連携することが可能です。
また、ネイティブプログラムの実行もサポートしています。これはたとえば帳票印刷の処理やファイ
ル送受信処理などComputeGridの外で動く処理を実行出来ると言う事です。
また、大量件数の処理を、複数のサブジョブに自動的に分割して並行処理を行ってくれる、パラレ
ルジョブマネージャーという仕組みもあります。
また、ジョブに優先度をつけたり、並行処理数を設定したり、ジョブの処理時間を定義したりという細
かいですが便利な機能もあります。
WVEという製品と連携することで、サーバーの負荷状況に応じて、動的にジョブを割り振りしてくれ
るという強力な機能もあります。
優先度の高いジョブを、負荷の少ないサーバーで優先的に処理する、その際にはオンラインとの割
り振り状況も加味するといったことが可能になります。
いわば、オンラインもバッチも、1つのサーバープールとして扱い、プールの中でのリソース配分は、
リクエスト、ジョブの優先度に応じて自動的に最適化されるという、アプリケーションの仮想化を実現
できることになります。
WAS V8.0 アナウンスメント・ワークショップ
55
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
WASが提供するJavaバッチ機能のまとめ
ƒ WAS V8ではJavaバッチ実行環境として必要なコンテナ機能を提供
– スケジューラー機能は提供されていない
ƒ POJOベースでの開発が可能なバッチ・プログラミング・モデルの提供
– RAD V8.0.1よりCompute Grid Toolsを提供
WASでサポートされるJavaバッチ環境
容易なプログラミング・モデル
オンライン処理実行環境とバッチ系実行環境の間でサーバー資源を共有
© 2011 IBM Corporation
56
WAS V8.0 アナウンスメント・ワークショップ
最後に、このセッションのまとめになります。WASではJavaバッチ実行環境のコアとなる部分を提供
しています。
ユーザーはバッチ・プログラミング・モデルに基づいてPOJOでの開発が可能です。
さらに高度なバッチ機能を利用する場合はWCGの利用についてもご検討いただければと思います。
WAS V8.0 アナウンスメント・ワークショップ
56
11. XML & Javaバッチ
11. XML & Javaバッチ
Javaバッチ
参考資料
ƒ 作ってみようJavaバッチ ~ WebSphere Application Serverの
バッチ機能を使う
–http://www.ibm.com/developerworks/jp/websphere/library/was/was_bat
ch/
ƒ Feature Pack for Modern Batch 製品ページ
–http://www.ibm.com/software/jp/websphere/apptransaction/was/feature
packs/modernbatch/
ƒ Feature Pack for Modern Batch InfoCenter
–http://publib.boulder.ibm.com/infocenter/wasinfo/fep/index.jsp
ƒ developerWorks : WebSphere XD Compute Grid
–http://www.ibm.com/developerworks/jp/websphere/category/wxd/cg.ht
ml
© 2011 IBM Corporation
57
WAS V8.0 アナウンスメント・ワークショップ
参考資料を紹介します。
一番上に紹介しているdeveloperWorksの記事ではJavaバッチ機能を、簡単なサンプルの開発を通
じて紹介しますので、ぜひ実際にJavaバッチを実行してみてください。
WAS V8.0 アナウンスメント・ワークショップ
57
Fly UP