2013年7月31日

[Certification, Database] Beta Testing To Begin for "Upgrade to Oracle Database 12c" (1Z0-060) Certification Exam

原文はこちら。
https://blogs.oracle.com/certification/entry/0856_15



オラクル認定資格は新しいOracle Database 12c Administrator Certrified Professional認定のためのベータテストを今週開始します。
Database Certification: 12c Database Administrators
http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=458&get_params=p_track_id:DBOCA12C
認定資格試験「Upgrade to Oracle Database 12c (1Z1-060) 」のベータテストを現在実施中で、USD50という大幅割引料金で受験いただけます(訳注:日本円では5400円です)。
Upgrade to Oracle Database 12c (1Z1-060)
http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-060
Oracle Certification Program Beta Exams
http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=182&p_org_id=1001&lang=US
受験は、ピアソンVue社のサイトにアクセスし、1Z1-060の受験登録をしてください。Oracle認定資格のWebサイトに、試験の目的、問題数、時間などといった準備に必要な詳細情報がすべて掲載されています。
PEARSON VUE社Webサイト
http://www.pearsonvue.com/japan/IT/oracle_index.html(日本)
http://pearsonvue.com/oracle(海外)
Oracle9i Databaseだけでなく、Oracle Database 10g、11g Database Administrator Certified Professionalsの方々は、今日このベータ試験の受験を登録すれば、この新しいOracle認定プロフェッショナル(OCP)の認証資格をいち早く取得することができます。

QUICK LINKS

[OEPE, FMW] What's New In OEPE 12.1.2.1?

原文はこちら。
https://blogs.oracle.com/oepe/entry/what_s_new_in_oepe

Oracle Enterprise Pack for Eclipse 12.1.2.1.0がOTNからダウンロードできるようになっています。
Oracle Enterprise Pack for Eclipse (12.1.2.1)
http://www.oracle.com/technetwork/developer-tools/eclipse/downloads/index.html
これは様々なテクノロジー(Oracle ADFADF Essentials、Apache MavenRESTful Web Servicesなど)のための新しい設計時のツールが導入されるという、重要なfeature releaseです。このリリースの詳細を以下にまとめました。
  • Oracle ADF 12.1.2.0のサポート
    OEPE 12.1.2.1はOracle ADF 12.1.2を使ったアプリケーション開発を完全にサポートします。ついにJDeveloperとOEPEユーザーは、最新バージョンのフレームワークを使い、最新かつもっともすばらしいIDE上で、ADFアプリケーションを開発することができます。既存のADF設計時機能はすべてADF 12.1.2用にアップデートされました(例:ADF FacesとDVTタグのサポート、ADFアーティファクトのAppXRay検証、ADF Task Flowエディタ、Data Controlの生成、ADF Bindingのツール、リファクタリング、デバッグ、などなど)OEPEの設計時ツールはADF 12.1.2の新しい標準を利用します(例:ページテンプレート用facelet、Sparse Data Controlの利用など)。もちろん、OEPE 12.1.2.1は旧バージョンのADF 11gR1での開発もサポートしています。
  • Oracle ADF Essentialsのツール
    ADF 12.1.2に加え、OEPEユーザーは、無料のADF Essentialsを使ってADFアプリケーションを開発することも可能です。ADF EssentialsやGlassFish Serverの利用時には、既存のWebLogic Server向けADFツール群はすべてご利用いただけます。OEPE 12.1.2.1には追加機能が含まれており、これを使うとGlassFishでADF Essentialsのインストールや設定がずっと簡単になります。
    Oracle® Enterprise Pack for Eclipse User's Guide Release 12.1.2.1
    Configuring and Using ADF with GlassFish Server
    http://docs.oracle.com/cd/E47843_02/12121/OEPUG/oracle_adf_tools.htm#BABGABJH
  • Fusion Middleware 12cのMavenサポート
    このリリースではMavenビルドツールへの追加サポートを様々な方法で提供します。Eclipse m2eとm2e-wtpをデフォルトで同梱し、お客様はMavenベースのプロジェクトをEclipseで作成、pomファイルを編集、Mavenライブラリを管理することができます。
    Maven Integration for Eclipse (m2e)
    http://eclipse.org/m2e/
    Maven Integration for WTP (m2e-wtp)
    http://www.eclipse.org/m2e-wtp/
    この新しいMaven Synchronization utility for Oracle Fusion Middleware 12cを利用してOracleのjarファイルを管理するお客様は、OEPEプロジェクトを構成して新しいMavenライブラリリポジトリを利用することができます。
    Developing Applications Using Continuous Integration 12c (12.1.2)
    Installing and Configuring Maven for Build Automation and Dependency Management
    http://docs.oracle.com/middleware/1212/core/MAVEN/config_maven.htm
    新しいADF Project ArchetypeをOEPEと一緒にリリースしました。これは基本的なADFアプリケーションをMavenの構造に配置するのに便利なツールです。
    Oracle® Enterprise Pack for Eclipse User's Guide Release 12.1.2.1
    Installing the Maven Archetypes
    http://docs.oracle.com/cd/E47843_02/12121/OEPUG/maven.htm#CHDEJCGC
    お客様はまた、この新しくなったWebLogic Server Maven pluginsをOEPE内でMavenベースのプロジェクトとともに利用することも可能です。
    Developing Applications for Oracle WebLogic Server 12c (12.1.2)
    Using the WebLogic Development Maven Plug-In
    http://docs.oracle.com/middleware/1212/wls/WLPRG/maven.htm
  • JAX-RSとRESTの設計時ツール
    JAX-RS用の新しい設計時ツールがOEPE 12.1.2.1に含まれています。OEPEは既存のEclipse WTP JAX-RSファセットを強化し、追加のプロジェクト構成オプションやJerseyライブラリの管理、JAX-RS用デプロイメントディスクリプタの構成機能が付加されています。
    Oracle® Enterprise Pack for Eclipse User's Guide Release 12.1.2.1
    REST Web Services Support
    http://docs.oracle.com/cd/E47843_02/12121/OEPUG/rest_web_services.htm#CHDDBJAI
    RESTful WebサービスクラスやRESTクライアントを作成するための新しいウィザードも含まれており、新しいRESTアノテーションビューはRESTアノテーションの管理を簡単に構成できる仕組みを提供します。Java Editorは強化され、コード補完とJAX-RSアノテーションを検証するようになっています。また、[Run As] > [Run On Server] というIDEでの標準的なアクションで、対象のアプリケーションサーバー上でJAX-RSクラスを実行することもできます。
  • ADF Data Control Editor
    新しいADF Data Controlの構成のためのリッチなエディタが利用できます。
    Oracle® Enterprise Pack for Eclipse User's Guide Release 12.1.2.1
    Working with ADF Model Data Binding
    http://docs.oracle.com/cd/E47843_02/12121/OEPUG/oracle_adf_tools.htm#CHDFEDBH
    *.dcxファイルをクリックすると、エディタが立ち上がり、Data Controlの構成を管理したり、List of Viewの定義やList Bindingの設定、Data Controlの構造定義を変更することができます。
  • OEPEとFMW 12.1.2の新しいOracleインストーラ
    OEPEインストーラは新しいインストーラテクノロジーに移行しました。OEPE 12.1.2.1に加え、この新しいインストーラはWebLogic Server 12.1.2、Coherence 12.1.2、そしてOracle ADF 12.1.2をバンドルしています。このインストーラはOEPEのダウンロードページ、WebLogic Serverのダウンロードページのいずれからでも入手することができます。
    Oracle Enterprise Pack for Eclipse Download Page
    http://www.oracle.com/technetwork/developer-tools/eclipse/downloads/index.html
    Oracle Fusion Middleware ソフトウェア・ダウンロード
    http://www.oracle.com/technetwork/jp/middleware/fusion-middleware/downloads/index.html
    http://www.oracle.com/technetwork/middleware/fusion-middleware/downloads/index.html
詳細情報は、OTNのOEPEのページをご覧ください。
Oracle Enterprise Pack for Eclipse OTN page
新しいOEPE 12.1.2の機能の詳細のウォークスルーは、このブログを過去に遡ってチェックしてください。

[Virtualization] Unveiling Oracle’s Latest Engineered System

原文はこちら。
https://blogs.oracle.com/virtualization/entry/unveiling_oracle_s_latest_engineered

Oracleの最新Engineered Systemを使えば、いかに仮想化やクラウドへの道筋をシンプルになるか、是非ライブWebcastでご確認下さい。ライブWebcastは2013年8月13日午前10時(PDT)、午後1時(EDT)からスタートです。

[訳注]
日本時間では、2013年8月14日午前2時からスタートです。

[Live Webcast]
Virtualization and Cloud Made Simple and Easy with Oracle’s Latest Engineered System
http://event.on24.com/r.htm?e=653148&s=1&k=D1651F9F945A682AE602335A5FA79C6A

2013年7月30日

[WLS, Database] New Whitepaper – Cloud Performance, Elasticity and Multitenancy with Oracle WebLogic Server 12c and Oracle Database 12c

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/new_whitepaper_cloud_performance_elasticity
Oracle WebLogic 12c release 12.1.2の注目ポイントの一つは、先頃リリースされたOracle Database 12cと緊密に統合されている、というところです。 こうした主要な統合機能に関してライブで聴取したいなら、2013年7月31日に開催されるLaunch Eventにご参加下さい!(日本時間では2013年8月1日午前2時からです)。
Oracle Launch Event Announcing Oracle Cloud Application Foundation for Next-Generation Applications https://event.on24.com/eventRegistration/EventLobbyServlet?target=registration.jsp&eventid=651242&sessionid=1&key=C96B0428F5647966361342531047AB28&sourcepage=register
世界で最も使われているデータベースとNo.1のアプリケーションサーバーを同じ会社が開発しているということのメリットの一つが、1+1が3になる、というシンプルなルールです。何言ってるんだ、ですって? DatabaseとMiddlewareの開発チームが協働し、Oracle WebLogic Server 11gはActive GridLink for Real Application Clusters (RAC)を導入しました。Oracle Databaseと共に、この強力なソフトウェアテクノロジーを使うと、ランタイム接続、負荷分散・アフィニティ機能を備えつつ、管理が簡単になり、可用性が向上し、高速な接続のフェイルオーバーを確保します。Deltekはこうした機能のアーリーアダプターの1社です。是非動画をご覧下さい。

WebLogic Server 12c (12.1.2)のリリースでは、Oracle WebLogic Server 12c(12.1.2)およびOracle Database 12c間の緊密な統合により、可用性の向上、より良いリソースの共有、本来備え持つスケーラビリティ、設定のしやすさとグローバルなクラウド環境での管理機能の自動化を伴って、こうした機能が強化されています。

Oracle WebLogic ServerがこれほどOracle Database 12cと統合されている唯一のアプリケーションサーバーであることは注目に値します。CAF Product ManagementチームのMonica RiccelliFrances Zhaoがまとめたこのホワイトペーパーでは、こうしたユニークなデータベースやクラスタリング、アプリケーションサーバーの技術によって、あなたのビジネスのためにどのように連係し、可用性、スケーラビリティ、および性能を向上することができるかを説明しています。これは、設定、管理、およびパフォーマンスの出しやすさに注目して、Oracle Active GridLink for RACを導入することから始まります。その後、マルチテナントデータベース(プラガブルデータベース)、データベース常駐接続プール(Database Resident Connection Pool)、Application Continuity、およびグローバルデータサービス(Global Data Services)といった、Oracle Database12cのいくつかの主要な機能のOracle WebLogic Serverへの影響を説明しています。是非ホワイトペーパーをダウンロードしてご一読いただき、フィードバックいただければと思います。
White Paper Cloud Performance, Elasticity, and Multitenancy with Oracle Weblogic Server 12c and Oracle Database 12c
http://www.oracle.com/go/?&Src=7882475&Act=17&pcode=WWMK13050479MPP013
このトピックに関し、Steve Feltsがまとめたエントリで詳細をご覧いただけます。

[Coherence] Coherence on Exalogic: dealing with the multiple network interfaces

原文はこちら。
https://blogs.oracle.com/csoto/entry/coherence_on_exalogic_dealing_with

先日、EECS(Exalogic Elastic Cloud Software)のアップグレード後、以下のようなエラーメッセージがCoherenceサーバー起動時に出る、という事象に対応しました。
Oracle Coherence GE 3.7.1.8 (thread=Thread-3, member=n/a): Loaded Reporter configuration from "jar:file:/u01/app/fmw_product/wlserver_103/coherence_3.7/lib/coherence.jar!/reports/report-group.xml"
Exception in thread "Thread-3" java.lang.IllegalArgumentException: unresolvable localhost 192.168.10.66 at
com.tangosol.internal.net.cluster.LegacyXmlClusterDependencies.configureUnicastListener(LegacyXmlClusterDependencies.java:199)
...
Caused by: java.rmi.server.ExportException: Listen failed on port: 8877; nested exception is:
java.net.SocketException: Address already in use ...
weblogic.nodemanager.server.provider.WeblogicCacheServer$1.run(WeblogicCacheServer.java:26)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.UnknownHostException: 192.168.10.66 is not a local address
at com.tangosol.net.InetAddressHelper.getLocalAddress(InetAddressHelper.java:117)
at
com.tangosol.internal.net.cluster.LegacyXmlClusterDependencies.configureUnicastListener(LegacyXmlClusterDependencies.java:195)
...

Exalogicにはいくつかのネットワークインターフェース(bond/eth 0、1、2など)があることはよく知られていることです。Coherenceがどのインターフェースに接続すべきかを判断する際に利用するロジックでは、tangosol.coherence.localhostパラメータを適切に指定していることを確認することが、(以前のリリースのCoherenceよりもずっと)重要になります。その理由は、具体的には、複数のネットワークインターフェースを持つマシンや、ローカルアドレスをネットマスクとして指定し大規模なクラスタ全体にわたって容易に構成できるような機能強化をサポートするためです。そのIPアドレス(または適切にマッピングされたホストアドレス)から、利用される所望のネットワークインタフェースを簡単に見つけることができます。そうすれば、Coherenceクラスタはうまく動作するはずです。

[Database] Very cool videos about Upgrade to Oracle 12c

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/very_cool_videos_about_upgrade

本を全部よむより短時間の動画をみたほうがずっとわかりやすいってことありますよね。
そんなわけで、Roy Swonger(Senior Developer of Software Development, Oracle)がOracle Database 12cへのアップグレード・移行について語る動画をどうぞ。この中でOracle Database 12cで新たに導入されたアップグレードや移行のための機能をご紹介しています。

Chapter 1 - Upgrading is Universal


Chapter 2 - Minimizing Risk and Downtime


Chapter 3 - Leveraging Consolidation to ease Migration


Chapter 4 -Why Upgrade?


Chapter 5 - Automating the Upgrade Process

2013年7月27日

[Java] Tyrus 1.2

原文はこちら。
https://blogs.oracle.com/PavelBucek/entry/tyrus_1_2

もうひとつのリリースサイクルを終え、version 1.2のTyrusをご紹介できるようになりました。
Project Tyrus (JSR 356: Java API for WebSocket - Reference Implementation)
https://tyrus.java.net/
このバージョンではバグの修正および機能の追加を実施しています。例えば、Servletとの統合を改善したり、メッセージ送信時のByteBufferハンドリングを正したり、クライアントSSLのサポートの改善や巨大なメッセージの処理(クライアント側、サーバー側の処理)に対する重要な修正などです。
以前より、選りすぐった機能について、ブログエントリで補足することにしていますが、いくつかは既にアップデートされたユーザーガイドで説明されています。
Tyrus 1.2 User Guide
https://tyrus.java.net/documentation/1.2/user-guide.html

Ver 1.2に含まれているバグ修正と新機能のリスト

# いくつかはまだ終了していないように見えるかもしれませんが、これはJIRAの問題であり、まもなく修正されるはずです。
Tyrus 1.2は既にGlassFishに統合・組み込まれています。Nightly Buildのダウンロードもしくは手作業で新しいTyrusにアップグレードすることができます(手作業の場合、全てのTyrusのjarファイルを置き換えて下さい)。
GlassFish
https://glassfish.java.net/
GlassFish Nightly Build
http://dlc.sun.com.edgesuite.net/glassfish/4.0.1/nightly/

参考リンク

2013年7月26日

[Database, Java] What's in Oracle Database 12c for Java?

原文はこちら。
https://blogs.oracle.com/proactivejavadevelopment/entry/what_s_in_oracle_database

Oracle Database 12cのJDBCに関する3つのホワイトペーパーのご紹介です。

Java Performance, Scalability, Availability, Manageability & Security with Oracle database 12c (Javaのパフォーマンス、拡張性、可用性、管理性およびセキュリティ)

JavaでOracle Multitenant Container Databaseを使いたいとお考えですか?
これまで同時ユーザー数が数万人にもなるJavaアプリケーションをデプロイする必要がありましたか?JavaアーキテクトやJavaの設計者、パフォーマンス、スケーラビリティ、可用性、セキュリティ、管理性や使いやすさの面で新しいOracle Database 12cで機能強化されているものを利用したいと考えている方であれば、このホワイトペーパーをお薦めします。
Java Performance, Scalability, Availability & Security with Oracle Database 12c
http://www.oracle.com/technetwork/database/application-development/12cdb-java-perf-scal-ha-security-1963442.pdf

Oracle Database 12c Application Continuity for Java (アプリケーションの継続性)

今までに同じ航空券、同じ記事、税金を2度払った経験はありますか?システムにデータベース障害に対応してもらって、トランザクションを最初からやり直させないようにしてもらいたいと思ったことがありますか?データベースの停止時(ハードウェア、ソフトウェア、ネットワーク、またはストレージの障害)には、4つの問題がアプリケーションに持ち上がります。それはハングアップ、エラー処理、実行中の作業の結果の決定(つまりlast COMMIT)、そして実行中の作業の再実行です。
アプリケーション開発者やデータベース管理者、システム管理者、インテグレータやISVでOracle RACやActive Data Guardをよりうまく活用し、アプリケーションの可用性を最大化させようと考えているならば、このホワイトペーパーをお薦めします(Javaに特化してはいますが)。
Oracle Database 12c Application Continuity for Java
http://www.oracle.com/technetwork/database/application-development/applicationcontinuityforjava-1965585.pdf

JDBC Memory Management with Oracle database 12c (JDBCメモリ管理)

データベース・アプリケーションは、大量のメモリを使用することがあります。大規模なJDBCアプリケーションは、使用するメモリ量が原因でパフォーマンスの問題に陥ることがあります。Oracle Database 12cのドライバはより一層メモリを使わないようになっていますが、大規模なアプリケーションの場合、依然としてメモリの問題に陥ることがあります。
このホワイトペーパーでは、各種ドライバのメモリ利用方法と最高の性能を出すためのチューニング方法をご紹介しています。アプリケーションが満足する性能を出しているのであれば、メモリ使用量を心配する理由はありませんが、アプリケーションが期待する性能を出さず、想定よりも多くメモリを使っている場合には、このホワイトペーパーを一読されることをお勧めします。
Oracle JDBC Memory Management
http://www.oracle.com/technetwork/database/application-development/jdbc-memory-management-12c-1964666.pdf

2013年7月25日

[Java] BeanManager: Obtain Contextual Reference to Beans (TOTD #215)

原文はこちら。
https://blogs.oracle.com/arungupta/entry/beanmanager_obtain_contextual_reference_to

javax.enterprise.inject.spi.BeanManagerを使うと、Beanのコンテキストリファレンスをプログラムで取得できます。移植可能な拡張モジュールがコンテナと直接対話できるようにすることが主目的ではありますが、Java EEコンポーネントが利用することも可能です。

BeanManager:を取得する方法は3つあります。
  1. @Injectを使う
    @Inject BeanManager bm;
  2. getBeanManager()を使う
    BeanManager bm = CDI.current().getBeanManager();
  3. JNDI Lookupを使う
    BeanManager bm = null;
    try {
        InitialContext context = new InitialContext();
        bm = (BeanManager)context.lookup("java:comp/BeanManager");
    } catch (NamingException | NullPointerException ex) {
        Logger.getLogger(TestServlet.class.getName()).log(Level.SEVERE, null, ex);
        ex.printStackTrace(out);
    }
    
インスタンスはスコープが@Dependent 、修飾子が@Defaultになっています。これを使って、注入が可能なBeanのリストをプログラムで取得できます。例えば以下のような感じです。
Set<Bean<?>> beans = bm.getBeans(Greeting.class);
BeanManagerには他にも多くの有用なメソッドがあります。例えばコンテキストのリファレンスや注入可能なリファレンス、非コンテキストのインスタンスを取得するメソッドがあります。javadocを読んでみて下さい。
BeanManager (Java(TM) EE 7 Specification APIs)
http://docs.oracle.com/javaee/7/api/javax/enterprise/inject/spi/BeanManager.html
完全なサンプルソースコードは以下から入手できます。
glassfish~svn - Revision 62396: /branches/arun/javaee7-samples/samples/cdi/beanmanager
https://svn.java.net/svn/glassfish~svn/branches/arun/javaee7-samples/samples/cdi/beanmanager/
アプリケーションでどんなふうにBeanManagerを使いますか?

[BPM] Empower Knowledge Workers to Manage Unstructured Processes

原文はこちら。
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

[misc.] Schedule Change - JavaOne SF 2013 Sunday Keynotes @ Noon @ Moscone

原文はこちら。
https://blogs.oracle.com/otn/entry/schedule_change_javaone_sf_2013

JavaOne 2013 San Franciscoに参加される方、参加しようと考えてらっしゃる方にご連絡です。以下のセッションの会場、時間帯に変更がありますので、ご注意下さい。
Java Strategy/Partner/Technical Keynotes
[日時]2013年9月22日(日) 12時から15時
[会場]Moscone North Hall D
アジェンダは以下のリンクからどうぞ。
JavaOne 2013 Agenda
http://www.oracle.com/javaone/schedule/index.html
現地で皆様にお会いできるのを楽しみにしています。

[JDeveloper] Maven support in JDeveloper 12c - new video

原文はこちら。
https://blogs.oracle.com/grantronald/entry/maven_support_in_jdeveloper_12c

ADF Insiderシリーズに新しい動画がUpされました。この動画は最新リリースのJDeveloper 12cに関する最初の動画であり、JDeveloper 12cにおけるMavenのサポートについて、簡単な概要と共にデモをご紹介しています。

2013年7月24日

[Java] JSON Binding with JAX-RS - Moxy, JSON-P, Jackson, Jettison (TOTD #214)

原文はこちら。
https://blogs.oracle.com/arungupta/entry/json_binding_with_jax_rs

プレゼンテーション中に頂く典型的な質問の一つに、「JAX-RSでJSONを使えるようにするにはどうすればいいの?」というものです。

JerseyでJSONを使えるようにする場合、基本的に3個のアプローチと、4個の異なるモジュールがあります。以下に簡単にまとめました。

MOXy JSON-P Jackson Jettison
POJO-based JSON Binding × ×
JAXB-based JSON Binding ×
Low-level JSON parsing & processing × ×

MOXyは、JerseyアプリケーションでサポートしているJSONバインディングのうちデフォルトかつ望ましい方法です。新しいサンプルが以下に追加されています。
glassfish~svn - Revision 62395: /branches/arun/javaee7-samples/samples/jaxrs/moxy
https://svn.java.net/svn/glassfish~svn/branches/arun/javaee7-samples/samples/jaxrs/moxy/
リソースの定義は以下のように行います。
@Path("endpoint")
public class MyResource {
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public MyObject echoObject(MyObject mo) {
        return mo;
    }
}
POJOは以下のように定義します。
public class MyObject {

    private String name;
    private int age;

    public MyObject() {
    }

    public MyObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
アプリケーションのクラスは
@ApplicationPath("webresources")
public class MyApplication extends Application {
}
クライアントコードは、
Client client = ClientBuilder.newClient();

WebTarget target = client.target("http://"
        + request.getServerName()
        + ":"
        + request.getServerPort()
        + request.getContextPath()
        + "/webresources/endpoint");
System.out.println("POST request");
MyObject mo = target
        .request()
        .post(Entity.entity(new MyObject("Duke", 18), MediaType.APPLICATION_JSON), MyObject.class);
out.println("Received response: " + mo.getName() + ", " + mo.getAge() + "<br><br>");
JSON MOXyモジュール(jersey-media-moxy.jar)はクラスパスに入っているので、Jerseyが自動的にモジュールを発見し、JSONバインディングのサポートが有効になります。

すべてのアプローチおよびモジュールに関する詳細の説明は、以下のリンクからどうぞ。
Jersey 2.0 User Guide
Support for Common Media Type Representations
http://jersey.java.net/documentation/latest/media.html

2013年7月23日

[WLS] Part 2 - 12c Database and WLS - Application continuity

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/part_2_12c_database_and

既にWebLogic ServerがOracle Database 12cをサポートすること、Application Continuity(AC)の前提条件についてエントリをまとめています。
Part 1 - 12c Database and WLS - Overview
https://blogs.oracle.com/WebLogicServer/entry/part_1_12c_database_and
http://orablogs-jp.blogspot.jp/2013/07/part-1-12c-database-and-wls-overview.html
Using Oracle JDBC Type Interfaces
https://blogs.oracle.com/WebLogicServer/entry/using_oracle_jdbc_type_interfaces
http://orablogs-jp.blogspot.jp/2013/07/using-oracle-jdbc-type-interfaces.html
接続でエラーが発生する場合、別の接続で処理を継続できるとよい-これがACの機能です。単一ノードのデータベースの場合、別の接続を取得することは、データベースとネットワークがまだ健在、つまり単なるネットワークの不調を意味しますが、Real Application Clusters(RAC)の場合、あるインスタンスで接続を失ったとしても、同じデータベースの別のインスタンスの接続を取得することができます。この機能が正しく動作するためには、エラーの前にその接続で実施したことすべてが新しい接続で再実行されることを保証することが必要です。つまり、これがACをreplayと呼ぶ理由です。オペレーションを再実行するため、当該接続で実施したオペレーションのリストを維持し、再実行できるようにする必要があります。もちろん、オペレーションを再実行する場合、最終更新からデータが変わる可能性があります。そのため、結果の追跡を続け、結果の一致を確認する必要があります。そのため、オペレーションの再実行が失敗すると、ACは失敗する可能性があります。

詳細は以下のドキュメント、ACのホワイトペーパー、データベースのドキュメントにあります。この記事ではACの機能概要を説明すると共に、ドキュメント類で取り扱っていない情報をご紹介します。
Administering JDBC Data Sources for Oracle WebLogic Server
Advanced Configurations for Oracle Drivers and Databases
http://docs.oracle.com/middleware/1212/wls/JDBCA/ds_oracledriver.htm#CCHHGCBE
Oracle Database 12c Application Continuity for Java
http://www.oracle.com/technetwork/database/application-development/applicationcontinuityforjava-1965585.pdf
Oracle® Database Development Guide 12c Release 1 (12.1)
Ensuring Application Continuity
http://docs.oracle.com/cd/E16655_01/appdev.121/e17620/adfns_app_continuity.htm#BABDJGDI
この機能を使うためには、Oracle Database 12cのJDBCドライバとDatabase 12cが必要です。11.2.0.3のドライバ、Database 11gR2 (11.2.0.3)を使う場合、動作するようにみえますが、再実行(replay)は読み取り専用トランザクションの場合のみ発生します(11gモードはサポートされていませんが、これを避けるメカニズムはありません)。

データベースサービスをACが使えるように構成する必要があります。このためには、新しい12cサービス属性である、FAILOVER_TYPE=TRANSACTIONとCOMMIT_OUTCOME=trueをサーバー側で設定する必要があります。

WebLogic ServerでACを使えるようにする手間は、利用するJDBCドライバを変えるだけです。具体的には、データソースを構成する際に、"oracle.jdbc.OracleDriver"ではなく、"oracle.jdbc.replay.OracleDataSourceImpl"を使います。それ以外、アプリケーションへの変更は一切ありません。WebLogic Serverの内部で、接続を取得すると、オペレーションの収集を開始するAPIを呼びだし、接続を閉じるとオペレーションの履歴をクリアするAPIを呼び出します。

簡単で完璧そうですね。何か裏があるのでしょうか。具象クラスの参照をやめて、新しいOracleインターフェースの利用が必要であることを取り除き、既にお伝えしました。あるアプリケーションにとっては重要な作業になる可能性があります。オペレーションの再実行が失敗したり一貫性がない場合にはACが失敗することをお伝えしました。ACが無効になる場合がほかにもあります。詳細はドキュメントをご覧頂くとして、大きなものの一つは、(少なくとも現時点では)XAトランザクションでreplayを使えない、ということです。また、2個の欠陥、ACはOracleプロキシ認証との組み合わせでは動作しないということ、そして新しいDRCP(Database Resident Connection Pooling / データベース常駐接続プーリング)機能と組み合わせでは動作しない、という欠陥を追跡しています。

WebLogic Serverでは、接続ラベル機能を使用するアプリケーションのためのラベリングコールバックを導入しました。このコールバックが登録されている場合、新しい接続がreplay前に初期化されると、このコールバックが呼び出されます。ラベルを使用しない場合でも、まだ呼びだされることを期待しているかもしれないので、replayのための新しい接続の初期化コールバックがあります(両方が存在する場合、ラベリングコールバックが初期化に優先します)。

別の考慮すべきより複雑なトピックがあります(現在WebLogic Serverのドキュメントには記載がありません)。デフォルトでは、ローカルトランザクションがその接続で完了すると、、replayは終了します。その接続で作業を続けることができますが、その時点以後で障害が発生すると、アプリケーションにエラーが返ります。このデフォルト振る舞いはサービス属性SESSION_STATE_CONSISTENCYの値がDYNAMICになっているためです。アプリケーションがトランザクション内で非トランザクションセッション状態(NTSS)を変更しない場合は、サービス属性SESSION_STATE_CONSISTENCYの値をSTATICに設定することができます。この罠に陥るアプリケーションがどれほどの数になるかわかりませんが、安全のためには、デフォルトのDYNAMICにしておくことです。

ACはすべてをreplayしませんので、エラー処理や、利用者にエラーを返すようなアプリケーションロジックを作っておく必要は依然としてあります。また、再実行のためのデータを保持するために時間、メモリに少々オーバーヘッドも発生します。それでも、JDBCドライバ名以外は変更する必要がなく、エンドユーザーにエラーを見せなくてよく、リカバリのロジックを簡素化できることから、多くのアプリケーションにとってすばらしい機能のように思えます。

P.S.
NTSSについて困惑していますか?私もそうでした。ランタイムで変更できる非トランザクショナルなセッション状態の例として、ALTER SESSION、PL/SQLのグローバル変数、SYS_CONTEXT関数、一時表のコンテンツがあります。以下にPL/SQLのグローバル変数の例を挙げました。以下の本体部分を持つパッケージを想像してみてください。
current_order number := null;
 current_line number;
 procedure new_order (customer_id number) is
  current_order := order_seq.nextval;
  insert into orders values (current_order, customer_id);
  current_line := 0;
 end new_order;
 procedure new_line (product_id number, count number) is
  current_line := current_line + 1;
  insert into order_lines values (current_order, current_line,product_id, count);
 end new_line;
end order;
WebLogic Serverにおける疑似コードシーケンスは以下のようになります。
getConnection()
exec "begin order.new_order(:my_customer_id); end;"
commit;
exec "begin order.new_line(:my_product_id, :my_count); end;"
<DB server failure and failover>
commit;
このシナリオでは、最初のトランザクションをreplayしません。それは既にコミットされており、データベースでは2個の注文で終わるためです。しかし、replayしない場合、order_idを失うため、new_lineの呼びだしに失敗するでしょう。そのため、コミット後のreplayは無効にする必要があります。このようなシナリオが存在しないことを保証できるのであれば、サービスのセッション状態を静的なものとしてマークすることができます。

2013年7月21日

[Support] MOS Certify July Release

原文はこちら。
https://blogs.oracle.com/certify/entry/mos_certify_july_release

My Oracle Supportの動作保証された組み合わせ(Certification)の表示が、7月の追加分にあわせて改善されました。


機能強化された箇所のスクリーンショットを以下に配置しましたのでご覧下さい。
1) 一つの製品を複数リリース、プラットフォームで比較することができるようになりました(マトリクスビュー)
Compare multiple releases and platforms for a single product (a matrix view)

2) ソフトウェアのダウンロードが動作保証の詳細ページからダウンロードできるようになりました。
Download software from the certify detail page

3) サポート日付のレイアウトが改善されました。
Improved support date layout

Engineered Systems(Exa*)、Sun Systems、Database、E-Business Suite、Fusion Applications、Fusion Middleware、JD Edwards、Siebel、Financial Services、その他新規で買収した会社の製品などで動作保証のページがアップデートされています。

2013年7月20日

[Java] Java API for JSON Processing: An Introduction to JSON

原文はこちら。
https://blogs.oracle.com/java/entry/java_api_for_json_processing

OracleのJitandra Kotamrajuが執筆した、“Java API for JSON Processing: An Introduction to JSON”という新しい記事がOTNのJavaページにUpされました。今回の記事は、Java API for JSON ProcessingがJSON(JavaScript Object Notation)の解析、生成、変換およびクエリのためのポータブルなAPIをどのように提供しているかをご理解頂けます。Oracleの技術スタッフの主要メンバーであるKotamrajuは、JSON Processingのスペックリードです。
JSONは軽量でテキストベース、言語非依存のデータ交換フォーマットであり、人間にとっても機械にとっても読み書きが簡単であるため、2種類の構造化型(オブジェクトと配列)を表すことができます。JSON ProcessingのスペックリードであるKotamrajuは次のように説明しています。
「オブジェクトは順序付けられていないゼロ個以上の名前と値のペアのコレクションです。配列はゼロ個以上の順序付けられた値です。配列の要素には、文字列、数値、Bool型、null、これらの2個の構造化型を入れることができます」
JSONはajaxアプリケーションや構成、データベース、RESTful Webサービスでよく使われています。あらゆる人気のあるWebサイトが、RESTful Webサービスと共にデータ交換フォーマットとしてJSONを提示しています。

KotamrajuはオブジェクトモデルおよびストリーミングAPIの両方の中身をチェックし、API for JSON Processingが以下の機能を提示している、と結論付けています。
  • 入力ストリームを解析して不変オブジェクトもしくはイベントストリームに変換
  • イベントストリームや不変オブジェクトを出力ストリームに書き出し
  • 不変オブジェクトをプログラム的に操作
  • 不変オブジェクトをビルダーを使いプログラム的に構築
APIはデータバインディングの構築、変換、問い合わせ、その他APIの操作のための基礎を構成します。JAX-RS 2.0ではJava API for JSON Processingとのネイティブな統合を提供しています。

記事は以下のリンクからどうぞ。
Java API for JSON Processing: An Introduction to JSON (Jitendra Kotamraju)
http://www.oracle.com/technetwork/articles/java/json-1973242.html

[misc.] Vote Now for the next OTN T-Shirt Design!

原文はこちら。
https://blogs.oracle.com/otn/entry/vote_now_for_the_next

Oracle Technology Network (OTN)が新しいTシャツを毎年作って様々なイベントで配っています(少なくとも3着はあるはずですよね)。あなたのコレクションに加えるとしたらどのTシャツのデザインがいいか、ご意見を頂きたいと思います。3個のデザイン案を用意しましたので、OTNのFacebookページから投票して下さい!
What T-Shirt Design would you want on your shirt?
https://www.facebook.com/OracleTechnologyNetwork?v=app_598203773533668.
コミュニティが第1位に投票したデザインは、今年の9月に開催されるOracle OpenWorld San Franciscoでお披露目します。デザイン案を以下に掲載しましたので、是非投票をお願いします。
Oracle OpenWorld San Francisco
http://www.oracle.com/openworld/index.html


[Java] The 2013 Java Theme Community Challenge

原文はこちら。
https://blogs.oracle.com/javaone/entry/the_2013_java_theme_community

今日からですよ!
あなたのJava Love度合いを表す、クレイジーでファンシー、ファニーでギークなスローガンを投稿して、今年のJavaOneのCommunity Keynoteを命名しましょう!
2013 Java Theme Community Challenge
https://www.java.net/javatheme
世界で最も普及したプログラミング言語をとの個人的なつながりを説明し、それを共有するための140文字(偶然の一致ではありません)を見つけてください。

このチャレンジは広く個人や組織に開かれています。最もすばらしい投稿のうち10個をSouJava、LJC、iJUG e.V.、そしてOracleの共同委員会が選定します。
SouJava (Sociedade de Usuários da Tecnologia Java)
http://www.soujava.org.br/
LJC (London Java Community)
http://www.meetup.com/Londonjavacommunity/
iJUG e.V. (Interessenverbund der Java User Groups e.V.)
http://www.ijug.eu/
これらの10個の投稿は、java.netでのコミュニティによる10日間の公開投票に入ります。最優秀の投稿をその後速やかにWebサイト上で発表する予定です。投稿者には2013 JavaOne San Franciscoのフルコンファレンスパスを差し上げます。

詳細は公式ルールをご覧下さい。
2013 Java Theme Community Challenge
https://www.java.net/javatheme

2013年7月18日

[Database] Oracle Multitenant (Pluggable Database) White Paper

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/oracle_multitenant_pluggable_database_white

しばらくの間プラガブルデータベースとしてご紹介していた機能が、正式にOracle Multitenantと命名されました。この機能に関する詳細をご所望なら、是非先頃リリースされたホワイトペーパーをご覧下さい。きっとよくご理解頂けると思います。
An Oracle White Paper June 2013
Oracle Multitenant
http://www.oracle.com/technetwork/database/multitenant-wp-12c-1949736.pdf

[WLS, FMW, Database] WebLogic Active GridLink - An Oracle and NEC Joint White Paper

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/weblogic_active_gridlink_an_oracle

OracleとNECが一緒になってOracle Database Real Application Clusters (RAC) との統合のための豊富な機能を提供する、Oracle WebLogic Serverに実装されているActive GridLink for RACソリューションの検証、テストに取り組んできました。

今回発行されたホワイトペーパーでは、まずOracle RACの概説ならびにOracle WebLogic Server 12cでサポートしているOracle RACの機能について説明しています。その後、OracleとNECが一緒になって実施したテストシナリオの詳細、ならびにその結果を、分析を交えて詳説しています。NECが実施したActive GridLink for RACのテストの背景と概要を詳細に取り扱っています。Runtime Connection Load BalancingやWeb Session Affinity、Fast Connection Failover、ダウンタイムなしでRACノードの追加・削除の方法に関する技術的な詳細を様々なユースケースを使って説明しています。

是非日本語版のホワイトペーパーをご覧下さい。
NEC and Oracle 共同ホワイトペーパー 2013年 6月
Active GridLink for Oracle RAC解説
高い可用性と運用性を実現するOracle WebLogic ServerとOracle Real Application Clustersの緊密な連携
http://www.nec.co.jp/middle/oracle/files/gc_wp-gridlink-gridcenter-nec.pdf
英語版もまもなくリリース予定です。是非そちらもチェックして下さい!

[追記]
英語版は以下のリンクからどうぞ。
Active GridLink for RAC: Intelligent integration between WebLogic Server and Oracle Real Application Clusters
http://www.oracle.com/technetwork/middleware/weblogic/overview/activegridlinkwhitepaperoraclenec-1987937.pdf

[Database] More parses in 12c ?

原文はこちら。
https://blogs.oracle.com/PerformanceDiagnosis/entry/more_parses_in_12c

12.1では多くのパースをするのでしょうか。
11.2.0.3から12.1へアップグレードすると、解析回数の総数が急増しているために不安に思われるお客様がいらっしゃるかもしれません。
でもご心配にはおよびません。12.1の問題ではなく、11.2.0.3の問題です。

以下のサンプルを見てみましょう。
select a.name, b.value 
       from v$statname a, v$mystat b 
      where a.statistic# =  b.statistic# 
        and ( a.name like '%parse count%' 
           or a.name like 'session cursor cache%') 
        and value>0; 

     begin 
     for n in 1..100 loop 
     begin 
       execute immediate 'alter session set optimizer_goal=choose'; 
     exception 
      when others then 
      null; 
     end; 
     end loop; 
     end; 
    / 

     select a.name, b.value 
       from v$statname a, v$mystat b 
      where a.statistic# =  b.statistic# 
        and ( a.name like '%parse count%' 
           or a.name like 'session cursor cache%') 
        and value>0; 
クエリから結果を得て、各バージョンの結果を並べてみました。
    NAME                            11.1 VALUE   11.2 VALUE   12.1 VALUE
    -----------------------------   ----------   ----------   ----------
    session cursor cache hits                2            3            1
    session cursor cache count               3           10           10
    parse count (total)                     12           11           12
    parse count (hard)                                    1   


    PL/SQL procedure successfully completed.

    NAME                            11.1 VALUE   11.2 VALUE   12.1 VALUE
    -----------------------------   ----------   ----------   ----------
    session cursor cache hits                3            3            1
    session cursor cache count               4           11           11
    parse count (total)                    114           13          114
    parse count (hard)                     100          101          100
    parse count (failures)                                           100 
11.2の解析回数(合計)が解析回数(ハード)以下であることにご注目下さい。解析回数(合計)には、ハード、ソフト、失敗の解析回数が含まれるべきなので、この値には意味がありません。

これは極端な例のように思えるかもしれませんが、この奇妙な振る舞いを再現する別のソフト解析シナリオがあります。

11.1から11.2.0.3へ移行するお客様にとっては、解析回数の総数が少なくなっているために改善していると思われるかもしれません。その後、11.2.0.3から12.1へ移行すると、急上昇に気付いて、おそらく心配されることでしょう。

そのため、ご心配なさらずに。12.1はたくさん解析をしているわけでもありませんし、11.2.0.3が少ない解析をしているわけでもありません。単に統計情報の計装上のバグです。具体的には以下のリンクをご覧下さい。
Bug 13837105 statistics "parse count (total)" and "session cursor cache hits" miscounted [ID 13837105.8]
https://support.oracle.com/epmos/faces/DocContentDisplay?id=13837105.8

2013年7月17日

[WLS] Using Oracle JDBC Type Interfaces

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/using_oracle_jdbc_type_interfaces

Oracle Database 12cのホットな新機能の一つは、Application Continuity (AC)です。この機能は基本的に発見します。接続が切れたものを裏で新しいものに置き換えるというものです(詳細は別のエントリや記事でお伝えする予定です)。これを実現するために、アプリケーションにはリアルな接続ではなく、接続ラッパーを渡します。インタフェースに基づいたクラスにあわせてのみ、ラッパーもしくは動的プロキシを生成することができます。Oracleのデータ型(REFやARRAYなど)は元々具象なクラスとして導入されました。WebLogic Server 10.3.6とJDBC 11.2.0.3ドライバでは、Oracleデータ型の新しいインタフェースを使って、この新しいAC機能を利用する必要があります。
まず、必要となるAPIの変更を理解するために歴史をひもときましょう。初期のWebLogicデータソースでは、ベンダー独自のメソッドへの任意の参照をハードコードされた参照によって取り扱っていました。メソッドの追加・削除というメンテナンス上の大きな問題がありました。ひどいときには、1000行以上のコードがOracle独自のメソッドを参照し、(DB2しか使っていなくても)Oracle Databaseのjarファイルがクラスパスに存在しないとサーバーが動作しませんでした。2003年3月の8.1で、パブリックインターフェイスのメソッドを実装し、基礎となるベンダーのオブジェクトに委譲するプロキシを動的に生成するようなすべてのJDBCオブジェクトのラッパーを導入しました。ハードコーディングされた参照やメンテナンスの悪夢がなくなり、それと共に重要なのは、デバッグ情報を提供したり、接続リークの発見、コンテナオブジェクトクローズ時にオブジェクトの自動クローズ、テストに失敗した接続の置き換えなどができるようになりました。Oracle Databaseのデータ型は具象クラスなので、WebLogic Serveのベンダーインタフェースであるweblogic.jdbc.vendor.oracle.*を実装するこれらのクラスに対してプロキシを生成します。アプリケーションはWebLogic Serverのベンダーインタフェースへキャストしたり、getVendorObj()を使って下位のドライバオブジェクトへアクセスすることができます。後に、デバッグ情報が不要といった機能の削除に対応するため、データ型を解除するオプションを追加しました。
この記事で取り上げているのはOracle Databaseのデータ型ですが、動的プロキシは任意のベンダーのデータベースで利用できます。例えば、DB2の接続をキャストして独自メソッドを利用することができます。
((com.ibm.db2.jcc.DB2Connection)conn).setDB2ClientUser("myname");
Oracle DatabaseのJDBCドライバ11.2.0.3から、データベースチームが新しいAC機能のためのラッパーを必要としていたので新しいインタフェースを導入しました。WebLogic Serverのデータソースユーザーにとっては、これはいいニュースです。つまり、unwrappingは不要、weblogic.jdbc.vendorパッケージは不要で、すべて透過的になったのです。プログラムを変更して新しいOracleの独自インタフェースを使う前に、まずは標準のJDBC APIのインタフェースが使えるかどうかを確認することをお勧めします。実際のところ、定義された新しいインタフェースを定義する中で、等価の標準JDBC APIがある場合、もしくはそのメソッドが重要な価値を追加していないと考えられる場合、Oracle独自メソッドが廃止されています。この表でそのマッピングを示しています。目標は、1列目と2列目への参照をなくし、第3列に置き換えることです。
旧Oracle Database
データ型
廃止予定のWebLogic Server
インタフェース
新しいインタフェース
oracle.sql.ARRAY weblogic.jdbc.vendor.oracle.OracleArray oracle.jdbc.OracleArray
oracle.sql.STRUCT weblogic.jdbc.vendor.oracle.OracleStruct oracle.jdbc.OracleStruct
oracle.sql.CLOB weblogic.jdbc.vendor.oracle.OracleThinClob oracle.jdbc.OracleClob
oracle.sql.BLOB weblogic.jdbc.vendor.oracle.OracleThinBlob oracle.jdbc.OracleBlob
oracle.sql.REF weblogic.jdbc.vendor.oracle.OracleRef oracle.jdbc.OracleRef
これは、シェルハッカーのための仕事です!ほとんどは自動化することができ、廃止されたメソッドを参照している場合には、コンパイラが知らせてくれますので、その後なくなったメソッドが等価のjdbc.sqlインタフェースにあるかどうか確認して下さい(例えば、getARRAY()はJDBC標準のgetArray()になります)。
これらの新しいインタフェースのすべてを説明するために書いたサンプルプログラムを用意しました。以下のリンクからご覧いただけます。
サンプルコード(注意:これは実際のところ".java"プログラムです)
https://blogs.oracle.com/WebLogicServer/resource/StephenFeltsFiles/OracleTypes.txt
このサンプルコードでは、こうしたOracleのデータ型をすべて取り扱っています。 BLOBおよびCLOBの使用はよくあるかもしれませんが、REFやStructあまり使われていないかもしれません。サンプルプログラムでは、各データ型のcreate、insert、updateおよびselectの方法を標準および拡張メソッドの両方を使って説明しています。ご注意いただきたいのは、標準のcreateArrayOf()ではなく、Oracle独自のcreateOracleArray()を使う必要があることです。サンプルプログラムでは標準のcreateBlob()やcreateClob()を使用していませんが、これらは、Oracle JDBCドライバでサポートされています。
APIのリファレンスは11.2.0.3のjavadocからご覧いただけます。以下のリンクからもご覧いただけます。
Oracle JDBC API Reference 11g Release 2 ("11.2.0.3.0")
Package oracle.jdbc
http://download.oracle.com/otn_hosted_doc/jdeveloper/905/jdbc-javadoc/oracle/jdbc/package-summary.html
これは、Application Continuityの利用にむけた第一歩です。しかし、これはまた、最終的にはなくなるOracle APIを除去して、標準JDBCインタフェース、新しいOracleインタフェースを使う良い動きでもあります。

2013年7月16日

[Database] Available Now ! Oracle SQL Developer 4.0 Early Adopter

原文はこちら。
https://blogs.oracle.com/proactivesupportDevTools/entry/available_now_oracle_sql_developer

ユーザビリティや機能面がかなり強化されたOracle SQL Developer 4.0のEarly AdaptorリリースがOTNからご利用いただけるようになっています。
Oracle SQL Developer
http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html
新機能の一部をご紹介しましょう。
  • データベースオブジェクトの検索
  • コマンドライン
  • SQL Developerカート
  • レポート
  • UIの強化
  • Data Modeler 4.0
  • JDK 7のサポート
参考となるリンクをご紹介しておきます。

[Java] WebSocket command line client

原文はこちら。
https://blogs.oracle.com/PavelBucek/entry/websocket_command_line_client

Tyrus 1.1では、シンプルなコマンドラインクライアントが含まれており、多くのシナリオで役立つ可能性があります。簡単な開発時のテストやサニティテスト、デプロイしたエンドポイントの監視に使うことができます。
Project Tyrus
https://tyrus.java.net/
使い方

最新のtyrus-client-cliバイナリ(現在の最新版は1.1)をダウンロードします。
tyrus-client-cli binary
http://search.maven.org/remotecontent?filepath=org/glassfish/tyrus/ext/tyrus-client-cli/1.1/tyrus-client-cli-1.1.jar
wgetを使ってダウンロードすることもできます。お好きな方法でどうぞ。
wget http://search.maven.org/remotecontent?filepath=org/glassfish/tyrus/ext/tyrus-client-cli/1.1/tyrus-client-cli-1.1.jar -O ./tyrus-client-cli-1.1.jar
ダウンロードしたバイナリを実行します
java -jar ./tyrus-client-cli-1.1.jar --help
上記のコマンドを実行すると、利用方法が表示されます。Tyrus CLIクライアントは現時点ではテキストメッセージの送信をサポートしており、1個の開いているエンドポイントへのping、そして1回の実行で現在のセッションを閉じ別のセッションに接続することができます(既に接続済みの接続がある状態で別の接続を開こうとする場合、自動的に接続済みのセッションのクローズを呼び出しますので、常に1つのエンドポイントのみとだけ会話します)。

[例]
$ java -jar ./tyrus-client-cli-1.1.jar ws://echo.websocket.org
# Connecting to ws://echo.websocket.org...
# Connected in session e303ad22-c5af-4bc3-9384-58ce6832ae94
session e303...ae94> ping
# pong-message
session e303...ae94> send tyrus-test-message
# text-message: tyrus-test-message
session e303...ae94> close
# closed: CloseReason[1000,no reason given]
# Session closed
[注意]
#で始まる行はクライアントの実行環境が生成しており、受信したテキストメッセージなどを意味します。
このユーティリティを改善できますので、どんな機能がご所望か、こちらまでお知らせ下さい。
Gerard Davisonにはこのモジュールの多くの機能に貢献いただきました。どうもありがとうございます!
Gerard Davison's Blog
http://kingsfleet.blogspot.com/

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

原文はこちら。
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

[Coherence] Upgrading to Coherence for C++ 12.1.2 and The "Ambiguous Compilation Error" in Types Derived From AbstractAggregator

原文はこちら。
https://blogs.oracle.com/middlewareplace/entry/upgrading_to_oracle_coherence_for

今週末、Coherence for C++ 3.7.1 APIを使って作成したいくつかの古いC++アプリケーションを数日前にリリースされた最新の12.1.2のAPIに移行し始めました。12.1.2ではCoherenceに対して多くの素敵な変更や機能が追加されています。インストール、WebLogicとの統合、TCMP、Exabus、RESTおよびCoherence*Extendといったような様々な領域で改善がなされていることは言うまでもありません。こうした変更や改善の詳細は以下のリンクからどうぞ。
Oracle Fusion Middleware Documentation
Release Notes for Oracle Coherence
http://docs.oracle.com/middleware/1212/coherence/COHRX/index.html
数時間で旧バージョンから最新バージョンに移行した後、ビルド時に以下のようなコンパイラメッセージが出てびっくりしました。
call of overloaded 'Float64Sum(const coherence::lang::TypedHandle<coherence::util::extractor::ReflectionExtractor &)' is ambiguous
同じコンパイラメッセージを見たことがあるなら…ご心配無用です。簡単かつ明快な解決策があります。このコンパイラエラーが発生したのは、Coherence for C++ APIの12.1.2で、ファクトリメソッドcreate()のオーバーロードバージョンが、coherence::util::aggregator::AbstractAggregatorクラスから派生した型に導入されたからです。

ver 3.7.1までは、AbstractAggregatorオブジェクトのインスタンスを作成するには、coherence::util::ValueExtractorのインスタンスをファクトリメソッドに渡すしかありませんでしたが、12.1.2からはcoherence::lang::String::Viewのインスタンスを渡してインスタンスを作成することもできるようになりました。このオブジェクトには集約された属性の名称が含まれているはずです。裏で自動的に、Coherence for C++ APIがcoherence::util::ValueExtractorを作ってくれます。

今回の場合、以下の部分を
Float64Sum::Handle scoreAggregator = Float64Sum::create(ReflectionExtractor::create("getScore")); 
次のように変更しました。
Float64Sum::Handle scoreAggregator = Float64Sum::create("getScore"); 
これでプロジェクトが再度コンパイル可能になり、GNU Linux G++でもMicrosoft Visual Studioの両方のC++のコンパイラを使うことができるようになりました。

このエントリがコードデバッグの手助けになることを希望します :-)

2013年7月15日

[Java] New Java Tutorials

原文はこちら。
https://blogs.oracle.com/java/entry/new_java_tutorials

Oracle Learning Libraryに3個の新しいチュートリアルが掲載されています。
Oracle Learning Library
http://www.youtube.com/user/OracleLearning/videos
  • 新しいJava EE 7チュートリアルと動画で、WebSocket APIを使ったクライアント-サーバー間のリアルタイム通信を行うアプリケーションの作成方法を紹介しています。
  • 組み込みのJava™ セキュリティ機能を使って、悪意のあるプログラムから保護する方法に関するJava SEチュートリアル
  • Tom McGinnによる、"Securing ADF Applications to Oracle Cloud by Using JDeveloper Webcast"
    https://www.youtube.com/watch?v=AGxALlSlNNA
Oracle Learning Library (OLL) にはJavaテクノロジーの無料オンライン学習コンテンツがたくさんあります。
Oracle Learning Library
http://apex.oracle.com/pls/apex/f?p=44785:2:104726228839648:::2:P2_GROUP_ID:1007
コンテンツは動画、チュートリアル、記事、デモ、特定のタスクを深く学ぶためのステップバイステップの手順や、自己のペースでインタラクティブに学習できるモジュールと多岐にわたります。コンテンツはOracleの開発者だけでなく信頼されたコミュニティメンバーが作っており、新しいコンテンツが日々更新されています。

Oracle Learning Libraryにはたくさんの機能があります。一部をご紹介しましょう。
  • Collections
    OLLコンテンツアイテムや関連するトレーニング、外部リンクを含むコンテンツのグループで、選択してCollectionを他者と共有できるほか、プライベートのCollectionを持つこともできます。
  • My Library
    閲覧したコンテンツをトラッキングしたり、ブックマークを作成したり、フィードバックや作成したレビューを追跡するのに役立つ機能です。
  • OLL-Live:
    Oracleがお届けする無料の1時間のインタラクティブなWebcast。全てのOLLライブWebcastで、Oracleのエキスパートが進行するセッションでOracle製品を使う方法をご紹介します。

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

原文はこちら。
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/

2013年7月12日

[FMW, Security] FMW 12.1.2 released!

原文はこちら。
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) によるキー管理の改善
今後のエントリでこうした機能の詳細をお伝えする予定です。

2013年7月9日

[Java] JCache Marches Onward!

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/jcache_marches_onward

皆さんご存知のように、JCache (JSR 107) は僅差でJava EE 7から落ちてしまいました。JCacheは非常に重要で長らく待望されているAPIであることは多くの方に参加いただいたJava EE 7のアンケートからも明らかです。JCacheが着実に進歩を続け、先ごろPublic Previewがされたことをお伝えでき嬉しく思っています。
Java EE 7 Survey Results!
https://blogs.oracle.com/reza/entry/java_ee_7_survey_results
JSR-000107 JCACHE - Java Temporary Caching API - Public Review
http://download.oracle.com/otndocs/jcp/jcache-2_9-pr-spec/index.html
レビュー期間は8月5日までですので、是非コメントをお願いします。コメントは直接 jsr107@googlegroups.com (訳注:@を半角にしてください)に送っていただいても結構ですし、GitHubに残してもらっても結構です。
jsr107/jsr107spec (GitHub)
https://github.com/jsr107/jsr107spec/issues
JCacheは、現在のペースだと、Java EE 8に十分先行しており、Java EE 8に含まれる対象の有望な候補です。jarを入れるとJava EE 6/7でJCacheを利用できるはずです。

2013年7月3日

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

原文はこちら。
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年以上の経験を有しています。