2016年4月27日

[Solaris, Cloud] Oracle Solaris Now Available in the Oracle Cloud

原文はこちら。
https://blogs.oracle.com/solaris/entry/oracle_solaris_in_the_oracle

オンデマンドの世界で生きている現在、オンプレミスにするかパブリッククラウドにするかに関わらず、お客様にはビジネス上重要なアプリケーションのホスト場所やホスト方法により多くの選択肢があります。この前例のない柔軟性は、つまるところコンピューティング環境作成までに何時間、何週間、何ヶ月も待つ時代は終わったことを意味します。IT予算の振り分けは、CAPEXや低い利用状況の設備に対する支払いから、オンデマンドOPEX、つまり利用したものに対する支払いへと移っています。そのため、クラウドを利用可能なクラウド・ネイティブ・アプリケーションの次の波とともに貴社のビジネスを変化させることに貢献するか、それともこれまでのエンタープライズアプリケーションに依拠するかは関係なく、セキュアで、信頼性の高い、エンタープライズで利用可能なクラウド環境が必要になるでしょう。
Oracleはオンプレミスソリューションの幅広いオファリングと統合されたクラウドオファリングを持っているがゆえに、ユニークなポジショニングをされています。Oracle Solarisは、ビジネスにとって重要なアプリケーションをホストするための、セキュアでミッションクリティカルなプラットフォームを提供するその戦略の重要な基盤の一つです。
Oracle Solaris
http://oracle.com/solaris
ビジネスをどのように実行したいのか、という問いに対し、最も完全な選択肢を提供します。そして、その選択肢を本日拡大します。
Oracle Solaris がOracle Cloudで利用できるようになったことを発表いたします。
お客様はOracle Compute Cloud Serviceを使い、オンデマンドでOracle Solaris VMを作成することができます。その際追加コストは必要ありません。
Oracle Compute Cloud Service
https://cloud.oracle.com/ja_JP/compute(日本語)
https://cloud.oracle.com/en_US/compute(英語)
このサービスはinfrastructure as a service (IaaS) であり、セルフサービス・ポータルを使って、柔軟かつスケーラブルなコンピューティング環境、ブロックストレージ、ネットワーキング・サービスを提供します。共有マルチテナントインフラストラクチャであろうと、専用コンピューティング環境であろうと、Oracle Cloudはみなさまのニーズに合う幅広い価格オプションでたくさんの選択肢を提供しています。
Compute Cloud Pricing
https://cloud.oracle.com/ja_JP/compute?tabID=1385152358039(日本語)
https://cloud.oracle.com/en_US/compute?tabID=1406491857419 (英語)
Oracle Solaris環境をOracle Cloud上にオンデマンドで非常に簡単に作成できることを、以下の動画で確認ください。

2016年4月26日

[JavaScript] Updated Tutorial: "Getting Started with Oracle JET Applications"

原文はこちら。
https://blogs.oracle.com/geertjan/entry/updated_tutorial_getting_started_with

Oracle JET Supportプラグイン ver. 0.91のリリースに伴い、関連するチュートリアルのアップデートが必要になりました。そのため、Oracle JETワークショップを開催しているNetBeans Day India期間中、チュートリアルにいくつか問題点がありましたが、本日すべて修正しました。
Getting Started with Oracle JET Applications
https://netbeans.org/kb/docs/webclient/ojet-gettingstarted.html

このチュートリアルは非常にシンプルになっており、多くの不具合が修正されています。Oracle JETに初めて触るという方であれば、こちらのチュートリアルを試してください。
Getting Started with Oracle JET Applications
https://netbeans.org/kb/docs/webclient/ojet-gettingstarted.html
(訳注)
Oracle JET
http://www.oracle.com/webfolder/technetwork/jet/index.html
Oracle JET CookBook
http://www.oracle.com/webfolder/technetwork/jet/uiComponents-formControls.html

2016年4月25日

[JavaScript, Java] JavaScriptオブジェクトとJavaオブジェクトを判断する

Nashornを使っていると、Java ObjectとJavaScript Objectが混在するため、どちらがどちらなのか判断したくなることがありますが、そんな時のため、Java.isJavaObject(obj)という関数があります。
この関数を使うと、Java Objectの場合はtrue、JavaScript Objectの場合はfalseを返してくれます。
ただし、nullの場合はJava Objectであってもfalseという判断をしてしまうのでご注意ください(ま、仕方ないですね)。
以下は試した例です。
var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
print(Java.isJavaObject(data)); // false

var stdout = java.lang.System.out;
print(Java.isJavaObject(stdout)); // true

var ObjectType = Java.type("java.lang.Object");
print(Java.isJavaObject(ObjectType)); // true

var _null = null;
print(Java.isJavaObject(_null)); // false

var stdout = null;
print(Java.isJavaObject(stdout)); // false

[Java, JavaScript] Extracting a single .class file from java9 platform jimage modules file

原文はこちら。
https://blogs.oracle.com/sundararajan/entry/extracting_a_single_class_file

JavaのFile System APIをNashorn JavaScriptから利用して、Java 9プラットフォームのjimageモジュールファイルから、一つの.classファイルを抽出することができます。
FileSystem (Java Platform SE 8)
https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileSystem.html
Nashorn - OpenJDK Wiki
https://wiki.openjdk.java.net/display/Nashorn/Main
JEP 220: Modular Run-Time Images
http://openjdk.java.net/jeps/220
以下のシンプルなNashornスクリプトを使って、指定されたクラス名の.classを抽出します。

File: jextract.js

// This script extracts .class for a single class
// from the platform jimage ($JDK9/lib/modules) file.
// Specify module/class like java.base/java.util.Vector

if (arguments.length == 0) {
    print("Usage: jjs jextract -- <module>/<classname>")
    exit(1)
}

// Java types used from file system and net API
var FileSystems = Java.type("java.nio.file.FileSystems")
var Files = Java.type("java.nio.file.Files")
var URI = Java.type("java.net.URI")

var name = arguments[0]
var moduleName = name.substring(0, name.indexOf('/'))
var className = name.substring(name.indexOf('/') + 1)
var pathName = "/modules/" + moduleName + "/" +
        className.replace(/\./g, '/') + ".class"

// get jrt fs file system instance
var fs = FileSystems.getFileSystem(URI.create("jrt:/"))

// read .class content
var content = Files.readAllBytes(fs.getPath(pathName))

// write to a file in current dir (using default fs)
// simple class name
var simpleName = className.substring(className.lastIndexOf('.') + 1)
Files.write(FileSystems.default.getPath(simpleName + ".class"), content)
上記スクリプトを使って、以下のように実行してみましょう。一つ目はVector.class、二つ目はScriptObjectMirror.classをファイルに抽出することができます。
$ jjs jextract.js -- java.base/java.util.Vector
$ jjs jextract.js -- jdk.scripting.nashorn/jdk.nashorn.api.scripting.ScriptObjectMirror

2016年4月20日

[Java, Security] New Release JDK 8u91 and JDK 8u92

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

2個のJava 8のアップデート、JDK 8u91と8u92が利用可能になっています。重要なセキュリティ修正が含まれているため、Java SEをご利用のほとんどのお客様に対し、最新のJava 8u91 CPU (Critical Patch Update) へのアップグレードをOracleは強く推奨します。Java SE 8u92はPatch Set Updateで、Java 8u91に追加機能が含まれています。
Critical Patch Updates, Security Alerts and Third Party Bulletin
http://www.oracle.com/technetwork/topics/security/alerts-086861.html
Oracle Critical Patch Update Advisory - April 2016
http://www.oracle.com/technetwork/security-advisory/cpuapr2016v3-2985753.html
Oracle Java SE Risk Matrix
http://www.oracle.com/technetwork/topics/security/cpuapr2016-2881694.html#AppendixJAVA
最新のJDKリリースは以下のURLからダウンロードできます。
Java SE Downloads
http://www.oracle.com/technetwork/java/javase/downloads/index.html
これらのリリースに含まれている新機能やバグ修正の情報は、以下のリリースノートをご覧下さい。セキュリティベースラインも8u91に変更されています。
JDK 8u91 Release Notes
http://www.oracle.com/technetwork/java/javase/8u-relnotes-2225394.html
JDK 8u92 Release Notes
http://www.oracle.com/technetwork/java/javase/8u-relnotes-2225394.html
CPUとPSUの詳細説明は以下のリンクをご覧下さい。
Java CPU and PSU Releases Explained
http://www.oracle.com/technetwork/java/javase/cpu-psu-explained-2331472.html 
(訳注)
過去のエントリですが、参考にどうぞ。
[Java] Java SE 8u65とJava SE 8u66の違い
http://orablogs-jp.blogspot.jp/2015/10/java-se-8u65-vs-java-se-8u66.html

2016年4月18日

[SOA/BPM] 12c XSLT Editor – XSLT View - Refactoring

原文はこちら。
https://blogs.oracle.com/integration/entry/12c_xslt_editor_xslt_view1

XSLT Viewは2種類のグラフィカルビューのうちの一つで、新しくなった12cのXSLTエディタで提供されています。このエントリでは、再利用可能なmatched template(テンプレート・ルール)を作成するための、XSLTエディタのXSLT Viewでサポートされているリファクタリング機能についてご紹介します。
12cのXSLTエディタのグラフィカル・ビューに関する概要は、以下のエントリをご覧ください。
12c XSLT Editor Overview
https://blogs.oracle.com/integration/entry/12c_xslt_editor_overview
http://orablogs-jp.blogspot.jp/2016/04/12c-xslt-editor-overview.html
このエントリのために、Map Viewの説明で使ったサンプルを使います(Map Viewの説明エントリは以下のリンクからどうぞ)。
12c XSLT Editor – Map View Overview
https://blogs.oracle.com/integration/entry/12c_xslt_editor_map_view
http://orablogs-jp.blogspot.jp/2016/04/12c-xslt-editor-map-view-overview.html
このサンプルでは、Purchase Order(発注書)からInvoice(送り状)へのマッピングをXSLTエディタのMap Viewを使って作成しました。

ソース側のShipToノード配下にはるAddressをターゲット側のShippedToノード配下のAddressにマッピングしました。BillTo配下のAddressもマッピングする必要があります。BillToとShipToのaddressのaddress構造は同じなので、address情報の汎用的なマッピングを含む一つのテンプレートを作成し、テンプレートをBillToとShipTo配下のaddressのマッピングに再利用するのは理に適っています。
既存のShipToからShippedToへのマッピングをリファクタリングし、別のルール・テンプレートを作成することでこれを実現します。こうすることで、ShippedToとBilledToのaddressを出力XMLに設定が必要な箇所で、xsl:apply-templatesステートメントを使うテンプレートを呼び出すことができます。
まず、XSLTビューに移動しましょう。エディタのツールバー右側にあるXSLTボタンをクリックし、XSLTビューに移動します。

XSLT ViewでXSLT(右上方)の分割ビューとターゲットスキーマツリー(右下方)を表示されています。
XSLTのShippedToノードにあるマッピングを複製し、リファクタリングして、別のテンプレートに配置する必要があります。ShippedToエリアをXSLTパネルで開くと、以下のようになります。

XSLTパネルのShippedTo/Addressノードを右クリックし、[テンプレートに作成]をクリックします。

新しいテンプレート・ルール・ダイアログが、新規テンプレート用に提示された一致文字列を伴って表示されます。ダイアログでOKを選択すると、リファクタリングが始まります。

新しく作成されたルール・テンプレートには、Addressノード用の元のマッピングが含まれています。xsl:apply-templatesステートメントはXSLT中のAddressノードの元の位置に挿入されます。出力XMLのこの位置にAddress出力ノードが作成されるよう、このxsl:apply-templates ステートメントが、新しいルール・テンプレートにXSLTのこの位置で実行させます。
ソース・ツリーのShipTo/Addressノードは紫のバブルで強調表示されます。これは新規テンプレートのコンテキストノードである、つまり新規テンプレートの相対XPath式がこのコンテキストノードに関連することを示しています。
このルール・テンプレートを再利用して、BillToアドレス情報をマッピングしましょう。まず、ルール・テンプレートの一致文字列を両エリアで使えるよう汎用化します。新しいxsl:templateノードをダブル・クリックすると、xsl:templateステートメントの属性を変更できるダイアログが現れます。

属性情報をプロパティウィンドウで編集することもできます。[OK]をクリックすると、テンプレート中の一致文字列が/ns0:PurchaseOrder/ShipTo/AddressからAddressに変わります。これはAddressという名前のすべてのノードに一致します。

一致文字列がAddressで、ソースのAddressの任意のノードに一致する可能性があったとしても、テンプレートの実行はxsl:apply-templatesのために定義された、選択された式に制限されます。一致文字列がAddressで、xsl:apply-templatesで選択されたものが、/ns0:PurchaseOrder/ShipTo/Addressである場合、BilledToエリアのためのAddress テンプレート・ルールを実行するため、出力側のBilledToノードの下に別のxsl:apply-templatesステートメントを追加する必要があります。
BilledToノードをXSLTに追加するため、その親ノード(tns:Invoice)を右クリックし、[スキーマから子を追加]>BilledToを選択します。

BilledToノードをすべての必要とする子とともに追加します。

ShippedToノードと同じようにxsl:apply-templates 要素をAddressノードの代わりに置き換えます。Addressノードを削除し、xsl:apply-templates要素を選択し、BilledTo要素の子として追加します。

BillTo/Address フィールドを xsl:apply-templates ステートメントにマッピングして、テンプレートを呼ぶようにします。同様に、NameフィールドをShppedToにマッピングします。
Addressテンプレートをクリックすると、テンプレート用に2個のコンテキストノードが紐付いています。

Addressテンプレート内で使われている相対XPath式に着目してください。CityというXPath式を選択しています。Cityは2個のAdressコンテキストノードに関連しています。

2016年4月12日

[WLS] New WebLogic Server Running on Docker in Multi-Host Environments

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

Oracle WebLogic Server 12.2.1はDocker 1.9コンテナ上での動作を保証しています。この動作保証の一環として、複数の物理ホストにまたがるOracle WebLogic Server 12.2.1クラスタを構成することができます。マルチホストで動作するコンテナを、Dockerfilesを使ってビルドされた既存のOracle WebLogic 12.2.1インストールイメージの拡張としてビルドします。ドメインイメージはDockerfilesを使ってビルドします。既存のOracle Linuxイメージは以下で公開されているOracle Linux Imagesを使います。この作業をするにあたり、サンプルとしてGitHubでスクリプトを公開しています。
インストールイメージ
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/dockerfiles/12.2.1
ドメインイメージ
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/1221-domain
Oracle Linuxイメージ
https://registry.hub.docker.com/_/oraclelinux/
Oracle WebLogic on Multihost Network Docker
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/1221-multihost
下表はDocker 1.9でのWebLogic Server 12.2.1のCertification状況を示したものです。Dockerイメージを作成する上では、Oracle WebLogic Server、JDK、LinuxそしてDockerバージョンの組合せを利用することができます。
WLSバージョン JDKバージョン Host OS Kernel Dockerバージョン
12.2.1 8 Oracle Linux 6 UEK 4 1.9
Oracle Linux 7
事前に、その他のDockerバージョンでのOracle WebLogic Server 12.1.3とOracle WebLogic Server 12.2.1のcertificationに関する詳細を記載した以下のエントリを一読ください。
Oracle WebLogic Server 12.2.1 Running on Docker Containers
https://blogs.oracle.com/WebLogicServer/entry/oracle_weblogic_server_12_21
http://orablogs-jp.blogspot.jp/2015/11/oracle-weblogic-server-1221-running-on.html 
Kernel 4以後で動作しDocker ContainerをサポートするLinuxホストOSで動作する、動作保証済みのDocker ContainerでOracle WebLogic Serverはサポートされます。詳細はサポート文書をご覧ください。
 Support for Oracle WebLogic Server Running in Docker Containers on Non-Certified Linux Host Operating Systems (Doc ID 2017945.1)
https://support.oracle.com/rs?type=doc&id=2017945.1 
現時点のOracle WebLogic Serverがサポート対象とする構成に関する詳細は、以下のCertificationページをご覧ください。
Supported Virtualization and Partitioning Technologies for Oracle Fusion Middleware
http://www.oracle.com/technetwork/middleware/ias/oracleas-supported-virtualization-089265.html
GitHubにUpしたマルチホスト環境をサポートするスクリプトは、Docker Networking、Docker Swarm、Docker Composeの最新バージョンをベースにしています。Docker MachineはDockerオーバーレイネットワークによって構成されたDocker Swarmに参加します。WebLogic Serverの管理サーバコンテナだけでなく、管理対象サーバコンテナも、Swarm内の異なるVMで動作し、互いに通信することができます。

我々が提供しているDockerfilesとスクリプトを使うと、単一ホストOSやVM、もしくは複数のホストOSやVMで動作する開発および本番環境を含む、クラスタ、非クラスタのOracle WebLogic Serverのドメイン構成を作成することができます。作成したドメイン構成で実行中の各サーバーはDockerコンテナで実行され、他のサーバ と必要に応じて通信することが可能です。これらのコンテナがWebLogicクラスタ内で実行される場合、メモリセッションレプリケーション。HTTP ロードバランシング、サーバ移行などのWebLogicクラスタのすべての高可用性機能がサポートされます。

以下のYouTubeの動画で、WebLogic Serverのドメインやクラスタをマルチホスト環境で作成する方法をご覧ください。Dockerコンテナ上でWebLogic Serverの異なる構成の実行を試されることを期待しています。みなさまからのフィードバックを楽しみにしております。

(訳注)
原文はリンクが壊れているので、該当する動画のリンクを掲載しています。

[misc.] Resigtration and Call for Proposals are now Open!

2016年9月18日から22日まで、San Franciscoで開催されるJavaOne、OpenWorldのCall For Proposals、そして参加登録がスタートしました。昨年よりは暖かい時期の開催です。お時間、懐具合(出張で参加できるならなおGood!)に合わせて是非ご参加を検討ください。
JavaOne
https://www.oracle.com/javaone
Oracle OpenWorld
https://www.oracle.com/openworld 
Call for Proposalsの締め切りは、2016年5月9日23:59(PDT)です。スピーカーに選ばれた場合には、参加費用は免除されますが、交通費は出ませんので、そこだけはご勘弁を。
あと、昨年のJavaOne報告会で @skrb さんがおっしゃっていた、
「Call for Proposalsを締め切りぎりぎりに出したら採用される確率はぐんと減る(ほぼ確実に落ちる)」
というTipsは肝に銘じてくださいませ。
また、お早めに参加登録されるとお財布にも優しくなっております。例えば、5月1日(PDT)までに登録されると、JavaOneの場合、Super Saverということで定価より600USDお安くなっております。

# 昨年は、一昨年のJavaOneである個数以上のセッションアンケートを回答していれば、さらにディスカウントがあったのですが、今年はどうなのかわかりません。

日本からたくさんの方がスピーカーとして参加されることを願っております。

2016年4月11日

[SOA/BPM] 12c XSLT Editor – XSLT View Overview

原文はこちら。
https://blogs.oracle.com/integration/entry/12c_xslt_editor_xslt_view

XLST Viewは新しい12c XSLTエディタが提供する2つのグラフィカルビューの一つです。
12c XSLTエディタのグラフィカルビューに関する概要は、以下のリンクをご覧ください。
12c XSLT Editor Overview
https://blogs.oracle.com/integration/entry/12c_xslt_editor_overview
http://orablogs-jp.blogspot.jp/2016/04/12c-xslt-editor-overview.html
任意のXSLTファイルをグラフィカルに編集可能なXSLT Viewは、XSLT開発者でXSLTの知識があり、XSLTソースコードをテキストエディタで書いたことがある方向けです。
XSLT Viewはグラフィカルにソースを閲覧できるので、テキストエディタでXSLTソースを編集するよりも多くのメリットがあります。そのメリットの多くは上記のXSLT Editor Overviewのエントリに記載しています。これらのメリットを、サンプルを使って確認するのがよいと思いますので、このエントリでは、アイデンティティテンプレートを使って複雑なXSLTマップを作成することにします。

今回の例では、PurchaseOrder to PurchaseOrderのマップを作成します。


このマッピングの目的は、ソース・ツリーからターゲット・ツリーへコピーすること、そしてコピー中にShipTo CustomerNameをBillTo Addressにコピーして、ShipTo とBillTo 要素で同じCustomerNameを使うようにします。
同じことは、明示的に各ノードをマッピングすることでもできますが、identityテンプレートを使ってソースをコピーすることもできます。identityテンプレートは入力ドキュメントを出力ドキュメントコピーする際によく使われますが、コピー中に変更する際にも使われます。実行時にソースからの入力がソーススキーマで定義された要素の個数に比べて少ない場合、スキーマの各ノードに対して明示的にXSLTステートメントを作成する場合と比較して、identityテンプレートを使ったツリーのコピーのほうが圧倒的に高速です。

ツールバーの右上にある[XSLT]ボタンをクリックし、XSLTビューに遷移します。右上方に現在編集中の実際のXSLTステートメントが表示されています。下方にはターゲットスキーマが表示されています。

現時点で持っている唯一のXSLTはxsl:templateステートメントと、出力側のPurchaseOrderドキュメントのルートノードのためのリテラル要素であることがわかります。

xsl:templateを選択し、stylesheetノードだけ残して削除することもできます。

コンポーネント・ウインドウを開き、XSLTテンプレートやMiscellaneousテンプレートを選択し、Identityテンプレートをxsl:stylesheetノードの左側にドラッグ&ドロップすることができます。緑色の強調表示はテンプレートをstylesheetノードの子要素として挿入することができることを示しています(エディタの背後にはXSLTスキーマドキュメントがあり、このXSLTスキーマドキュメントのおかげで、利用者がXSLTスキーマ定義に従って、XSLTステートメントを適切な位置に配置することができます。エディタはXMLスキーマに従って、テンプレートをどこに配置できるかを知っているため、強調表示することができます)。

ドラッグ&ドロップの後、xsl:stylesheet ノードの下に追加した新しいテンプレートノードを展開します。


このタイミングでこのXSLTを実行すると、XSLTの3行がソースドキュメント全体を出力側にコピーします。XSLTでリテラルの出力ノードが存在しないことに注意してください。出力ノードはxsl:copyステートメントが作成していますが、これは再帰的に入力ドキュメントの各ノードを出力側にコピーする指示を再帰的に呼び出しています。

また、ソースとXSLTツリーに見られる紫色のバブルを使った強調表示に注意してください。ただ、現時点ではこのバブルが存在することに注意してください。内容は別のテンプレートをXSLTに追加した後に説明します。

では、別のテンプレートを作成し、ShipToデータを出力側のXMLのBillToセクションにコピーしましょう。エディタを使ってmatched templateを新規作成する方法はたくさんありますが、(別のエントリで書きたいので)ここではその中の一つの方法をご紹介します。
入力側のBillToノードを処理するテンプレートを作成したいので、ソースツリーのBillToノードを右クリックし、新規テンプレート・ルール(matched template)を選択します。この操作の結果ダイアログが現れます。このダイアログで、テンプレートのための一致文字列を定義し、作成したいターゲットスキーマから任意のノードを選択することができます。

ソースノードからテンプレート作成時に、選択されたソース・ノードに基づいて、一致する文字列を作成する時にエディタが推論します。それゆえ、私たちがやるべきことは、新規テンプレート内で作成されるようBillToノード(出力)を選択して、OKをクリックするだけでよいのです。


ここで、ツリーの紫色のバブルは、一致したテンプレートに対応するコンテキストノードを示しています。

簡単に言うと、コンテキストノードという言葉をご存じない場合、XSLTエディタはソースドキュメントのルートから着信XMLドキュメントの処理を開始します。デフォルトテンプレートを使ってソースツリーをルートから移動します。ソースツリーを通過すると、現在のノードに一致するXSLTソースでユーザーが作成したテンプレートを探します。1個以上のテンプレートが現在の処理中のノードに一致する場合、プロセッサはそのノードにとって最も一致するテンプレートを選択するロジックを有しています。その後、当該ノードのためのテンプレートを実行します。この結果、ノードは特定のテンプレートに対するコンテキストノードです。
XPath式を記述する場合、XPath式を実行する際のコンテキストノードを知ることは非常に重要です。それは相対XPath式はコンテキストノードを基準にして評価されるためです。軸もまたコンテキストノードに関連付けられています。

上記のXSLTには2個のテンプレートがあります。先ほど追加したBillToテンプレートをクリックすると、ソースのBillToノードが強調表示されることがわかります。これがそのテンプレートのコンテキストノードです。テンプレートで作成された相対PathのXPath式が、入力のBillToノード(コンテキストノード)に関連していることがわかります。
元のテンプレート(下)をクリックすると、BillToソースノードでは紫のバブルが現れないことに注意してください。これはつまり、プロセッサがBillToソースノードに最もマッチするのは2番目のテンプレートであって、1個目のテンプレートでは処理しない、ということを示しています。

XSLTはxsl:copyステートメントを使って(BillToノードを除いて)入力ツリー全体をコピーします。BillToノードを処理すると、プロセッサは2個目のテンプレートを呼び出し、テンプレート内に配置するように選択するものをすべて書き出します。
BillToの情報を新しいテンプレートにコピーしたいのですが、ShipTo要素のCustomerNameを新たなBillTo/CustomerNameとして利用します。このやり方には様々ありますが、自動マップを使って、BillToからBillToへドラッグ&ドロップすることで、自動的に必要なノードを追加することができます。ターゲットスキーマパネル(下図のxslt)からノードを追加することもできますし、Add Child(子を追加)を使ってノードを手作業で追加することもできます。
その他にも、テンプレートのBillToノードを右クリックし、Add Children From Schema(スキーマから子を追加)を選択して、ターゲットノードにノードを追加することができます。

All Elements(すべての要素)を選択し、BillToノードの下に追加します。ソースのBillTo要素をドラッグ&ドロップして、下図のようにテンプレートに相対PathのXPath式を作成します。

すると、CustomerNameをShipToからBillToへドラッグ&ドロップすることができますので、これにより、絶対PathのXPath式を作成します(下図)。ここでの基本的なルールは以下の通りです。
  • コンテキストノードの下のコンテキスト領域(紫の領域)からテンプレートへドラッグ&ドロップすると、相対Pathを取得する
  • コンテキスト領域の外部からテンプレートにドラッグ&ドロップすると、絶対Pathを取得する

XSLT Viewにはほかにもまだまだ機能があります。次回のエントリでそうした機能をご紹介したいと思います。

2016年4月10日

[Linux] Announcing New Features for Ksplice

原文はこちら。
https://blogs.oracle.com/linux/entry/ksplice_userspace_support_expands_to

Kspliceを使った、オフラインでのユーザー空間へのパッチ適用がサポートされるようになりました。
ご自身のyumリポジトリをもってらっしゃるお客様にとって、もしくは外部のアップデートチャネルへのアクセスを制限されているお客様にとって、Kspliceのユーザー空間へのパッチ適用を既存のオフラインKspliceパッチ適用手順に統合することができるようになりました。これは、オンライン・パッチ機能を持つ当初のサポートを拡大し、重要な更新プログラムを管理するお客様に対して最大の柔軟性と選択肢を提供するものです。
Kspliceをユーザー空間のために使いたかったけれどもオンラインサービスゆえに制限されていた場合には、これからは全てのサービス、機能をフルに利用できるようになります。
ぜひフィードバックをお寄せ下さい。

2016年4月7日

[SOA/BPM] 12c XSLT Editor – Map View Overview

原文はこちら。
https://blogs.oracle.com/integration/entry/12c_xslt_editor_map_view

Map Viewは12c XSLT Editorで提供される2個あるグラフィカルビューのうちのひとつです。
12c XSLT Editorのグラフィカルビューの簡単な概要は以下のリンクをご覧ください。
12c XSLT Editor Overview
https://blogs.oracle.com/integration/entry/12c_xslt_editor_overview
http://orablogs-jp.blogspot.jp/2016/04/12c-xslt-editor-overview.html
Map Viewは、XSLTを作成するための典型的なプル型マッピングツールです。11gのXLST Editorを使ったことがあれば、よくご存知のことでしょう。
ソースとターゲットのスキーマ要素をXSLTへの入力、出力XMLドキュメントとして選択すると、デフォルトではエディタがMap Viewで開きます(プリファレンスで挙動を変更することができます)。このビューでは、ソーススキーマドキュメントを左側に、ターゲットスキーマドキュメントを右側に表示します。

利用者はソース要素からターゲット要素へドラッグ&ドロップすることでマッピングを作成することができます。
下図は2個のシンプルなマッピングの例です。

要素や属性をターゲットツリーにマッピングすると、ターゲット要素をXSLTソースに作成します。エディタのパネルの下部にある、[ソース]タブをクリックすると、XSLTのソースを直接閲覧し、編集することができます。
上図のマッピングのXSLTソースは以下のようです。
<xsl:template match="/">
 <tns:Invoice>
  <Description>
   <xsl:value-of select="/ns0:PurchaseOrder/ns0:Comment"/>
  </Description>
  <ShippedTo>
   <Address country="{/ns0:PurchaseOrder/ShipTo/Address/@country}"/>
  </ShippedTo>
 </tns:Invoice>
</xsl:template>
ターゲットツリーのマップ済み要素を黒字で、定義済みターゲットスキーマドキュメントの未マップの要素をグレーの斜体字で表示します。未マップの要素は定義済みのターゲットスキーマドキュメントの一部で、マップ済み要素はターゲットスキーマドキュメントならびにXSLTソースで定義されています。これを確認するには、XSLTソースをシンプルなマッピングを表示する上図と比べてください。
上図の各マッピングの線は、入力/ソースXMLドキュメントのノードを参照する単純なXPath式を示します。XPath関数や演算子を使って様々な方法で複雑なXPath式を作成することもできます。複雑なXPath式は中央のキャンバスパネルにアイコンとして現れます。

下図は複雑なXPath式をマッピングに加えた例です。

各式は上図のようにツールチップで見ることができます。フルテキスト表示として式を閲覧、編集することもできますし、解析済みの式としてができます。後者の場合、各関数パラメータを個別に編集することができます。
例えば、上図ではconcat関数を使っています。マウスを載せたconcatアイコンをダブルクリックすると、パース済み形式で下図のように表示されます。

アイコンを含むフォルダ(アイコンを囲む紫色の領域)をダブルクリックすると、XPath式をフルテキスト形式で表示します。

[長いテキストの編集]ボタンをクリックすると、非常に長いXPath式を編集することもできます。
プロパティウィンドウをを表示すると、特定の関数アイコンを選択したり、アイコンを含む外部フォルダを選択したりして、同様の方法でプロパティウィンドウ内で編集することができますし、コンポーネントウィンドウからXPath式フォルダへ関数をドラッグ&ドロップすると、XPath式をグラフィカルに編集することもできます。

XPath式からターゲットノードへ線をドラッグ&ドロップすることで、式の出力を特定のターゲットノードに割り当てることができます。同様に、線をアイコンにドラッグ&ドロップし、これらを特定の関数パラメータにドロップすることで、ソースノードを示すシンプルなXPath式を作成することができます。

上図はconcat関数の第3パラメータへの入力を設定しています。
以下のようなXSLT命令を作成することができます。
  • xsl:for-each
  • xsl:if
  • xsl:choose/when/otherwise
  • xsl:param
  • xsl:variable

Map Viewでは1個のxsl:template命令のみ利用可能です。これは上図にあるように、 match=”/” という属性を持つルートテンプレート命令です。複数のテンプレートを持つXSLTマップはXLST Viewで編集することができます。
下のマップはこれらのXSLTステートメントを挿入したものです。Purchase Order内の品目をループし、遅延している(ShipDateがない)すべての品目に割引を適用しています。


次回のエントリは、XSLT Viewの利用について説明する予定です。

2016年4月6日

[SOA/BPM] 12c XSLT Editor Overview

原文はこちら。
https://blogs.oracle.com/integration/entry/12c_xslt_editor_overview

JDeveloper用SOAおよびService Busのツールプラグインで提供するXSLT Editorは、12cで新しくなりました。このエントリではこの新しいエディタをご紹介します。
11gのXSLTエディタを使ったことがあれば、この新しいエディタはよくご存知のことと思います。11gのエディタから再利用したコードをつかっているため、全体的なルック&フィールには同じままですが、エディタのコア部分はより大きなスキーマを使ってより複雑なXSLTをサポートするように書き直されつつ、グラフィカルに表示する機能は引き続き提供しています。これを実現するため、新しいエディタではDesign Viewで2個のグラフィカルビューを提供しています。
  • Map View - すべてのターゲットツリーノード(マッピングの有無にかかわらず)を表示する
  • XSLT View - マッピング済みターゲットツリーノードを含む、現存するXSLTステートメントを表示する 
エディタのツールバーがビューの右上にあるので、MapもしくはXSLTを選択して切り替えることができます。
Map Viewは11gのXSLTエディタと非常に機能が似ていますが、このビューでは、シンプルにドラッグ&ドロップでマッピングしたり、簡単なXSLTステートメント(xsl:for-each、xsl:if、xsl:choose/whenなど)を使ったりすることができます。11gのXSLTエディタのように、ソースツリーからターゲットツリーにドラッグ&ドロップでマッピングを作成し、中央のパネルでXPathステートメントを追加することができます。


XSLT Viewは12cで初めて登場しました。基本的に、XSLTのソースコードをグラフィカル表示するビューですが、XSLTを知っているが、エディタに対し、XSLTでするべきものは何でもするための柔軟性を持ちつつ、スキーマ情報を提供させたいと思っているユーザーを対象にしています。

このビューでは、ソースビューに現れるXSLTステートメントを表示しますが、すべてのXPath式を作成したり、グラフィカルに表示したりする機能が加わっています。マッチ済みテンプレート(テンプレートルール)、名前付きテンプレートやすべてのXSLT 1.0ステートメントといったより高度なXSLTコンストラクトもサポートしています。

直接XSLTソースを編集するのに比べ、このビューで高度なXSLTを編集することの明確な利点は以下の通りです。
  • XSLT Viewはcontext-nodeを認識します(context nodeという言葉をご存知ない場合は、将来のエントリでこの言葉の意味を説明する予定にしています。今の段階では、context nodeを知ることは、XPathステートメントの書き方を知ることの中核です)。
Context-node awareとは、エディタの見地からすると、次のような意味を持ちます。
  • 複数のテンプレート・ルールを使ってXSLTファイルを編集している場合、ユーザーがソースから特定のテンプレートにドラッグ&ドロップすると、エディタが各テンプレートのコンテキスト・ノードを決定し、自動的に正しい相対XPath式を作成することができます。
  • 逆に、エディタはテンプレートのコンテキストノードに関する情報を必要とするマッピングの結果を表示することができます。
  • XSLTでテンプレートを選択することで、任意のテンプレートのコンテキストノードをソースツリーで見つけることができるので、コンテキストノードをソースツリーで強調表示します。
  • XPath式を編集しながら、ユーザーはXPath編集中に参照するためのコンテキストノードとその子を提供するミニツリーへのアクセスができます。
下図ではアイデンティティ・テンプレートを利用していますが、選択されたテンプレートのコンテキスト・ノードが、ソースツリーでバブルハイライトされています。

  • XSLT Viewでは現在のマッピングにおけるXSLTステートメントとノードのみを表示します。これはターゲット側の多くのノードがマップされない大きなスキーマを取り扱っている場合にはメリットでしょう。マップされていないターゲットノードが明示的に現れなくても、簡単にターゲットノードを追加挿入したり、スキーマからノードを生成するにはいくつかの方法があります。これは将来のエントリで説明する予定です。
  • XSLT Viewではスキーマの利用の有無に関係なく、自由形式のXSLT編集をサポートします。XSLT Viewでは以下のことが実現できます。
    • すべてのXSLT 1.0ステートメントを、任意の所望の方法で挿入することができます。追加すると、追加されたXSLT要素の属性値入力が要求されます。
      • 選択したノードの子として
      • 選択されたノードの親として
      • 選択したノードの上または下の兄弟として
    • ターゲットスキーマに含まれない要素や属性を作成できます。
    • 名前付きテンプレートを編集できます(他のXSLTファイルへインポートすることを目的として、名前付きテンプレートがXSLTファイルに含まれていることがあります。結果的にソースや定義されたターゲットスキーマを必要としないことがあります)
    • ツリー内でドラッグ&ドロップすることで、簡単にステートメントの並べ替えをすることができます。
将来のエントリでこれらのグラフィカルビューそれぞれの機能を詳細に紹介します。

[Cloud] On-Premises Integration Cloud Service

Oracle Integration Cloud Service (以下、ICS) は、Cloud to Cloud、Cloud to On-Premise、On-Premise to Cloud のシステム連携を可能にする、PaaSとして提供されるクラウドサービスです。
Oracle Integration Cloud Service (ICS)
https://cloud.oracle.com/ja_JP/integration 
このサービスを契約すると、On-Premise to On-Premiseの連携を可能にするコンポーネントが使えます。それがOn-Premises Integration Cloud Serviceです(長いので、OnP ICSとします)。
ダウンロードするには、[エージェント]をクリックし、[エージェント・インストーラのダウンロード]をクリックして、Execution Agent(実行エージェント)をクリックします。Connectivity Agent(接続性エージェント)はCloud to On-Premiseのためのエージェントですので、お間違えないよう。


インストール手順などは以下のドキュメントに記載があります。
Oracle® Cloud
Using Oracle Integration Cloud Service
Release 16.2
Using On-Premises Integration Cloud Service
https://docs.oracle.com/cloud/latest/intcs_gs/ICSUG/GUID-28DED387-A06E-4C98-8E10-15F12038CA54.htm#ICSUG-GUID-28DED387-A06E-4C98-8E10-15F12038CA54
インストール時にサブスクリプションのチェックがありますので、事前に情報を手元に用意しておくことをおすすめします。

インストールしてみるとわかることですが、このOnP ICSの構成にあたってはChefを使っており、JDKやWebLogic Server、ICS、Patchなどをダウンロードしてrecipeに従って構築していきます。ダウンロードに失敗するようであれば、事前にインストールに必要なバイナリをダウンロードしておき、所定のディレクトリに配置しておけば、ダウンロードのステップを省略することができます。インストールが完了すると、ICSの[エージェント]の実行エージェントの個数が増えているはずです。

OnP ICSはWebLogic Server 12.1.3上でcompact domainとして構成された環境で動作します。OnP ICSにアクセスできるユーザーを個別に登録できる点が、On-Premiseっぽいところでしょうか(なお、ユーザー情報はWebLogic Serverの組み込みLDAPに登録されます)。内部ではデータベースを使用していますが、デフォルトではJava DBを使っています。もちろん、Oracle Databaseを利用することもできます。

使える機能はPaaSのICSと同様ですが、一部、OnP ICSではサポート対象外のAdapterがあります。詳細はドキュメントに記載がありますのでご注意ください(今後バージョンが上がるに従い、この制限が変化する可能性があります)。

[Cloud, WLS] WebLogic Server 12.2.1 on JCS (Java Cloud Service)

今週から、Java Cloud ServiceでWebLogic Server 11.1.1.7、12.1.3だけでなく、12.2.1も利用できるようになりました。以下のスクリーンショットではJCSを選択してからのステップを示していますが、JCS VI(Java Cloud Service Virtual Image)でも同じく12.2.1を利用することができます。

Standard Edition、Enterprise Edition、Enterprise Edition with Coherence(ライセンスで言うところのWebLogic Suite)から選ぶことができるのは、これまで通りです。

ただ、現時点では、ドメインパーティションの個数は0もしくは1のみ選択可能という制限があります。これは、オンプレミスのライセンスで、1パーティションまでであれば、Multitenantオプションを契約しなくても利用できる、という制約に沿ったものです。

Java EE 7 Full Platform Compatible ImplementationのPaaSが出た、ってことですね。