Tampilkan postingan dengan label SOA/BPM. Tampilkan semua postingan
Tampilkan postingan dengan label SOA/BPM. Tampilkan semua postingan

[FMW, SOA, Database] Best Practices for SOA 11g Multi Data Center Active – Active Deployment – White Paper

Posted by Unknown Rabu, 13 November 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/soacommunity/entry/best_practices_for_soa_11g

高可用性のためのベストプラクティス

このホワイトペーパーでは、複数拠点でOracle Fusion Middleware 11g SOAシステムを停止から守るために推奨されるActive-Active構成のソリューションを説明しています(SOA Active-Active災害復旧ソリューションやSOAマルチデータセンターActive-Active展開とも呼ばれます)。このホワイトペーパーでは、推奨するトポロジを設定するための必要な設定手順と、このような構成のパフォーマンスとフェイルオーバの影響に関するガイダンスをご紹介します。
ホワイトペーパーは以下のリンクからどうぞ。
Best Practices for Oracle Fusion Middleware SOA 11g Multi Data Center Active- Active Deployment
Oracle Maximum Availability Architecture White Paper
http://www.oracle.com/technetwork/database/availability/fmw11gsoamultidc-aa-1998491.pdf

Baca Selengkapnya ....

[SOA, Exa*] 7-Eleven Mobile App Powered by Oracle SOA Suite

Posted by Unknown Senin, 04 November 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/SOA/entry/7_eleven_mobile_app_powered

Slurpeeをずるずる飲んでいる時に、7-Elevenの2000万件もの毎日のトランザクションを100ミリ秒以下で処理するにあたってOracle SOA Suiteがサポートしているということを考えることがあるでしょうか。たぶん次回からですね。
(訳注)日本のセブンイレブンではありませんので、あえて7-Elevenという表記にしています。
7-ElevenのDigital Guest Experience Program ManagerであるRonald Clantonの印象的な動画をご覧頂きたいのですが、この中で、Oracle Exalogic上で動作するOracle SOA Suiteを使い、10000件以上の店舗やデジタルエンティティのエンドポイントに対する一貫したビューの提供方法について説明しています。Oracle Enterprise Managerを使って管理しているので、彼らの"Rapid-Fire" MWaaS (Middleware as a Service) をわずか10分でプロビジョニングし、オンタイムで提供し、スケジュールを前倒ししたテストを完了することができました。
MWaaS
そんなわけで、何をぐずぐずしてるいるのですか?Slurpeeアプリをダウンロードして、無料のPillsbury Cinnamonペストリーを入手し、1日あたり2000万メッセージに貢献するのを楽しんで下さい。それが終われば、舌の写真を撮って下さい…赤ですか?青ですか?動画はこちらからご覧いただけます。

Baca Selengkapnya ....

[SOA/BPM, FMW] Transaction Boundaries and Rollbacks in Oracle SOA Suite

Posted by Unknown Rabu, 16 Oktober 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/soaproactive/entry/transaction_boundaries_and_rollbacks_in

Oracle Learning Libraryに、"Transaction Boundaries and Rollbacks in Oracle SOA Suite" という新しい自習コンテンツが登録されました。
このコンテンツでは以下の内容を取り扱っています。
  • トランザクション、XA、ロールバック、トランザクション協会の定義
  • フォルト伝播の観点からみた、BPELトランザクションの境界
  • 同期・非同期BPELプロセスの設定のためのbpel.config.transactionbpel.config.oneWayDeliveryPolicyパラメータ
  • Mediatorにおけるトランザクションの挙動
  • フォルトの種類に基づいたロールバックのシナリオ
  • <throw>アクティビティ内でbpelx:rollbackを用いたロールバック
動画は以下のリンクからどうぞ。
Transaction Boundaries and Rollbacks in Oracle SOA Suite
https://apex.oracle.com/pls/apex/f?p=44785:24:0::::P24_CONTENT_ID,P24_PREV_PAGE:8362,1

Baca Selengkapnya ....

[SOA] New Oracle Learning Library (OLL) Content for Healthcare

Posted by Unknown Senin, 07 Oktober 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/SOA/entry/new_oracle_learning_library_oll

SOA Suite for Healthcare Integrationの新しい動画コンテンツがOracle Learning LibraryにUpされています。いつでもどこでも、無料でご覧頂けます。
  • 製品概要(2部構成)
  • エンドポイントの作成方法
  • Healthcareコンポジットアプリケーションの作成ならびにテスト方法
  • Healthcareアプリケーションを使ったJavaコールアウトの作成方法
  • ドキュメントエディタを使ってガイドラインを比較する方法
フィードバックをお待ちしています。
Getting Started with Oracle SOA Suite for Healthcare Integration Series
http://apex.oracle.com/pls/apex/f?p=44785:24:0::::P24_CONTENT_ID,P24_PREV_PAGE:8087,1%20

Baca Selengkapnya ....

[SOA, Governance] Introducing Oracle Enterprise Repository Express Workflows - Simplified Lifecycle Management

Posted by Unknown Jumat, 04 Oktober 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/governance/entry/introducing_oracle_enterprise_repository_express

先週のOracle OpenWorld 2013で発表された、Oracle Enterprise Repository(OER) 11gR1 PS6のわくわくする新機能、Express Workflowsのご紹介ができることを嬉しく思っています。
OERはアセットをライフサイクルの最初から最後まで移動するための機能やオプションのセットを提供しています。Express Workflowsはこうしたアセットライフサイクルの承認プロセスをOERで自動化する機構です。

Express Workflowsを使うと、プロジェクトで開発した任意のアセットの承認プロセスを自動化することができ、承認者を割り当てたり、ある承認者から次の承認者へと承認フローを定義したりすることが簡単にできます。

Express Workflowsを使い、OERプロジェクトに収集された、もしくは発行されたアセットが、ちょっとした手順で、要件に応じた承認プロセスを通ることを、事前に定義し、そのプロセスを自動化し、プロセスを通すことを確実にすることができます。

OER 11g Express Workflowsのダウンロードは以下のリンクからどうぞ(My Oracle Supportのアカウントが必要です)。
要件やインストールの詳細手順はパッチに含まれているPDFでご確認頂けます。
TRACKING BUG FOR NEW EXPRESS WORKFLOWS PATCH
https://updates.oracle.com/download/17420982.html

Baca Selengkapnya ....

[Governance, EM] Announcing Oracle Enterprise Manager 12c Cloud Control Integration with Oracle Enterprise Repository 11g for Runtime Metrics

Posted by Unknown Selasa, 01 Oktober 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/governance/entry/announcing_oracle_enterprise_manager_12c1

サービスを利用する立場であっても、開発者やアーキテクト、管理者であっても、アセット(サービス)のランタイム情報に関する定期的なアップデートを入手することは多くの理由で非常に重要なことです。OER 11g PS6では、Enterprise Manager 12c Cloud Controlからアセットのランタイム情報を 収集することができるようになりました。これらの情報は、設定された定期的な間隔で更新され、各アセットの「Operational Information」に表示されます。
これを実現するには、EM Integrationユーティリティ(既にOERに含まれています)を、Enterprise Manager 12cとOER 11gインスタンスと連係するように設定する必要があります。Enterprise Manager 12cとの連係のための新しい設定ファイルが利用できるようになっていますので、パッチ(#17421038)を入手いただき、新しい設定ファイルを以下のリンクからダウンロードして下さい。
TRACKING BUG FOR OER 11G AND EM 12C INTEGRATION (My Oracle Supportのアカウントが必要です)
https://updates.oracle.com/download/17421038.html
パッチの適用方法ならびにユーティリティの設定方法もパッチ内に含まれています。

Baca Selengkapnya ....

[FMW, Security] How To - Identity Propagation for REST using OWSM - 12.1.2

Posted by Unknown Senin, 12 Agustus 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/owsm/entry/how_to_identity_propagation_for

このエントリは前回のエントリの続編です。
How To - Securing REST clients using OWSM - 12.1.2
https://blogs.oracle.com/owsm/entry/how_to_securing_rest_clients
http://orablogs-jp.blogspot.jp/2013/08/how-to-securing-rest-clients-using-owsm.html
前回のエントリでは、WebLogic Serverに同梱されているJersey JAX-RSテクノロジーを使ったRESTサービス、RESTクライアントを保護する方法をステップバイステップでご紹介しました。

このエントリでは、RESTサービス/クライアントのためのID伝播のステップバイステップガイドをご紹介します。
Identity Propagation for REST using Oracle WebService Manager 12.1.2
Step-by-Step Instruction Guide
http://www.oracle.com/technetwork/middleware/webservices-manager/rest-security-id-prop-12c-1988943.pdf
このエントリの内容を実際に試す前に、前回までのエントリをご覧になることをお勧めします。
How To - OWSM 12.1.2 Installation
https://blogs.oracle.com/owsm/entry/how_to_owsm_12_1
http://orablogs-jp.blogspot.jp/2013/07/how-to-owsm-1212-installation-and.html
How To - Securing REST services using OWSM - 12.1.2
https://blogs.oracle.com/owsm/entry/how_to_securing_rest_services
http://orablogs-jp.blogspot.jp/2013/07/how-to-owsm-1212-installation-and.html
How To - Securing REST clients using OWSM - 12.1.2
https://blogs.oracle.com/owsm/entry/how_to_securing_rest_clients
http://orablogs-jp.blogspot.jp/2013/08/how-to-securing-rest-clients-using-owsm.html

Baca Selengkapnya ....

[FMW, Security] How To - Securing REST clients using OWSM - 12.1.2

Posted by Unknown 0 komentar
原文はこちら。
https://blogs.oracle.com/owsm/entry/how_to_securing_rest_clients

このエントリは前回のエントリの続編です。
How To - Securing REST services using OWSM - 12.1.2
https://blogs.oracle.com/owsm/entry/how_to_securing_rest_services
http://orablogs-jp.blogspot.jp/2013/07/how-to-owsm-1212-installation-and.html
前回のエントリでは、WebLogic Serverに同梱されているJersey JAX-RSテクノロジーを使ったRESTサービスを保護する方法をステップバイステップでご紹介しました。

このエントリでは、RESTサービスおよびRESTクライアントを保護するためのステップバイステップガイドをご紹介します。
Securing REST Clients using Oracle WebService Manager 12.1.2
Step-by-Step Instruction Guide
http://www.oracle.com/technetwork/middleware/webservices-manager/rest-client-security-owsm-12c-1984258.pdf 
次回以後は、RESTサービスおよびクライアントの観点で、SAMLを使ってIDを伝播させる方法を採り上げる予定です。

このエントリの内容を実際に試す前に、前回までのエントリをご覧になることをお勧めします。
How To - OWSM 12.1.2 Installation
https://blogs.oracle.com/owsm/entry/how_to_owsm_12_1
http://orablogs-jp.blogspot.jp/2013/07/how-to-owsm-1212-installation-and.html
How To - Securing REST services using OWSM - 12.1.2
https://blogs.oracle.com/owsm/entry/how_to_securing_rest_services
http://orablogs-jp.blogspot.jp/2013/07/how-to-owsm-1212-installation-and.html

Baca Selengkapnya ....

[BPM] Empower Knowledge Workers to Manage Unstructured Processes

Posted by Unknown Rabu, 24 Juli 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/bpm/entry/empower_knowledge_workers_to_manage

ビジネスユーザーがますますビジネスプロセス管理(BPM)の主導権を取りつつあります。柔軟性、生産性、そして成功を確実にするために、ビジネスユーザーにとってBPMスイート製品は設計、管理、改善が簡単で、業務プロセス、たとえ非構造プロセスであっても管理ができることが必須です。

このWebcastでは、業界をリードするアナリストのBruce Silverがビジネス主導型の手段とケース管理(Case Management)および非構造プロセスを使うと、組織が顧客にサービスを提供する上でどのように役立つのかを説明します。

Empower Knowledge Workers to Manage Unstructured Processes

[日時]
2013年8月7日(水) 10時から(PDT) / 13時から(EDT)
2013年8月8日(木) 2時から(JST)

このWebcastにご参加下さいますと、以下の情報を入手いただけます。
登録は以下のリンクからどうぞ。
http://event.on24.com/r.htm?e=617598&s=1&k=634C7C09EC4FEBFADB659D5A10ED71D2

Baca Selengkapnya ....

[FMW, Security] How To - OWSM 12.1.2 Installation and Securing REST services using OWSM - 12.1.2

Posted by Unknown Senin, 15 Juli 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/owsm/entry/how_to_owsm_12_1
https://blogs.oracle.com/owsm/entry/how_to_securing_rest_services

先のエントリで述べたように、FMW 12.1.2がリリースされました。
FMW 12.1.2 released!
https://blogs.oracle.com/owsm/entry/fmw_12_1_2_released
http://orablogs-jp.blogspot.jp/2013/07/fmw-1212-released.html
OWSMのインストールに関し、11gとは少々異なる箇所がありますので、スクリーンショット付きのインストール手順書を作成しました。
Oracle Web Service Manager 12.1.2 Installation (July 2013)
http://www.oracle.com/technetwork/middleware/webservices-manager/owsm-installation-12c-1971739.pdf
これは12.1.2インストールガイドを補足するものです。
[注意]
このHow-toはすべてのシナリオやトポロジーを説明しているわけではありません。主にデモ用途でのインストールや簡単に主要な手順を把握してもらうことを意図しています。

12.1.2では、SOAP Webサービス/クライアントのようにRESTサービスおよびクライアントの保護および管理をサポートしています。
OWSM 12.1.2を使ってRESTサービスを保護する手順も以下のリンクにまとめました。
Securing REST using Oracle WebService Manager 12.1.2 (July 2013)
http://www.oracle.com/technetwork/middleware/webservices-manager/rest-service-security-owsm-12c-1971795.pdf

Baca Selengkapnya ....

[B2B] New B2B Book Published for Oracle SOA B2B 11g

Posted by Unknown 0 komentar
原文はこちら。
https://blogs.oracle.com/SOA/entry/new_b2b_book_published_for

Oracle B2B Book - Published 7/11/2013

OracleのKrishnaprem Bhatia、Scott Haaland、そしてAlan Perlovskyが著者となって、Oracle SOA Suiteと協働して利用できるOracle B2Bの設定および運用方法を説明する本ができあがりました。PACKT Publishingから出版されているこの本には、手順を追って説明したサンプルプロジェクトがついており、読者は実施する価値のあるハンズオンを体験できるだけでなく、少し記述するだけでも、一般的なB2Bの概要にはじまり、具体的なトピック(ドキュメント管理、パートナー管理、SOA Suiteとの統合、例外処理、セキュリティ、運用開始までの準備、といった内容の情報を入手することができます。この本の詳細は以下のリンクからどうぞ。タイトルは、"Getting Started with Oracle SOA B2B Integration: A Hands-On Tutorial"です。
Getting Started with Oracle SOA B2B Integration: A Hands-On Tutorial (Packt Publishing)
http://www.packtpub.com/getting-started-with-oracle-soa-b2b-integration-hands-tutorial/book
Amazon JP
http://www.amazon.co.jp/Getting-Started-Oracle-Integraton-Hands-/dp/1849688869/

Baca Selengkapnya ....

[FMW, Security] FMW 12.1.2 released!

Posted by Unknown Kamis, 11 Juli 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/owsm/entry/fmw_12_1_2_released

Fusion Middleware 12.1.2がリリースされました。これはFusion Middlewareコンポーネントのメジャーリリースであり、以下のようなFusion Middlewareコンポーネントが含まれています。
  • Oracle WebLogic Server 12c (12.1.2.0.0)
  • Oracle Coherence 12c (12.1.2.0.0)
  • Oracle TopLink 12c (12.1.2.0.0)
  • Oracle Fusion Middleware Infrastructure 12c (12.1.2.0.0)
  • Oracle HTTP Server 12c (12.1.2.0.0)
  • Oracle Virtual Assembly Builder 12c (12.1.2.0.0)
  • Oracle JDeveloper 12c (12.1.2.0.0)
[注意]
このリリースにはOracle Web Services Managerが含まれていますが、SOA Suiteはこのリリースに含まれていません。

いくつかリンクをご紹介しましょう。
個人的な見地で重要と思われる機能をリストアップしてみました。
  • RESTセキュリティのサポート(クライアント、サービスとも)
  • ポリシー添付に関し、LPA(ローカルポリシー添付)とGPA(グローバルポリシー添付)をサポート
  • ポリシーをJDeveloper、Enterprise Manager、WLSTで添付可能
  • ポリシーの監視、監査など
  • WS-SecureConversation、WS-Trust 1.3、Web Service Federationのサポート
  • Kerberosの機能強化。資格証明の移譲/委任を含むSPNEGOのサポート
  • SOAP over JMSの保護をサポート
  • KSS (Key Safety Systems) によるキー管理の改善
今後のエントリでこうした機能の詳細をお伝えする予定です。

Baca Selengkapnya ....

[SOA, Security] Single Sign-On with Security Assertion Markup Language between Oracle and SAP

Posted by Unknown Rabu, 03 Juli 2013 0 komentar
原文はこちら。
http://www.oracle.com/technetwork/articles/soa/fernandes-sso-saml-1965440.html

Security Assertion Markup Language (SAML)を実装し、Oracle Service Bus (OSB)のOracle Web Services Manager (OWSM)からSAP Enterprise Central Component (ECC)にIDを伝播する方法をご紹介します。

Enterprise Resource Planning (ERP)アプリケーションを使ってデータやプロセスにアクセスし、更新している場合、ユーザーのアクティビティ追跡は重要なことです。機密データ(例えば会計や売上の数値)をWebサービスで公開するため、様々なシステム間でユーザーIDを伝播させることが可能なセキュアな環境を提供する必要があります。
この記事では、Security Assertion Markup Language (SAML)を実装して、Oracle Service Bus (OSB)と組み合わせて構成されているOracle Web Services Manager (OWSM)からWebサービスを使ってSAP Enterprise Central Component(ECC)へIDを伝播する方法、必要な構成、Oracle環境の例をご紹介します。

シナリオ

このソリューションはOracle Web Services ManagerとOracle Service Bus 11g (11.1.1.6)、SAP ECC 6.06 SP2の環境で実施したものです。各々のシステムが様々な場所でユーザーを認証します。以前はSAP ERPはR/3として知られていました。
このシナリオでは、(アイデンティティプロバイダーとしての)Oracle Services Busが、(サービスプロバイダーとしての)SAP ECCが発行したSAML 1.1のsender-vouchesを使ってWebサービスにアクセスします。SAML 2.0ではなくSAML 1.1を使っているのは、お客様がアーキテクチャの変更を検討しているためです。
1964573.gif
Figure 1: Oracle Service Bus / ECC environment
ユーザーは自分の資格情報を使用してプロキシサービスにアクセスします。Oracle Service Busは認証し、フローを実行して、ビジネス·サービスを呼び出します。
ビジネス·サービスに適用されるOracle Web Services Managerのポリシーは、SAMLアサーションの生成が必要です。 Oracle Web Services Managerは、アサーションを含むセキュリティ情報を持つメッセージを生成し、署名されたメッセージ本体と共に、ECCを呼び出します。
ECCがSAMLアサーションとセキュリティ情報を検証し、メッセージが検証された場合は、ユーザストア内にユーザーが存在することを確認し、ECCは、Oracle Service Busにレスポンスを返します。
ECCで公開されたサービスは引数としてテキストを一つだけ受け取り、この同じパラメータとユーザー名(SAMLを使用して認証)を連結したものを返します。簡単なテストですが、プラットフォーム間でIDの伝播を確認するには十分です。

構成

WebLogic Server

Oracle WebLogic Serverの組み込みLDAPにユーザーを作成します(例: testsamlclient)。今回のテストでは、このユーザーはプロキシサービスでクライアントを認証します。この同じユーザーもしくは同等のユーザーがECCに存在する必要があります。

Oracle Web Services Manager

Oracle Web Services Managerが使うキーストアを構成し、通信に使う証明書をインポートします(Oracle Web Services Managerの秘密鍵、ECCの公開鍵、CA)。 このシナリオではお客様が生成した証明書を使うため、Enterprise CAが証明書発行者です。

Enterprise Manager Fusion Middleware Controlにアクセスします。
http://<host>:<port>/em
キーストアの設定画面で、キーストアと証明書を構成します。今回は、署名鍵でSAML AssertionとSOAPリクエストの本体に署名します。
<ファーム名>/Weblogicドメイン/<ドメイン名> を開き、[WebLogicドメイン] > [セキュリティ] > [セキュリティプロバイダの構成]へと移動し、 [キーストアの構成]に到達します。
Figure 2: Oracle Web Services Manager Keystore Configuration
サーバーを再起動します。
Enterprise Manager Fusion Middleware Controlに再度アクセスし、新しいセキュリティポリシーを構成します。
<ファーム名>/Weblogicドメイン/<ドメイン名> を開き、[WebLogicドメイン] > [Webサービス] > [ポリシー]へと移動します。
Webサービス・ポリシーの画面で、サービス・クライアントに的ようするポリシーを検索します。
[oracle/wss10_saml_token_with_message_integrity_client_policy]を選択し、[類似作成]をクリックします。
Figure 3: Creating a web service policy
ポリシーの名前を変更します(例:oracle/wss10_saml_token_with_message_integrity_client_policy_sap
Figure 4: Rename the policy
Because ECC SAML Webサービスは署名付きのタイムスタンプを必要とするため、[設定]タブの[タイムスタンプを含める]にチェックを入れておきます。
Figure 5: Include timestamp
それによって、Oracle Web Services Managerは署名付きのタイムスタンプをリクエストに追加し、署名済みのタイムスタンプがレスポンスにあることを期待します。しかしECCは、ECCは署名されていないタイムスタンプをレスポンスに含めて送信してくるため、Oracle Service Busでエラーが発生します。
oracle.wsm.security.policy.scenario.policycompliance.PolicyComplianceException: WSM-00036 : 
The signed message elements or parts do not comply with the policy. The following
headers/elements () or attachments () must be signed:-
< http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd: Timestamp >
この問題を解決するため、[構成]タブに移動して、ignore.timestamp.in.responseというプロパティを追加し、その値としてtrueを設定します。この構成により、Oracle Web Services Managerはレスポンス中のタイムスタンプを検証しなくなります。
Figure 6: Add a property
saml.issuer.nameのフィールドはSAML Assertionの発行者を定義します(デフォルトではwww.oracle.comになっています)。この値を変更することができますが、Oracle Service Busから到着するSAML Assertionを受け付けるよう、SAP ECCで発行者が構成されている必要があります。
csf-keyプロパティはデフォルトでbasic.credentialsを使うよう定義されています。<FARM>/Weblogicドメイン/<ドメイン名>をクリックし、メニューから WebLogicドメイン] > [セキュリティ]> [資格証明]へと移動し、testsamlclientユーザーを通知するbasic.credentialsという名前を持つ新しいキーをoracle.wsm.security下に作成します。
Figure 7: Create Key
必要に応じて、新しい資格証明キーを定義したり、csf-keyプロパティの値を変更したりできます。

実装

Oracle Enterprise Pack for Eclipse (OEPE) を開き、ビジネスサービスをECCのWSDLから生成し、名前を付けます(例:TestSamlClient)。

以下はECCのWSDLのサンプルです。
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="urn:sap-com:document:sap:soap:functions:mc-style"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:n1="urn:sap-com:document:sap:rfc:functions">
<wsdl:documentation>
<sidl:sidl xmlns:sidl="http://www.sap.com/2007/03/sidl"/>
</wsdl:documentation>
<wsp:UsingPolicy wsdl:required="true"/>
<wsp:Policy wsu:Id="BN_BN_YS_SAMLTEST">
<saptrnbnd:OptimizedXMLTransfer uri="http://xml.sap.com/2006/11/esi/esp/binxml"
xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/"
wsp:Optional="true"/>
<saptrnbnd:OptimizedMimeSerialization xmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization"
wsp:Optional="true"/>
<wsp:ExactlyOne xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:All>
<sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<wsp:Policy>
<sp:InitiatorSignatureToken>
<wsp:Policy>
<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssX509V3Token10/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:InitiatorSignatureToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic128Rsa15/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
<sp:OnlySignEntireHeadersAndBody/>
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:Wss10 xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<wsp:Policy>
<sp:MustSupportRefKeyIdentifier/>
<sp:MustSupportRefIssuerSerial/>
</wsp:Policy>
</sp:Wss10>
<sp:SignedParts xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<sp:Body/>
<sp:Header Name="Trace"
Namespace="http://www.sap.com/webas/630/soap/features/runtime/tracing/"/>
<sp:Header Name="messageId"
Namespace="http://www.sap.com/webas/640/soap/features/messageId/"/>
<sp:Header Name="CallerInformation"
Namespace="http://www.sap.com/webas/712/soap/features/runtime/metering/"/>
<sp:Header Name="Session"
Namespace="http://www.sap.com/webas/630/soap/features/session/"/>
<sp:Header Name="To"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="From"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="FaultTo"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="ReplyTo"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="MessageID"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="RelatesTo"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="Action"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="To"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="From"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="FaultTo"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="ReplyTo"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="MessageID"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="RelatesTo"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="Action"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="ReferenceParameters"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="Sequence"
Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/>
<sp:Header Name="SequenceAcknowledgement"
Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/>
<sp:Header Name="AckRequested"
Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/>
<sp:Header Name="SequenceFault"
Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/>
<sp:Header Name="Sequence"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="AckRequested"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="SequenceAcknowledgement"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="SequenceFault"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="UsesSequenceSTR"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="UsesSequenceSSL"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
</sp:SignedParts>
<sp:SignedSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<wsp:Policy>
<sp:SamlToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssSamlV11Token10/>
</wsp:Policy>
</sp:SamlToken>
</wsp:Policy>
</sp:SignedSupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
<wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
wsp:Optional="true"/>
</wsp:Policy>
<wsp:Policy wsu:Id="BN_BN_YS_SAMLTEST_SOAP12">
<saptrnbnd:OptimizedXMLTransfer uri="http://xml.sap.com/2006/11/esi/esp/binxml"
xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/"
wsp:Optional="true"/>
<saptrnbnd:OptimizedMimeSerialization xmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization"
wsp:Optional="true"/>
<wsp:ExactlyOne xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:All>
<sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<wsp:Policy>
<sp:InitiatorSignatureToken>
<wsp:Policy>
<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssX509V3Token10/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:InitiatorSignatureToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic128Rsa15/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
<sp:OnlySignEntireHeadersAndBody/>
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:Wss10 xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<wsp:Policy>
<sp:MustSupportRefKeyIdentifier/>
<sp:MustSupportRefIssuerSerial/>
</wsp:Policy>
</sp:Wss10>
<sp:SignedParts xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<sp:Body/>
<sp:Header Name="Trace"
Namespace="http://www.sap.com/webas/630/soap/features/runtime/tracing/"/>
<sp:Header Name="messageId"
Namespace="http://www.sap.com/webas/640/soap/features/messageId/"/>
<sp:Header Name="CallerInformation"
Namespace="http://www.sap.com/webas/712/soap/features/runtime/metering/"/>
<sp:Header Name="Session"
Namespace="http://www.sap.com/webas/630/soap/features/session/"/>
<sp:Header Name="To"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="From"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="FaultTo"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="ReplyTo"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="MessageID"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="RelatesTo"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="Action"
Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<sp:Header Name="To"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="From"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="FaultTo"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="ReplyTo"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="MessageID"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="RelatesTo"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="Action"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="ReferenceParameters"
Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="Sequence"
Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/>
<sp:Header Name="SequenceAcknowledgement"
Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/>
<sp:Header Name="AckRequested"
Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/>
<sp:Header Name="SequenceFault"
Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/>
<sp:Header Name="Sequence"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="AckRequested"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="SequenceAcknowledgement"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="SequenceFault"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="UsesSequenceSTR"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="UsesSequenceSSL"
Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
</sp:SignedParts>
<sp:SignedSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<wsp:Policy>
<sp:SamlToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssSamlV11Token10/>
</wsp:Policy>
</sp:SamlToken>
</wsp:Policy>
</sp:SignedSupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
<wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
wsp:Optional="true"/>
</wsp:Policy>
<wsp:Policy wsu:Id="IF_IF_YS_SAMLTEST">
<sapsession:Session xmlns:sapsession="http://www.sap.com/webas/630/soap/features/session/">
<sapsession:enableSession>false</sapsession:enableSession>
</sapsession:Session>
<sapcentraladmin:CentralAdministration xmlns:sapcentraladmin="http://www.sap.com/webas/700/soap/features/CentralAdministration/"
wsp:Optional="true">
<sapcentraladmin:BusinessApplicationID>4FF6C4A0570F00E9E10000000A1D140F</sapcentraladmin:BusinessApplicationID>
</sapcentraladmin:CentralAdministration>
</wsp:Policy>
<wsp:Policy wsu:Id="OP_IF_OP_YsSamltest">
<sapcomhnd:enableCommit xmlns:sapcomhnd="http://www.sap.com/NW05/soap/features/commit/">false</sapcomhnd:enableCommit>
<sapblock:enableBlocking xmlns:sapblock="http://www.sap.com/NW05/soap/features/blocking/">true</sapblock:enableBlocking>
<saptrhnw05:required xmlns:saptrhnw05="http://www.sap.com/NW05/soap/features/transaction/">no</saptrhnw05:required>
<saprmnw05:enableWSRM xmlns:saprmnw05="http://www.sap.com/NW05/soap/features/wsrm/">false</saprmnw05:enableWSRM>
</wsp:Policy>
<wsdl:types>
<xsd:schema attributeFormDefault="qualified"
targetNamespace="urn:sap-com:document:sap:rfc:functions">
<xsd:simpleType name="char10">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="10"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="char40">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="40"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<xsd:schema attributeFormDefault="qualified"
targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style"
xmlns:n0="urn:sap-com:document:sap:rfc:functions">
<xsd:import namespace="urn:sap-com:document:sap:rfc:functions"/>
<xsd:element name="YsSamltest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Text" type="n0:char10" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="YsSamltestResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Result" type="n0:char40"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="YsSamltest">
<wsdl:part name="parameters" element="tns:YsSamltest"/>
</wsdl:message>
<wsdl:message name="YsSamltestResponse">
<wsdl:part name="parameter" element="tns:YsSamltestResponse"/>
</wsdl:message>
<wsdl:portType name="YS_SAMLTEST">
<wsp:Policy>
<wsp:PolicyReference URI="#IF_IF_YS_SAMLTEST"/>
</wsp:Policy>
<wsdl:operation name="YsSamltest">
<wsp:Policy>
<wsp:PolicyReference URI="#OP_IF_OP_YsSamltest"/>
</wsp:Policy>
<wsdl:input message="tns:YsSamltest"/>
<wsdl:output message="tns:YsSamltestResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="YS_SAMLTEST" type="tns:YS_SAMLTEST">
<wsp:Policy>
<wsp:PolicyReference URI="#BN_BN_YS_SAMLTEST"/>
</wsp:Policy>
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<wsdl:operation name="YsSamltest">
<soap:operation style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="YS_SAMLTEST_SOAP12" type="tns:YS_SAMLTEST">
<wsp:Policy>
<wsp:PolicyReference URI="#BN_BN_YS_SAMLTEST_SOAP12"/>
</wsp:Policy>
<wsoap12:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<wsdl:operation name="YsSamltest">
<wsoap12:operation style="document"/>
<wsdl:input>
<wsoap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<wsoap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="YS_SAMLTEST">
<wsdl:port name="YS_SAMLTEST" binding="tns:YS_SAMLTEST">
<soap:address location="http://poc-sap:8021/sap/bc/srt/rfc/sap/ys_samltest/200/ys_samltest/ys_samltest"/>
</wsdl:port>
<wsdl:port name="YS_SAMLTEST_SOAP12" binding="tns:YS_SAMLTEST_SOAP12">
<wsoap12:address location="http://poc-sap:8021/sap/bc/srt/rfc/sap/ys_samltest/200/ys_samltest/ys_samltest"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
ビジネスサービス作成後、以下のエラーを確認するかと思います。
"[OSB Kernel:398133]The service is based on WSDL with Web Services Security Policies that are not natively supported by Oracle Service Bus. Please select OWSM Policies - From OWSM Policy Store option and attach equivalent OWSM security policy." (See Figure 8参照)
1964583.gif
Figure 8: Policy Error
このエラーはOracle WebLogic ServerがOracle Web Services Managerとは異なり、ECCのWSDLにあるポリシーをサポートしていないために発生します。現時点では、このエラーを避けるためには、サービスポリシー構成を「From OWSM Policy Store」に変更しましょう。ポリシーをOracle Service Bus管理コンソールからのみ設定します。Oracle Service Busサーバーが立ち上がっていれば、必要に応じて、Oracle Web Services ManagerポリシーをOEPEから追加することができます。
プロキシサービスをビジネスサービスから作成すると、同じポリシーエラーが出てきます。[Policy]タブで Service Policy Configuration[From Pre-defined Policy or WS-Policy Resource]に変更します。Figure 9では、プロキシサービスにはポリシーは不要です。
1964584.gif
Figure 9: Create proxy service
HTTP Transport]タブで、[Authentication]を[Basic]に変更します。これが必要なのは、ビジネスサービスで、Oracle Web Services Managerが認証済みユーザー名を使ってSAML Assertionを生成するためです。

Oracle Service Busの構成jarファイルをエクスポートします。

Oracle Service Busの構成


Oracle Service Bus管理コンソールにアクセスし、OSB構成jarファイルをサーバーにインポートします。
ビジネスサービスを構成し、Oracle Web Services Managerで作成したカスタムポリシーを追加します。
Figure 10:  Service Policy Configuration
ポリシーを適用後、[セキュリティ]タブでプロパティの値を変更できます。
Figure 11: Policy Overrides
(注意)ビジネスサービスで振る舞いを変更する必要があれば、ここでポリシーのプロパティ値を変更することができます(例:異なる署名の証明書)。

テストの前に


テストの前に検証ポイントをご紹介します。
OracleとSAPのマシンの時計が同期されていることを確認し、ECCで適切なクロックスキューを設定します。未来の時刻、もしくは定義したクロックスキューよりも大きなタイムスタンプを持つメッセージをOracle Service Busが送信すると、ECCは呼びだしを拒否します。SAML Assertionに含まれているユーザーは、ECCでユーザー·ストアの既存のユーザーとマッピングする必要があります。ECCではユーザー名の大文字と小文字を区別します。
ECCがOracle Web Services Managerが使うSAML Issuerを受け入れるように設定しておきましょう。
すべての必要な証明書がキーストアにOracle Web Services ManagerおよびECCにインポートされていることを確認しましょう。

テスト


プロキシサービスのWSDL URLを取得し、サービスをテストします。例えば以下のような具合です。
http://<host>:<port>/TestSecSap/ProxyServices/TestSamlClient?WSDL
任意のWebサービスクライアントツール(例えばSoapUIなど)を使ってサービスをテストできます。
WebLogic Serverに作成したユーザーの資格証明を設定することをお忘れなく。

以下はリクエストメッセージのサンプルです。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Header/>
<soapenv:Body>
<urn:YsSamltest>
<Text>test</Text>
</urn:YsSamltest>
</soapenv:Body>
</soapenv:Envelope>
Oracle Web Services Managerがポリシーを適用すると、ECCに送付されるリクエストは次のように変わります。
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:SecurityTokenReference wsu:Id="STR-SAML-bCgQ6C7G7d3xvJEZ0Ap9Ag22"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID">SAML-l0sKvVtSFWBxVSfO8DOYOQ22</wsse:KeyIdentifier>
</wsse:SecurityTokenReference>
<wsu:Timestamp wsu:Id="Timestamp-B8oMUcneIEM0FBP1WSzqiw22"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2013-04-15T20:04:41Z</wsu:Created>
<wsu:Expires>2013-04-15T20:09:41Z</wsu:Expires>
</wsu:Timestamp>
<wsse:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
EncodingType="http://docs.oasis-open.org/wss/2004/01/ oasis-200401-wss-soap-message-security-1.0#Base64Binary"
wsu:Id="BST-umEAXBVw2Neuu90Yk43M6A22"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">MIIG1jCCBb6gAwI...CreDzVTHZz/xXtD2Vl8JsTN/QaKkZ1n88=</wsse:BinarySecurityToken>
<saml:Assertion MajorVersion="1" MinorVersion="1"
AssertionID="SAML-l0sKvVtSFWBxVSfO8DOYOQ22"
IssueInstant="2013-04-15T20:04:41Z"
Issuer="www.oracle.com"
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
<saml:Conditions NotBefore="2013-04-15T20:04:41Z"
NotOnOrAfter="2013-04-15T20:09:41Z"/>
<saml:AuthenticationStatement AuthenticationInstant="2013-04-15T20:04:41Z"
AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password">
<saml:Subject>
<saml:NameIdentifier Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">testsamlclient</saml:NameIdentifier>
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:sender-vouches</saml:ConfirmationMethod>
</saml:SubjectConfirmation>
</saml:Subject>
</saml:AuthenticationStatement>
</saml:Assertion>
<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<dsig:Reference URI="#BST-umEAXBVw2Neuu90Yk43M6A22">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>buSz7W4V5OQ4FTBZKf8YBIpBC1Y=</dsig:DigestValue>
</dsig:Reference>
<dsig:Reference URI="#Timestamp-B8oMUcneIEM0FBP1WSzqiw22">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>psj9Sjk+bPTxUbqu1h8xUahVkrA=</dsig:DigestValue>
</dsig:Reference>
<dsig:Reference URI="#STR-SAML-bCgQ6C7G7d3xvJEZ0Ap9Ag22">
<dsig:Transforms>
<dsig:Transform Algorithm="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform">
<wsse:TransformationParameters>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</wsse:TransformationParameters>
</dsig:Transform>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>gMV488pINPLCAhWMzF6YGmBXySc=</dsig:DigestValue>
</dsig:Reference>
<dsig:Reference URI="#Body-qp7LuhCcRiNgYpIFe3OIyA22">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>n6fRqeZ5AOg7GUSST0Y23bIftSg=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>f6TPUUzWLbpPCnpbBBNeIhmy8vp+03V7YWLxCPcSbbPeN1AcUBijFPsH35V90IBmhgbPX366S9Ouu52lYiKNTgWn8UPIEVeKHYKp742dHBSlqyxxVagJ7ddHjHgNbNn5QFuu/re6gcDAOVYwcGRDwpNPg+RnywQKkOfpgxtSdkLWz5ok7TjQcfApnur5gCQvmRsBJwuQcaI3WTuFfWLg5gCj+yazOgUkwb+l7Vbssl8LdTQ1WiQdBKmoAbWci2GL+VFfkaq0dGcYd2/oJLJtrehPiTW6GY/o7TmWY9L8cJOCJo86YPbKjfjn8WHuANe/AQRMAMkKnymUd424xS+C8g==</dsig:SignatureValue>
<dsig:KeyInfo Id="KeyInfo-KYpO2OdhC7Q6fmBL1fonww22">
<wsse:SecurityTokenReference>
<wsse:Reference URI="#BST-umEAXBVw2Neuu90Yk43M6A22"
ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</dsig:KeyInfo>
</dsig:Signature>
</wsse:Security>
</soapenv:Header>
<soapenv:Body wsu:Id="Body-qp7LuhCcRiNgYpIFe3OIyA22"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<urn:YsSamltest>
<!--Optional: -->
<Text>test</Text>
</urn:YsSamltest>
</soapenv:Body>
</soapenv:Envelope>
ECCはリクエストを検証し、レスポンスをOracle Service Busに返します。
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp wsu:Id="ts-516B5F24AE9D1010E10080000A1D123D">
<wsu:Created>2013-04-15T20:04:41Z</wsu:Created>
<wsu:Expires>2013-04-15T20:06:11Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap-env:Header>
<soap-env:Body>
<n0:YsSamltestResponse xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style">
<Result>Hello testsamlclient - PARAM: test</Result>
</n0:YsSamltestResponse>
</soap-env:Body>
</soap-env:Envelope>
Oracle Service Busはレスポンスをクライアントに返します。
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"/>
<soap-env:Body>
<n0:YsSamltestResponse xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style">
<Result>Hello testsamlclient - PARAM: test</Result>
</n0:YsSamltestResponse>
</soap-env:Body>
</soap-env:Envelope>

まとめ

IDの伝播はセキュアな統合において非常に重要ですが、SAMLのようなテクノロジーを適用する方法は常に明快であるとは限りません。この記事が皆様の類似のシナリオにおいてお役に立つことを願っています。

著者について

Ronaldo FernandesはブラジルのOracle Consultingチームのprincipal consultantです。専門はOracle Fusion Middleware、SOA、セキュリティで、1996年からJavaテクノロジーを使って業務をしています。アーキテクチャ定義、問題解決、テクニカルリーダーシップおよびソフトウェア開発において15年以上の経験を有しています。

Baca Selengkapnya ....

[BPM] Reusing Web Forms across BPM Roles

Posted by Unknown Selasa, 02 Juli 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/bpmtech/entry/reusing_web_forms_across_bpm

最近別のBPM Product ManagerであるVarshaが、異なるタスクアクティビティのためにWeb Formを再利用したいという要件をもってやってきました。ま、これは簡単に対応できることはわかっていましたし、ヒューマンタスクの出力結果を変えて、ロールに基づいた内容で区別することもできます。Varshaの要件はもうちょっと複雑で、ログインユーザーに基づいたデータを隠したい、というものでした。Web Formのルールを使ったことtがあれば、動的にデータを可視・不可視にすることは共通の要件であり、Web Formルールを使えば簡単に実現可能です。この場合、課題となるのはWeb form内部のBPMロールにアクセスすることでした。この要件は将来のリリースで実現する予定ですが、Varshaは今すぐ解決策を必要としていました(ま、とにかくお客様だけが待てないというわけではありませんから)。ありがたいことに解決策にたどり着きましたのでこれが多くの人に役立つことを願っています。

Solution has 3 steps :

Step 1: Web Formに不可視属性(Role)を追加します。この属性の目的は、現在ログインしているユーザーのロールを保存するためだけにあります。この値をデータアソシエーションで渡していきます。


Step 2 : [データアソシエーション]で、スイムレーンに基づくロールの値を渡します。


Step 3 : この隠された属性値をWeb Formの動的な振る舞いを制御するためのルールとして使いましょう。


細かい手順やサンプルは、java.netからダウンロードできます。
Oracle BPM Suite 11g (Java.net)
https://java.net/projects/oraclebpmsuite11g/downloads/directory/Samples/bpm-webfoms-reuse

Baca Selengkapnya ....

[BPM] Oracle Business Process Management (BPM) Learning Library

Posted by Unknown 0 komentar
Oracle Learning LibraryにはOracle製品のチュートリアルなどが満載なのですが、この中にBPMのページもできました。
Oracle Business Process Management (BPM) Learning Library
http://apex.oracle.com/pls/apex/f?p=44785:141:0::NO::P141_PAGE_ID,P141_SECTION_ID:11,68
"Hello world"のような簡単なプロセスの作成に始まり、Rulesやシステム/ビジネス例外の処理、Process Acceleratorなどが取り上げられていますので、ご興味ある方はブックマークして下さい。

Baca Selengkapnya ....

[SOA] Fanning Out Events on the Oracle SOA Suite 11g Event Delivery Network

Posted by Unknown Kamis, 20 Juni 2013 0 komentar
原文はこちら。
http://www.oracle.com/technetwork/articles/soa/jellema-events-soasuite-1902429.html

著者について
Lucas Jellemaは、1994年以来(Oracleと共に)ITで活躍してきました。 Oracle Fusion MiddlewareのOracle ACE DirectorであるLucasは、Oracle Database(SQL、PL/SQL)、サービス指向アーキテクチャ、ADF、およびJavaを含む多様な分野でのコンサルタント、トレーナー、およびインストラクターです。彼はOracle SOA Suite 11g Handbookの著者であり、JavaOne、Oracle Open World、ODTUG Kaleidoscope、Devoxx、その他のコンファレンスでたくさんの発表を行っています。
Oracle SOA Suite 11g Handbook / By Lucas Jellema (Oracle Bookstore)
http://astore.amazon.com/oraclebooks-20/detail/0071608974

サンプルはこちら。
Sample code for this article (zip, 54kb)
http://www.oracle.com/technetwork/articles/soa/fanoutevent-sources-1903159.zip

Overview

この記事ではOracle SOA Suite 11gでイベントを使い、最大限分断しつつ、意味のある形で相互にビジネスプロセスが影響を与える方法をご説明します。具体的には、この記事ではEvent Delivery Network (EDN)イベントをよりきめ細かいレベルに広げるためのソリューションです。これを使うと、一つのイベントが複数の実行中のBusiness Process Execution Language (BPEL)プロセスのインスタンスに影響を及ぼすことができます。この記事では以下のOracle SOA Suite 11gコンポーネントを利用します。
  • BPEL
  • Mediator
  • Event Delivery Network
  • Spring
  • Locator API
  • Composite Sensors

Introduction

イベントとはメッセージですが、特定のコンシューマをターゲットにしていません。SOA環境においては、コンポーネント間の依存性を減らし、再利用性や柔軟性を増すためにdecoupling(分断)が主要な目的の一つであるため、イベントは極限まで分断して情報を共有するための価値ある方法です。

イベントのパブリッシャーは潜在的に他のコンポーネントが関心を持っているビジネスの状況を知るコンポーネントです。コンポーネントが責任をもって、関連する詳細情報と共に汎用的なイベントハンドラ基盤に対しイベントを渡します。パブリッシャーはイベントのサブスクライバーのことは認識していません。パブリッシャーはイベントで何が起こり、誰がイベントを消費するのか知っている必要はありません。

特定のビジネス·イベントに関心を持つすべてのコンポーネントが、イベントハンドラインフラストラクチャを使い、これらのイベントのリスナーとして登録できます。特定のビジネスイベントタイプのイベントがイベントハンドラに渡されるたびに、サブスクライブしているすべてのリスナーにイベントが発行されます。イベントのコンシューマーは、どこでイベントが発生し、どのように配信されるのかを知る必要はありません。
図1
イベントパブリッシャーやイベントコンシューマー間のつながりが完全に切れていることが、イベントとイベント駆動型アーキテクチャパターンを利用する上で大きな魅力的です。依存関係のないコラボレーションはアーキテクトの至高の目標と言ってもいいでしょう。

Events in the Oracle SOA Suite: EDN and BPEL

Oracle SOA Suite 11gはイベントハンドラ基盤を備えており、この基盤はビジネスイベントのパブリッシャーにとって仲介者であるとともに、こうしたイベントのコンシューマーでもあります。この基盤をEvent Delivery Network (EDN)と呼んでいます。
(注意)SCAコンポジットアプリケーションでイベントと共にJMSやAQを利用できます。

EDNで特定のイベントをサブスクライブ可能なコンポーネントの一つにBPELがあります。MediatorやBPMNもEDNイベントをサブスクライブできます。BPELプロセスはEDNイベントを次の2方法のうち1方法で受け取ることができます。
  • イベントで新しいBPELプロセスインスタンスを生成する
  • イベントが実行中のBPELプロセスインスタンスに消費される
最初のオプションは有用ですが、この記事ではもう一つの状況について取り上げます。イベントが実行中のイベントに消費されると、イベントは明らかにそのインスタンスや進行する向きに影響を与える可能性があります。このパターンを、ビジネスイベントが実行中のビジネスプロセスに影響を与える可能性のある状況で使います。このようなイベントの例としては、特定の国や会社との貿易の禁止、倉庫での火災、クライアントの死亡、または特定の製品またはサービスの即時撤退というように、かなり劇的な可能性があります。それほど劇的でない例では、(マーケティングキャンペーンに応答した)新しいクライアント、一般的な割引期間の開始や終了、病気で呼び出されるスタッフ、特定の製品の在庫枯渇があります。

ビジネスの条件が事前に定義されたビジネスイベントに対応するものと認識されているならば、イベントを発行します。イベントに反応して何が起こるか、どこで誰によって起こるかは目に見えないし、イベントのパブリッシャーにとっては無関係です。

この記事では、Termination of Customer(顧客の終了)というイベントを検討します。このイベントは、会社が顧客とのすべての取引を中止するべきであることを意味します。任意のセールスサイクルが中止され、全く出荷が行われず、保留中の注文がキャンセルされます。この影響力のあるイベントは、例えば顧客が破産を申請したとか、特定の連邦政府の調査対象であるような場合にパブリッシュされます。先ほど述べたように、イベントの発生元とその原因はイベントコンシューマーにとっては無関係です。終了対象の顧客のIDというシンプルなペイロードでイベントを流す必要があります。
図2
こうしたイベントコンシューマーの一つに、BPELプロセスのProcessOrderがあります。このプロセスは顧客からの注文を処理し、受注から出荷、そして後続の請求プロセスの起動までを取り扱います。下図はプロセスの概要を示しています。

図3
顧客資格が停止されると、すべての実行中のProcessOrderプロセスインスタンスが中断されます。この目的のため、BPELプロセス中のDoAllTheWorkというスコープにはイベントハンドラーがあり(図4参照)、終了イベントを消費してプロセスを正常に終了することができます。
図4
相関に基づいて実行中のBPELプロセスインスタンスでイベントを消費することができます。BPELの相関の本質は、すべてのプロセスインスタンスが一意のキーを持つ、ということです。これは相関識別子という、着信メッセージやプロセス内で確立された派生したもので、これを使い、インスタンスと着信メッセージやイベントを関連付けます。相関関係を成功するためには、この着信メッセージやイベントはこの一意のキーを含む必要があります。

The challenge at hand

すでにこの記事で直面している課題に目星がついていることでしょう。一つのTerminateCustomerイベントが多くのProcessOrderというBPELインスタンスに影響を与える可能性がある、ということです。しかし、これらのインスタンスは、その一意の識別子に基づいて着信イベントと相関させることができます。それゆえ、EDNの任意のイベントをせいぜい一つのBPELプロセスのインスタンスが消費できるのです。

同じ顧客に対して同時に処理されている複数のオーダーが存在し得るので、ProcessOrderインスタンスをCustomerIDで一意に識別することができません。その代わりに、ProcessOrderインスタンスはそのOrderIDで識別されています。

イベントを発行し、現在その取引を停止する顧客のために処理されているすべての注文のために、一つのTerminateCustomerイベントを複数のAbortOrderForCustomerイベントに変換する解決策を見つける必要があります。 AbortOrderForCustomerイベントのペイロードには、OrderIDが含まれており、これを使ってProcessOrderというBPELプロセスの1つのインスタンスに正確に関連付けることができます。
図5

Addressing the challenge

やるべきことは明確で、ビジネスイベントと紐付けるきめ細かい詳細情報を見つけ出し、その各々の詳細情報に対し、適切なイベントを発行する、ということです。この場合、ビジネス·オブジェクトのCustomerに詳細Orderオブジェクトが関連付けられています。TerminateCustomerイベントの場合、当該顧客の実行中の受注を検索し、その後、各注文に対しAbortOrderForCustomerイベントを発行する必要があります。イベントの発行は簡単です。Oracle SOA SuiteでMediatorが完璧にうまくやってくれます。

本当の問題は、実行中のProcessOrderインスタンスを検索する方法です。ここでは、Oracle SOA SuiteのAPIを利用して、プログラムでインスタンスを問い合わせることができます。APIを使うと、Composite Sensorの値でインスタンスをフィルタリングすることができます。ProcessOrderコンポジットがComposite SensorとしてCustomerIDが公開されている場合、特定のCustomerIDに紐付くインスタンスだけをAPIで取得することができます。このような各インスタンスのために、OrderIDが必要です。APIを使って簡単にインスタンスのセンサー値を取得できるため、OrderIDを含む2個目のComposite Sensorが役に立ちます。

これを念頭に置いて、この課題に対する解決策の案を図6に作ってみました。最初の1枚は、Oracle OpenWorld期間中に開催されたOracle SOA Suite Customer Advisory Boardでナプキンに走り書きしたものです。明らかに思いつきですね。この案は以下の手順を含んでいます。
  1. 様々な顧客に対応する一つ以上のProcessOrderのBPELプロセス·インスタンスを開始する。このBPELプロセスを含むSOAコンポジット·アプリケーションには、2つのComposite Sensor(CustomerIDとOrderID)がある。
  2. TerminateCustomerイベントをEvent Delivery Network(EDN)発行する。ペイロードにはCustomerIDを含む。
  3. (不可能な手順):取引停止の顧客に対し実行しているすべてのProcessOrderインスタンスに、単一のイベントを渡す。
  4. 手順3のかわりに、Mediatorコンポーネントを使ってTerminateCustomerイベントを消費し、イベントからCustomerIDを抽出する。
図6
  1. (CustomerIDを渡して)Spring Contextコンポーネントを呼びだす…
  2. このSpring Contextコンポーネントは、Oracle SOA SuiteのJava APIを使ってComposite Sensorを使ってCustomerIDと紐付くProcessOrderのすべての実行中インスタンスを識別し、第2のComposite Sensorの値からこれらのインスタンスのOrderIDを収集する。
  3. 各OrderIDに対しMediatorを呼び出す
  4. MediatorはOrderIDをペイロードとして持つAbortOrderForCustomerイベントをEDNに対し発行する。
  5. 各AbortOrderForCustomerイベントはOrderIDと相関を持つProcessOrder BPELプロセスの一つの実行中インスタンスが消費する。BPELプロセスインスタンスは事前に定義されているロジックに従い終了する。
図7は、SOAコンポジットアプリケーションで実装が必要なコンポーネントを示しながら、走り書きから技術的な設計に落とし込んだものです。
図7

Implementation Steps

この記事の残りの部分では、上述のSOAコンポジットアプリケーションを実装するための手順を詳細に説明しますが、ここには、ProcessOrderビジネスプロセスを実行するためのBPELプロセスが含まれています。また、顧客に関連付けられた各注文のイベントにTerminateCustomerイベントを発行するMediatorとSpringコンポーネントが含まれています。EDNのイベントを定義し、最後に、アプリケーションを実際に動かしてご覧にいれましょう。

もちろん、この記事で説明したBPELプロセスは実際の運用環境で使うプロセスよりもずっとシンプルになっていますが、主要な要素とイベント発行メカニズムの価値を損なうわけではありません。

Implementing the ProcessOrder BPEL process

作業は新しいSOAコンポジットアプリケーションを(SOA Extensionインストール済みの)JDeveloper 11gで作成するところから始まります。このアプリケーションをFanoutEventと呼びます。現在のところ、プロジェクトにはSOAコンポジットが含まれています。これ以後記載のソースや成果物はこの記事からダウンロード可能なソースからご利用いただけます。
サンプルコード
http://www.oracle.com/technetwork/articles/soa/fanoutevent-sources-1903159.zip

Develop BPEL Process component ProcessOrder

ProcessOrder.wsdlファイルには、ProcessOrderというBPELプロセスが公開するWebサービスが記述されています。このサービスにはProcessOrderというportTypeがあり、一つの非同期オペレーションプロセスがあります。このオペレーションはProcessOrderRequestMessageという、一つのメッセージパートを持つ入力メッセージを取ります。このメッセージパートはProcessOrder.xsdファイルのOrder要素に定義されています。
図8
Order要素は非常にシンプルです。CustomerIdentifierとOrderIdentifierが製品名、品目個数、配達の詳細と共に渡されます。

サービスは非同期であるため、Callbackポートタイプが定義されています。このポートタイプには一つのオペレーション(processResponse)があり、ProcessOrderResponse要素を基にしたシンプルなシングルパートのメッセージを取ります。ところで、この記事の説明上、このレスポンスメッセージは全く無関係です。
図9
WSDLとXSDドキュメントに基づいて、BPELプロセスコンポーネントをコンポジットに追加します(図10)。
図10
このプロセスにはDoAllTheWorkという一つのスコープが含まれています。このスコープでは、すべての注文処理を実装することができますが、この記事では、そのような処理は必要ではありません。このスコープに含むものは、Waitアクティビティだけです。

Add Composite Sensors for CustomerIdentifier and OrderIdentifier

以前、イベントレベルの不一致に対する解決策を議論した際に、2個のComposite Sensorを導入しました。これらのセンサーを使うと管理者はOracle Enterprise Manager Fusion Middleware Controlのコンソールでコンポジットインスタンスを検索し抽出することができます。また、Java APIを使ってプログラムでインスタンスを検索することも可能です。

センサーアイコンを使うComposite Editorで、Composite Sensor Editorを使って最初のComposite Sensorを定義します。これをCustomerIdentifierと呼び、BPELが公開するSCA Serviceに接続しています。このセンサー値はリクエストメッセージ中のOrder要素のCustomerIdentifier要素から導出されます。言い換えると、このセンサー値はCustomerIdentifierに一致します。Process Orderインスタンスを作成するインスタンスのCustomerIdentifierに等しい、ということです(図11)。
図11
2個目のComposite Sensorを作成します。これもOrderIdentifierを出力します。Java APIを使ってこの値を保持し、送出するAbortOrderForCustomerイベントのペイロードとして使う必要があります(図12)
図12

Create AbortOrderForCustomer Event

XMLスキーマ定義ファイルのevents.xsdには AbortOrderForCustomerEventタイプがあり、ここでAbortOrderForCustomerというEDNイベントのペイロードを説明しています(図13)。
図13
AbortOrderForCustomerEventには子要素としてOrderIdentifierとCustomerIdentifier、motivationが含まれています。

このAbortOrderForCustomerEvent定義を基にして、AbortOrderForCustomerイベントをCustomerEvents.edlファイルで定義します。次の図はこのイベント定義を説明しています(図14)。
図14

Subscribe the ProcessOrder BPEL process to the AbortOrderForCustomer Event

この時点での状況は以下のようになっています。
非同期Webサービスと2個のコンポジットセンサーを公開するコンポジット。
さらに、コンポジット(もしくはコンポジットが包含するBPELコンポーネント)はEDNイベントAbortOrderForCustomerにサブスクライブされています。
図15

Setup Correlation

イベントをProcessOrderの実行中インスタンスに取り込むため、イベントの消費に対する相関を設定する必要があります。つまり、(OrderIDを使って)どのようにProcessOrderインスタンスを識別しすべきか、いつ、どのように一意のキーをインスタンスに割り当てるべきか、いつ、どのようにインバウンドメッセージやイベントをこの一意のキーと照合するか、を指定します。

まず、OrderIdentifierと呼ばれるプロパティに基づいて、相関セットOrderIdentifierCorrelationSetを作成します。
図16
これは単一の値を基にした一意のキーの定義を意味します。

次は、インバウンドメッセージやイベントと相関セット内のプロパティをマッピングするためのプロパティエイリアスを定義します。図17では、プロパティOrderIdentifierをインバウンドメッセージのProcessOrderRequestMessageのOrder要素に含まれるOrderIdentifierという子要素とマッピングしています。このプロパティをAbortOrderForCustomerEventペイロードのOrderIdentifier要素ともマッピングします。これにより、ProcessOrderRequestMessageとAbortOrderForCustomerEventの両方がProcessOrderインスタンスを一意に識別するために必要な情報を含んでおり、それらが相関の関係にある、ということをBPELエンジンに指示しています。
図17

Associate Receive and Message Handler with CorrelationSet

まだBPELプロセスから欠けているものが一つあります。我々は、一意のキーがインスタンスに設定されている場合、そしてその一意のキーを使って既存のインスタンスに着信イベントまたはメッセージを供給する場合、BPELエンジンに指示する必要があります。

ProcessOrderRequestMessage(および第作成されたインスタンス)を受信した場合、このプロセスで、相関セットを初期化します。ProcessOrderRequestMessageを受信し(インスタンスが最初に作成され)た際に、相関セットを開始します。最初のReceiveアクティビティで、相関セットOrderIdentifierCorrelationSetは[相関]タブに表示され、開始プロパティが[はい]に設定されています。

相関セットを使って着信するAbortOrderForCustomerイベントを既存のProcessOrderインスタンスに取り込みます。これはDoAllTheWorkスコープで定義されたonMessageイベントリスナーで起こります。OnMessageアクティビティもまた同じOrderIdentifierCorrelationSetを使って相関が構成されています。こんどは、インスタンスIDに割り当てたくなく、この値を使ってイベントを実行中のインスタンスにマッピングしたいため、開始プロパティが[いいえ]に設定されています。

図18ではReceiveアクティビティとOnMessageアクティビティの両方で相関を設定する方法を説目いしています。
図18

Implement the Event Fan Out machinery

TerminateCustomerイベントをCustomerevents.edlファイルに定義します。Fan-out mediatorがこのイベントをインターセプトする必要があります。このMediatorはTerminateCustomerイベントをEvent Delivery Networkを使ってサブスクライブします。イベントが到着すると、Mediatorがアクティブになり、Springコンポーネントを呼び出します。


SpringコンポーネントはTerminateCustomerイベントのペイロードに含まれる顧客IDを使って、正しい値を持つコンポジットセンサーCustomerIdentifierを出力する、すべての実行中のProcessOrderインスタンスを(SOA SuiteやJava APIを使って)検索します。Springコンポーネントは各インスタンスのコンポジットセンサーOrderIdentifierの値を抽出し、各インスタンスについてもう一つのMediatorを呼びだし、その特定のOrderIDの値について、AbortOrderForCustomerイベントをEDNにパブリッシュします。

Definition of the TerminateCustomer event

XMLスキーマ定義ファイルのEvents.xsdには、TerminateCustomerイベントのペイロードを定義するために使用される、TerminateCustomerタイプが含まれています。このペイロードは、少なくともcustomerIdentifierを含める必要があります。子要素motivationはおまけとして追加されています。
図20
TerminateCustomerイベントをCustomerEvents.edlファイルで定義します。このペイロードはXSDファイル内のTerminateCustomerタイプに基づいています。図21では、このコンポジットアプリケーションで認識されている2個のビジネスイベントを使ってedlファイルを紹介しています。
図21
TerminatorCustomerイベントを消費するMediatorを作成しましょう。
「イベントのサブスクライブ」テンプレートを基に、ConsumeTerminateCustomerというMediatorコンポーネントを作成します。イベント定義ファイルCustomerEvents.edlからこのコンポーネントがサブスクライブするイベントとして、TerminateCustomerイベントを選択します。
図22
イベントをサブスクライブするMediatorをコンポジットに追加します。
図23

Create the event publishing Mediator for AbortOrderForCustomer

次に追加するコンポーネントは、AbortOrderForCustomerイベントをパブリッシュするMediatorコンポーネントです。このMediatorのインターフェースを定義する簡単なWSDLドキュメントを設定しました。AbortOrderForCustomerイベントのペイロード定義を基にした入力要素を持つ、一方向のオペレーション(publishAbortOrderEvent)を含んでいます。
図24
AbortOrderForCustomerイベントを発行するため、ルーティングルールをMediatorに追加します。トランスフォーメーションはリクエストメッセージのペイロードパートからイベントペイロードへ、1対1のマッピングをします。
図25

Create and wire the Spring Component

SpringコンポーネントTerminateCustomerToAbortOrderEventTranslatorをコンポジット中に作成します。

MediatorコンポーネントPublishAbortOrderEventをSpringコンポーネントとつなぎます。このMediatorはSpringコンポーネントが要求するイベントを発行します。
図26

これはSpring bean定義ファイルで作成された任意のbeanに後で注入できるSpringコンポーネントでsca.referenceを作成します。
図27
この参照はPublishAbortOrderEventInterfaceというJava Interfaceを基にしており、これはMediatorのインターフェースを表現するWSDL用にJDeveloperが生成します。
図28
Springコンポーネントが提供するサービスを説明するCustomerToOrderEventProcessor Javaインターフェイスを作成します。このインタフェースは、TerminateCustomerイベントを処理でき、2個の文字列を入力値とするメソッドを定義しています。インタフェースで定義された2個目のメソッドは、前段で導入したPublishAbortOrderEventInterfaceの実装を注入するために使用されるセッターです。このJavaインターフェース由来のメディエータPublishAbortOrderEventは、既に作成済みのsca:referenceを通じてこの実装を提供します。
図29
Springコンポーネントが提供するsca:serviceを、現在Spring Bean定義ファイルで定義することができます。公開されている名前はCustomerToOrderEventProcessorで、サービスインターフェースは、Javaインターフェースによって指定されます。
図30
このsca:serviceのWSDLベースのインターフェース記述(CustomerToOrderEventProcessor.wsdl)は、Springコンポーネントのサービスをコンシューマと接続した際(この場合ComsumeTerminateCustomerというMediatorです。図31参照)に、は、JDeveloperが生成します。
図31
ソリューションの外殻を作成し、すべての結線が適切に配置されています。欠けているのは、Javaインターフェースを実装し、Springコンポーネントのsca:serviceが約束した実際の作業を実施するJava Spring Beanです。この実装は、次で説明します。

Implementing the Spring Bean

JavaクラスCustomerToOrderEventProcessorImplはCustomerToOrderEventProcessorインタフェースの実装で、processTerminateCustomerEventとsetPublishAbortOrderEventInterfaceの両メソッドを実装しています。

このクラスに基づくSpring Beanを次のように設定できます。
図32
CustomerToOrderEventProcessorBeanと呼ばれるBeanは、sca:serviceの実装を提供しており、このリンクはターゲット属性を介して確立されます。 (AbortOrderForCustomerイベントを発行するメディエータを通して注入される)sca:referenceはBeanのpublishAbortOrderEventInterfaceプロパティに設定されています。

クラスそのものは非常に簡単です。AbortOrderForCustomerEventオブジェクト、いわゆる"ペイロード"をメディエータに渡しイベントを発行する準備をします。このクラスは、customerIdentifierに対応する現在実行中のProcessOrderインスタンスからすべてorderIdentifierの一覧を取得します。その後、これらのorderIdentifierを反復処理し、それぞれに対応したMediatorを呼び出します。
図33
最も難しい作業は、collectOrderIdentifiersというプライベートメソッドで行われます。このメソッドは、Oracle SOA SuiteのJava APIと接続し、customerIdentifierに値を設定されたCustomerIdentifier Composite Sensorを使ってすべてのProcessOrderインスタンスをクエリします。
図34
このAPIによるクエリは、CustomerIdentifierという名前のComposite Sensorとセンサー値が設定されているSensorFilterを使っています。このAPIが返す各インスタンスから、OrderIdentifier Sensorの値は2つのステップで取得されます。まず、getSensorData()でインスタンス用のComposite Sensorのコレクションを取得します。続いて、このコレクションに対してOrderIdentifier Sensorのエントリを発見するという単純な繰り返し処理を実施します。値があればその値を読み取ります。こうして決定された値を、このメソッドが返すそのorderIdentifierのコレクションに追加します。
図35

Reviewing the work

これまで説明したすべての最終結果を図36に示します。通常のビジネスフローはBPELプロセスProcessOrderをアクティベートするProcessOrder_epサービスへの呼び出しです。このインスタンスは、その存続期間中いつでもAbortOrderForCustomerイベントを消費するような状態になっています。そのイベントは、Order IDに基づいてインスタンスに関連付けることができます。.

例外的なフローは、TerminateCustomerイベントを消費するMediatorから始まります。 Mediatorは、イベントのペイロードからCustomer IDを取得し、そのCustomer IDを渡してSpringコンポーネントTerminateCustomerToAbortOrderEventTranslatorを呼び出します。このコンポーネントは、Oracle SOA Suite Java APIを使い、Composite Sensorで設定されたCustomer IDを持つすべてのコンポジットインスタンスを見つけようとします。すべてのこれらのインスタンスのOrder IDは対応するセンサから取得され、各インスタンスについて、Order IDを渡してメディエータPublishAbortOrderEventを呼びだします。このMediatorはAbortOrderForCustomerイベントを発行します。

このイベントは、Order IDに基づいて、イベントと相関を持つBPELプロセスProcessOrderのインスタンスが消費します。その後、インスタンスが終了します。

図36はCompositeでイベント転送を可視化しています。ただし、イベントを発行するメディエータとイベントを消費するBPELプロセスの間には直接のリンクが存在しないことにご注意下さい。:この相互作用は完全にコンシューマからパブリッシャを分離するイベント配信ネットワークを介して実施されています。
図36

And... action!

SOAコンポジットアプリケーションは完全に自己完結しています。アプリケーションをOracle SOA Suiteランタイム環境に通常の方法でデプロイできます。
図37
JDeveloperアプリケーションをご覧頂くことができますし、図37のように、ご自身のOracle SOA Suite環境にデプロイすることもできます。

Run ProcessOrder instances

デプロイが終了したら、ProcessOrderプロセスのインスタンスを起動します。FanoutEventコンポジットをOracle Enterprise Manager Fusion Middleware Controlで選択し、[テスト]ボタンを押します(図38)。
図38
ProcessOrder_epサービスのリクエストメッセージの要素に対応するフィールドを持つWebサービスのテストページが現れます。Only the customerIdentifierとorderIdentifierのみが今回の目的に関係がありますので、それぞれABCと123Aを指定し、[Webサービスのテスト]ボタンを押してリクエストを発行します(図39)。
図39
以下のリストに従い、CustomerIDがABC、XYZ、PQRのProcessOrderインスタンスを複数起動します。

図40
この時点で、Oracle Enterprise Manager Fusion Middleware Controlをチェックしてインスタンスのリストを確認します。3個のインスタンスのComposite SensorがCustomer IDとOrder IDを出力しています(図41)
図41

Publish the TerminateCustomer event

シナリオ:顧客XYZは、もはや信頼できるビジネスパートナーではなく、すべての関係をすぐに切断するべきです。 TerminateCustomerイベントをこの顧客のために発行するべきです。このイベント発行の間接的な結果として、現在、顧客XYZのために実行しているProcessOrderのすべての5インスタンスを終了させたいと考えています。

テスト目的で、Enterprise Manager FMW ControlからEDNイベントを発行できます。soa-infraノードのコンテキストメニューから、[ビジネスイベント]を選択します。
図42
ビジネス·イベントのページの[テスト]ボタンを押すと、ポップアップウィンドウが開き、どのイベントを発行するか尋ねてきますので、図43のように、このイベントのXMLペイロードをテキストフィールドに入力し、[発行]ボタンを押します。
図43
TerminateCustomerイベントはcustomerIdentifierにXYZを持つイベントとして、Event Delivery Networkに発行されています。

このイベントを発行することによって生じる効果を見る前に、CustomerIdentifier Composite Sensorからの値をXYZでフィルタリングした実行中のインスタンスの概要を見てみましょう(図44)。これにより、何が起こるか予想がつくと思います。記載されているこの5個のインスタンスは、終了しているはずです。
図44

Inspecting the event consequences

EDNにはTerminateCustomerイベントの一つのサブスクライバがあります。それがFanoutEventコンポジットのメディエータConsumeTerminateCustomerです。このMediatorは、顧客XYZのイベントを消費し、SpringコンポーネントのTerminateCustomerToAbortOrderEventTransformerを起動します。このコンポーネントは、顧客XYZに対応する、実行中のすべてのProcessOrderインスタンスを見つけ(図44から少なくとも5個あることがわかります)、特定のOrder IDのために、EDNに対しAbortOrderForCustomerEventを発行するPublishAbortOrderEventメディエータを呼び出します。

メッセージフロートレースの検査時に、いったい何が起こったのかが明確になります。5個の呼び出しはメディエータPublishAbortOrderEventに対してなされました。この結果、5つ実行中の注文に対応するAbortOrderForCustomerイベントになりました。メッセージフロートレースから、これらのイベントのいずれかが、ProcessOrderインスタンスをどのように終了させているかがわかります(図45)。
図45
終了したProcessOrderインスタンスのいずれかをドリルダウンし、BPELの監査証跡を調べると、何が起こったか明確な図を確認できます(図46)。
図46
顧客XYZ(終了したもの)と注文345X(BPELインスタンスが処理した注文)のAbortOrderForCustomerイベントを、orderIdentifierを基にした相関を通じて、このインスタンスが消費しました。このイベントを捕捉するonMessageハンドラは、AbortThisOrderアクティビティを実行し、意図したとおりにBPELインスタンスを中止しました。

当然ながら、他の顧客のためのすべてのProcessOrderインスタンスは、この時点では実行されています。顧客XYZを扱うものだけが終了しました。

Conclusion

ビジネスイベントを使用すると、組織は、新しいいレベルの疎結合を導入することができます。潜在的に興味深いものと認識されている状況にある任意のパーティー(システム、サービス、アプリケーション、プロセス)は、汎用的なイベントハンドラーに対してイベントを発行することで世間に伝える必要があります。これらの認識されているビジネスイベントの一つ以上に関心を持つ当事者は、イベント発生時に、通知するイベントハンドラを購読することができます。イベントのコンシューマやパブリッシャがお互いについて何も知らないにもかかわらず、曲がりなりにもまだ協力しています。

Oracle SOA SuiteのEvent Delivery Networkはイベントハンドラの一例です。その他もご利用いただけますし、JMSやAQを含めて、比較的単純な手段を使って作成することができます。

ビジネスイベントは、例えば、BPMやBPELといった実行中のプロセスに影響を与える必要がある場合、こうしたイベントを特定のコンポジットインスタンスと相関を持たせる必要があります。しかし、ビジネスイベントが意図された効果とは異なるレベルにあるとき、例えば顧客のすべての注文を停止するような場合、私たちは課題に直面します。通常は、実行中の一つのプロセスインスタンスと相関を構成します。

この記事では、イベントをより高いレベルで捕捉し、期待するレベルの実行中のインスタンスにイベントを発行できることをご説明しました。Composite Sensor、Springコンポーネント、相関を持つインスタンスを発見するためのOracle SOA SuiteのJava API、そして、2番目のタイプの適切なレベルに調整したイベントを使って実施しています。

Resources


Baca Selengkapnya ....
Trik SEO Terbaru support Online Shop Baju Wanita - Original design by Bamz | Copyright of apk zipalign.