...

アセンブル・フローによる サーバー・サイド・マッシュアップ WebSphere sMash アナウンスメント 日本アイ・ビー・エム株式会社

by user

on
Category: Documents
17

views

Report

Comments

Transcript

アセンブル・フローによる サーバー・サイド・マッシュアップ WebSphere sMash アナウンスメント 日本アイ・ビー・エム株式会社
WebSphere sMash アナウンスメント
アセンブル・フローによる
サーバー・サイド・マッシュアップ
日本アイ・ビー・エム株式会社
SWG WebSphere TS&S
須江 信洋
© 2008 IBM & ISE Corporation
WebSphere sMash アナウンスメント
目次
–アセンブル・フロー概要
–フローの構成要素とフロー・ツール
• フローの構成要素、アクティビティ
• フロー・ツール
–典型的なフロー・パターン
• マクロフロー
• 条件分岐/エラーハンドリング
–フロー詳細とカスタム・アクティビティ開発
• フロー・ランゲージ
• カスタム・アクティビティ開発
2
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
アセンブル・フロー概要
3
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
アセンブル・フローを活用してWWW
フローの適用領域
REST
既存のSOA資産,
サービス
エンタープライズ・システムを再利用
JSON
WebSphere sMash
REST
スクリプト
クライアント
アセンブル
RSS
エンタープライズ
フロー
REST
REST
スクリプト
ATOM
JSON
or
サービス
REST
スクリプト
HTTP
サービス
ATOM
SOAP
リポジトリ
システム
Java SE
SOAP
WSDL
JavaScript
+ dojo
JSON
サービス
サービス
JMS
DB
ライブラリ
データ
Web技術でSOAシステムにアクセス
4
RESTful SOA !
サービス
JMS
JMS
Provider
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローのコンセプト
ƒ ビルディング・ブロックの提供
– フローを構築するための基本的な部品を標準で提供
– 部品の追加が容易: コンテンツプロバイダーが特定のドメインに特化した部品を
提供するためのエコシステムを提供
ƒ シンプルなコンポジション・モデル
– 制御フロー/データフローでビルディング・ブロック間を接続
ƒ 様々なサービスとの接続性
– 基本的なプロトコルのサポートと、非機能要件の分離
ƒ ブラウザー・ベースのサービス・マッシュアップとスクリプトの利用
– ビルディング・ブロックを組み合わせてマッシュアップを構築し、インテグレーショ
ンロジックはサーバー・サイド・スクリプトに委譲
5
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローの関係者たち
コンポーネント開発者「Rick」: 再利用可能なソリューション部品を作
成したいと思っている。
アプリケーション・アセンブラー「Frank」: コーディングはできない。
「Rick」の助けを借りずに、プロトタイプやシンプルな実用アプリケー
ションを素早く構築したいと思っている。
Web開発者「Linda」: ビジュアルデザインやHTML/CSSおよび簡
単なJavaScriptのスキルを持つ。
パワーユーザー「George」: ソリューションを構築したり、カスタマイ
ズするのに十分なプログラミングとWebデザインのスキルを持つ。
6
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローとの関わり方
George はフロー、
Web UI、個別スクリ
プトなどを開発する
Frank はアクティビティを並べ
てソリューションを構築する
Rick はパレットにアク
ティビティを追加する
Linda は Web UI
をデザインする
7
Rick は個別のニーズに
合わせてスクリプトを開
発する
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローの位置付け
ƒ 組み立て式(アセンブリー)によるアプリケーション構築
– 十分なビルディング・ブロックが提供されていれば、プログラミングは不要
ƒ 典型的なアセンブリーのパターンに対応可能
– データ集約、サービス統合、プロセス・フロー
ƒ ビルディング・ブロックでサーバー・サイド・マッシュアップを記述
– 複数ステップの処理はサーバー上で実施した方がパフォーマンス面で有利
ƒ 「ビジュアル・スクリプティング」ではない
– スクリプト言語に比べて機能は限られるため、アセンブリー処理に適用するこ
とが好ましい
8
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローの構成要素とフロー・ツール
9
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
アセンブル・フロー
ƒ
フローの構成要素
– アクティビティ
•
何らかの処理、もしくは制御
– リンク
•
アクティビティの実行順序
<process name=“exchange_rate">
<receiveGET name="rcv"/>
<exchangeRate name="getRate" from="USD" to="JPY">
<control source="rcv" error="no"/>
</exchangeRate>
<replyGET name="rpy">
<control source="getRate" error="no"/>
<input value="${getRate * rcv.currency[0].toDouble()}"/>
</replyGET>
</process>
10
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
組込アクティビティ: RESTアクティビティ(1/2)
ƒ Action – Javaクラスのstaticメソッドを実行
ƒ リソースに対するCRUD操作
–GET – リソースへの HTTP GET
–POST –リソースへの HTTP POST
–PUT –リソースへの HTTP PUT
–DELETE –リソースへの HTTP DELETE
11
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
組込アクティビティ: RESTアクティビティ(2/2)
ƒ receivePOST – HTTP POST リクエストを
受け付け、クエリーパラメータなどを処理
ƒ replyPOST – HTTP POST リクエストに対
するレスポンスを送信
ƒ receive-replyPOST – receivePOST の直
後に replyPOST を配置することと同等
ƒ receiveGET, replyGET, receivereplyGET – HTTP GETを受け付ける以外
は、POST系アクティビティと同様
12
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
組込アクティビティ: Feedアクティビティ
ƒ Feed – 指定したURIからFeedを取得
ƒ SortFeed – entryのキー(title,updatedなど)をベースにentryを
ソート
ƒ AggregateFeeds – 2つ以上のFeedをマージ
ƒ FilterFeed – Feedにフィルター条件を適用し、結果を新たなFeed
として生成。フィルター条件は、キーワードやXPathが利用可能
ƒ Unique – Feedから重複するentryを削除。マッチングは指定され
たキー(titleなど)に基づいて実行。
ƒ Truncate – Feedから指定された数のentryを抽出し、残りを削除
ƒ ListEntries, CreateEntry, RetrieveEntry, UpdateEntry,
DeleteEntry – リソースの操作
13
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
拡張アクティビティ
ƒsendMail
–アクティビティへの入力をbodyとしてeメールを送信
ƒScript
–アクティビティの実装をインラインのGroovyスクリプトで提供
ƒwebUI
–eメールで応答用WebページのURLを送信し、応答を待つ
ƒXPath
–XPath 1.0式によって入力XMLのDOMノードリストを選択
ƒXSLT
–XML文書をXSLT変換
14
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー・ツール
ƒ
ブラウザ上で使える高機能GUIツール群
ƒ
フロー・リスト
–
–
ƒ
フロー・エディター
–
ƒ
フロー定義をビジュアルに作成
フロー管理
–
–
15
フロー一覧の参照
フローの編集、削除、実行
フロー・インスタンスのステータス参照
実行時の内部変数の値(のログ)を参照
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー・ツール:初期画面
フロー管理を起動
フロー新規作成
フロー一覧
16
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー・エディター
ソース(XML)表示切替
ツールバー
アクティビティ
リンク
アクティビティの
プロパティ
コンポーネント
パレット
編集ペイン
17
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー管理
フロー・インスタンスの
インスタンスID
フロー・インスタンスの
ステータス
フロー変数の値を
参照
18
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー・ツールの利用方法
ƒ Application Builder の場合
– File Editorで「New File」-「Flow (in /public/)」
– ".flow"で終わるファイル名を指定
⇒フロー・ツール関連モジュールへの依存性を追加を確認するダイ
アログが表示される
– フロー・エディタが自動的に開く
ƒ Eclipse plug-in / CLI の場合
– 依存モジュールに zero:zero.assemble.toolingを追加
• GUIで追加、またはivy.xmlに以下を追記
<dependency name="zero.assemble.tooling" org="zero" rev="[1.1.0.0,
1.2.0.0["/>
– アプリケーションを起動し、フロー・ツールを開く
• 例) http://localhost:8080/tooling
19
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
典型的なフロー・パターン
20
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローのパターン: データ集約
データの取得
データの加工
(マージ、フィルタ、
ソートなど)
21
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローのパターン: データ集約+サービス統合
Feed取得
JPY⇒USD変換
(カスタムアクティビティ)
Feed集約
外部サービス呼び出し
(カスタムアクティビティ)
Atom⇒Excel(XML)変換
(XSLT)
メール送信
22
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
例)Financial Report
23
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローのパターン: コラボレーション(プロセスフロー)
プロセス実行に関係する
ユーザーにURLをメール
で送信する
フォームを送信すると、
情報更新プロセスが開
始される
•エンドユーザーが
データを入力する
Web UI
•企業のWebサイト
や顧客管理アプリ
ケーションなどの一
部として提供可能
•顧客自身や従業員
が顧客情報をフォー
ムに入力する
24
•承認ページを開く
•承認/否認をプロセス
にフィードバックする
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローのパターン: 条件分岐
authorize.approved=='no'
ƒ 条件分岐の設定
– リンクのプロパティ
「transitionCondition」に条件式を設
定する
⇒条件式がtrueの場合、リンク先の
アクティビティが実行される
ƒ 排他制御は行われない
– 接続されているすべてのリンクは必
ず評価される
authorize.approved=='yes'
– 複数のリンクで条件式が成立した場
合、該当するアクティビティが全て実
行される
– 複数の分岐のうち一つだけを実行
する場合は、<pick>アクティビティを
利用
25
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローのパターン: エラーハンドリング
ƒ エラーリンクの設定
アクティビティ実行
– リンクのプロパティ「error」をyesに設
定
⇒リンクが赤い点線に変化する
ƒ エラーリンクへの遷移条件
– アクティビティの実行中に例外が発
生した場合
エラー発生時の
リンク
ƒ エラー内容の参照
– フロー変数: <アクティビティ名
>_Exception で参照可能
– 例) ${ExchangeRate_Exception}
ƒ 補償処理(Compensation)など
は明示的に作りこむ必要あり
例外処理
26
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー詳細とカスタム・アクティビティ開発
27
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローの基礎
ƒ アクティビティ
– フローのビルディング・ブロック、拡張可能な<activity>要素
– DSL(Domain Specific Language)の定義を可能にする
ƒ コントロール・フロー
– アクティビティの実行順序を制御: <control>要素
– ループ処理: <do-while>要素
– コンテキストベースの処理: <pick>要素
ƒ データ・フロー
– <input> 要素でアクティビティ間のデータの依存関係を定義
ƒ 変数
– 暗黙的に定義される(アクティビティ名に基づく)
– 必要であれば、明示的に定義することも可能
28
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー・ランゲージ
ƒ <process>要素でRESTワークフローを定義
ƒ <process>要素の属性として、プロセスの表現に利用する言語を指定
できる
– 現時点では、GroovyとJavaScript(サブセット)をサポート
– JavaScriptはside effectのない式のみ
ƒ プロセス
– ワークフローのロジックを実現するための、一連のアクティビティのセットを含
む
– フローの中で、0個以上の変数を定義できる
29
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー・ランゲージ: アクティビティ
ƒ <control>要素: アクティビティ間の制御の依存性を定義、オプションで
遷移条件(transicionCondition)およびエラー条件を指定可能
ƒ <input>要素: アクティビティへの入力データを指定
ƒ アクティビティの出力: アクティビティの名前で変数が生成される
<script name="locationSearch" file="incentiveSearchFlow/location.groovy">
<control source="search" transitionCondition="request.params.location[]!=null" error="no"/>
</script>
30
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー・ランゲージ: 変数
ƒ プロセス内の変数は、データやドキュメントを参照
ƒ フロー・ランゲージの任意の式から変数を参照(読み出し)できる
ƒ 変数は以下の2種類
– 任意変数: プロセスが利用する任意のデータを含む変数
– アクティビティ出力変数: アクティビティの名前から暗黙的に生成され、アクティ
ビティの出力結果を格納する変数
– アクティビティ例外変数: アクティビティの名前+"_Exception"で暗黙的に生
成される
• エラー情報を格納(オプションでエラーコードとエラーメッセージを含む)
31
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
グローバル・コンテキストへのアクセス
ƒ sMashのランタイムによって次の変数がバインドされるため、フローの中で
グローバル・コンテキストへのアクセスが可能
– app: グローバル・コンテキストのappゾーンにバインド
– config: configゾーンにバインド
– event: eventゾーンにバインド
– request: requestゾーンにバインド
– headers: requestゾーンにバインド
– user: userゾーンにバインド
ƒ フローの中で、これらの変数を利用してグローバル・コンテキストにアクセス
ƒ 利用例:
<input value="${request.params.num[0].toInteger() + request.params.num[1].toInteger()}"/>
32
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
カスタムアクティビティ
ƒ 新しいアクティビティを自由に作成することができる(拡張アクティビティ)
– 拡張アクティビティはフロー中で次のように呼び出し可能
<[拡張アクティビティ名] name="..." extension-attributes >
<control .../>*
<input ... />*
</[拡張アクティビティ名]>
ƒ カスタムアクティビティの利用方法
– フローに拡張アクティビティのイベントを追加する
– 拡張アクティビティの実装をGroovy(Java)でコーディングする
– 拡張アクティビティのバリデーションルールを追加する
– フロー・エディターのパレットにアクティビティが追加される
33
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フローのアーキテクチャ
Global Context
Flow
Event Handler
_receiveGET
_replyGET
34
Event Engine
_exchangeRate
on_receiveGET() {
・・・・・
}
on_exchangeRate() {
・・・・・
}
on_replyGET() {
・・・・・
}
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
フロー:カスタムアクティビティの作成手順
1.
アクティビティ名を決める
† exchangeRate
2.
イベントハンドラーを作成する
† /app/scripts/sample/RateHandler.groovy
3.
ハンドラーメソッドを実装する
† onExcahgeRateActivity() {・・・}
4.
イベントハンドラーを登録する
アプリケーションの
再起動が必要
† zero.configに[/config/handlers]を追加
5.
Flow Editor用のメタデータを登録する(option)
† zero.configに[/config/activity/metadata/exchangeRate]を追加
35
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
zero.config設定例
イベントハンドラー登録
/config/handlers += [{
“events” : “exchangeRateActivity”,
“handler” : “sample/RateHandler.groovy”
}]
アクティビティ名
+"Activity"
フロー・エディター用メタデータ登録
/config/activity/metadata/exchangeRate =
“attributes” : [
{name="from"},
{name="to"}
アクティビティの属性
],
“inputOccurence” : 0
}
36
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
イベントハンドラーの例
package sample
def onExchangeRateActivity() {
// get attributes
def _fromCurrency = event.attributes['from']
def _toCurrency = event.attributes['to']
def target =
"http://webservicex.com/CurrencyConvertor.asmx/ConversionRate?
fromCurrency=${_fromCurrency}&ToCurrency=${_toCurrency}"
zero.assemble.core.Connection.Response resp =
zero.assemble.core.Connection.doGET(target)
Reader body = resp.getResponseBodyReader();
def data = new XmlParser().parse(body);
}
37
// put result
event.result = data.value[0].toDouble()
Connection APIで
外部サービスを呼出し
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
コンベンションによるカスタムアクティビティの略記法
[ /app/assemble/activities/exchangeRate.groovy ]
zero.configへの
登録不要
def onExchangeRateActivity() {
def from = event.attributes["from"]
def to = event.attributes["to"]
}
String url =
"http://webservicex.com/CurrencyConvertor.asmx/ConversionRate?
fromCurrency=${from}&ToCurrency=${to}"
InputStream is = null
is = Connection.doGET(url).getResponseBodyInputStream()
def root = new XmlParser().parse(is)
event.result = root.text().toDouble()
アクティビティのメタ情報を
ハンドラー内に記述
// validation information
metadata = [
"attributes" : [["name":"from"],["name":"to"]],
"inputOccurrence" : 0
]
38
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
アクティビティ間のデータインターフェース
キー
内容
/event/attributes
#[attributeName]
Object
アクティビティの属性値
/event/inputs
java.util.List
アクティビティの入力値のリスト
順序はプロセス定義の記述順
/event/inputMap
java.util.Map
アクティビティの入力値のマップ
(inputにname属性を付与した場合)
/event/inputMap
#[inputName]
Object
指定した名前をキーとする、アク
ティビティの入力値
/event/result
String
アクティビティの出力値を格納する
グローバルコンテキストのパス
String
出力値のcontent-typeを格納する
グローバルコンテキストのパス
(オプション)
/event/resultCont
entType
39
データ型
補足
Feed処理結果の入力は
org.w3c.dom.Node型
Feed処理結果の出力は
org.w3c.dom.Node型
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
参考情報
ƒ アクティビティ一覧
– http://www.projectzero.org/sMash/1.0.x/docs/zero.devguide.doc/zero.assemble.flo
w/FlowActivities.html
ƒ カスタムアクティビティ開発
– http://www.projectzero.org/sMash/1.0.x/docs/zero.devguide.doc/zero.assemble.flo
w/FlowActivitiesAsFlow.html
– http://www.projectzero.org/sMash/1.0.x/docs/zero.devguide.doc/zero.assemble.flo
w/FlowActivitiesGroovy.html
ƒ Proxy経由でのFeed取得について
– フローは内部でConnection APIを利用しているため、zero.configでデフォルト
のProxyを設定すればよい
• /config/connection/defaults/http/proxyHost = "proxyserver"
• /config/connection/defaults/http/proxyPort = "8080"
– 参考: http://www.projectzero.org/forum/viewtopic.php?f=4&p=3989
40
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
御清聴ありがとうございました
41
© 2008 IBM Corporation
WebSphere sMash アナウンスメント
© IBM Corporation 2008. All Rights Reserved.
ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独自の見解を反映したものです。それらは情報提供の目
的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助言を意図したものではなく、またそのような結果を生むものでもありませ
ん。本プレゼンテーションに含まれている情報については、完全性と正確性を帰するよう努力しましたが、「現状のまま」提供され、明示または暗示にかかわら
ずいかなる保証も伴わないものとします。本プレゼンテーションまたはその他の資料の使用によって、あるいはその他の関連によって、いかなる損害が生じた
場合も、IBMは責任を負わないものとします。 本プレゼンテーションに含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかなる保
証または表明を引きだすことを意図したものでも、IBMソフトウェアの使用を規定する適用ライセンス契約の条項を変更することを意図したものでもなく、また
そのような結果を生むものでもありません。
本プレゼンテーションでIBM製品、プログラム、またはサービスに言及していても、IBMが営業活動を行っているすべての国でそれらが使用可能であることを
暗示するものではありません。本プレゼンテーションで言及している製品リリース日付や製品機能は、市場機会またはその他の要因に基づいてIBM独自の決
定権をもっていつでも変更できるものとし、いかなる方法においても将来の製品または機能が使用可能になると確約することを意図したものではありません。
本資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上高の向上、またはその他の結果が生じると述べる、または暗示することを
意図したものでも、またそのような結果を生むものでもありません。
パフォーマンスは、管理された環境において標準的なIBMベンチマークを使用した測定と予測に基づいています。ユーザーが経験する実際のスループットや
パフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラミングの量、入出力構成、ストレージ構成、および処理されるワークロードなどの考慮
事項を含む、数多くの要因に応じて変化します。したがって、個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありま
せん。
記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使用したか、またそれらのお客様が達成した結果の実例として示されたもの
です。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。
以下は、International Business Machines Corporationの米国およびその他の国における商標。IBMの全商標のリストについては、
www.ibm.com/legal/copytrade.shtmlをご覧ください。
AIX, CICS, CICSPlex, DB2, DB2 Universal Database, i5/OS, IBM, the IBM logo, IMS, iSeries, Lotus, OMEGAMON, OS/390, Parallel Sysplex,
pureXML, Rational, RCAF, Redbooks, Sametime, Smart SOA, System i, System i5, System z , Tivoli, WebSphere, z/OS.
JavaおよびすべてのJava関連の商標およびロゴは Sun Microsystems, Inc.の米国およびその他の国における商標。
Microsoft, Windows, Windows NT および Windowsロゴは Microsoft Corporationの米国およびその他の国における商標。
Intel, Intelロゴ, Intel Inside, Intel Insideロゴ, Intel Centrino, Intel Centrinoロゴ, Celeron, Intel Xeon, Intel SpeedStep, Itanium, Pentium は Intel
Corporationまたは子会社の米国およびその他の国における商標または登録商標。
UNIXはThe Open Groupの米国およびその他の国における登録商標。
Linuxは、Linus Torvaldsの米国およびその他の国における商標。
その他の会社名、製品名およびサービス名等はそれぞれ各社の商標。
42
© 2008 IBM Corporation
Fly UP