2015年3月25日

[WLS, FMW] Oracle WebLogic Server Now Running on Docker Containers

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

Oracle WebLogic ServerのDockerコンテナでの動作保証を発表できることに興奮しています。動作保証と共に、Oracle WebLogic Serverのイメージを作成するためのDockerfilesとサポート・スクリプトをGitHubにリリースしています。
WebLogic on Docker
https://github.com/oracle/docker/tree/master/OracleWebLogic
これらのイメージは既存のOracle Linuxイメージの拡張として構築されています。
Oracle Linux Repository
https://registry.hub.docker.com/_/oraclelinux/
Oracle WebLogic Server Dockerイメージを使ったり、自身用のイメージを作成することができます。使い始めたり作成したりするにあたって、サンプルとしてDockerfilesやスクリプトをGitHubにUpしてあります。

Dockerはユーザーが分散アプリケーションをビルド、パッケージ、リリースおよび実行できるプラットフォームです。Dockerユーザーは自身が作成したアプリケーションや依存性のあるライブラリやファイルをDockerイメージにまとめます。DockerイメージはLinux環境間で配布可能な移植性のあるアーティファクトです。配布されたイメージは、コンテナをインスタンス化するために利用することができます。このコンテナでは、同じホストOS上の別のコンテナで動作する他のアプリケーションとは分離された状態で、アプリケーションが動作可能です。
Docker
https://www.docker.com/ 
下表は種々のWebLogic Serverのバージョンで動作保証済みの構成を示したものです。Dockerイメージを作成するにあたって、Oracle WebLogic Server、JDK、Linux、Dockerのこうした組み合わせを使うことができます。
 Oracle WebLogic Server JDK Version Host OS Kernel Docker Version
 12.1.3  7/8  Oracle Lunux 6 UL 5+  Unbreakable Enterprise Kernel Release 3 (3.8.13)+  1.3.3+
 12.1.3  7/8  Oracle Linux 7 UL 0+  Unbreakable Enterprise Kernel Release 3 (3.8.13)+
or
Red Hat  Compatible Kernel (3.10)+
 1.3.3+
 12.1.3  7/8  Red Hat Enterprise
Linux 7+
 Red Hat  Enterprise Linux Kernel (3.10)+  1.3.3+
現在のWebLogic Serverがサポートしている最新の構成情報は、Certificationのページをご覧下さい。
Supported Virtualization and Partitioning Technologies for Oracle Fusion Middleware
http://www.oracle.com/technetwork/middleware/ias/oracleas-supported-virtualization-089265.html
提供したDockerfileとスクリプトを使うと、1個のホストOSやVM上で動作する、開発、本番モードを含め、クラスタ構成、非クラスタ構成のOracle WebLogic Serverドメイン構成を作成することができます。構成したドメインで動作する各サーバはDockerコンテナで動作し、必要に応じて他のサーバと通信することもできます。これらのDockerfilesやスクリプトの使い方を説明しているドキュメントについては、OTNのホワイトペーパーをご覧下さい。
Oracle WebLogic Server on Docker Containers
http://www.oracle.com/technetwork/middleware/weblogic/overview/weblogic-server-docker-containers-2491959.pdf
他の構成や他の構築方法も可能ですが、これらのリソースがWebLogic Server on Dockerを始めるにあたって役にたつことを願っています。是非フィードバックを頂ければと思います。

[Java] JMS 2.0 Revision A

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

JMS 2.0 errataがJCP executive commiteeの投票で承認されました。オリジナルのJMS 2.0仕様にあったエラーを修正するために、このシンプルなメンテナンス・リリースが必要でした。その結果、‘JMS 2.0 Revision A’ができあがり承認されました。このRevision AではJMS仕様の次バージョン、つまりJMS 2.1に焦点を移しています。
リソースをご紹介しておきます。

2015年3月24日

[Solaris, Virtualization] Oracle VM Server for SPARC 3.2 Released

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

最新の Oracle VM Server for SPARC 3.2 のリリースを発表できうれしく思います。
Oracle VM Server for SPARC
http://www.oracle.com/jp/technologies/virtualization/oracle-vm-server-for-sparc/overview/index.html(日本語)
http://www.oracle.com/us/technologies/virtualization/oracle-vm-server-for-sparc/overview/index.html(英語)
このアップデートは Oracle Solaris 11.2 SRU8.4 以降に統合されています。 Oracle Solaris 11.2 Support Repository Updates (SRU) Indexを参照してください。
Oracle Solaris 11.2 Support Repository Updates (SRU) Index (ドキュメントID 1672221.1)
https://support.oracle.com/rs?type=doc&id=1672221.1
新リリースでは以下の機能導入、機能改善がなされました。

  • マルチパス仮想ディスクI/O(mpgroup)の機能向上
    • アクティブI/Oパスの表示、設定が可能になりました
  • ドメインの可観測性の向上
    • ドメイン間の依存性を表示
  • ネットワーク可観測性、QoSとセキュリティ管理、PVLAN の機能強化
  • 物理I/Oに対するI/O レジリエンシ (IOR)
  • Dynamic Bus (動的にPCIバスをドメインに割り当て)
  • ライブマイグレーションの性能向上ならびにセキュリティ強化
  • ゲストの追加(ホスト環境ととのやりとりのためのVM API)
  • SPARC パフォーマンス・カウンタへのゲストアクセス
Oracle VM Server for SPARCに関するその他のリソースをご紹介しておきます。

[Linux] Unbreakable Enterprise Kernel Release 3 Quarterly Update 5 Now Available

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

Oracle Linux 6およびOracle Linux 7用Unbreakable Enterprise Kernel Release 3 Quarterly Update 5 (UEKR3U5)のリリースを発表できうれしく思っています。これは、UEK Release 3 (Version 3.8.13-68)向けの5回めの4半期ごとのアップデートリリースであり、ドライバの更新やバグやセキュリティ問題の集積パッチを含むものです。
トピックをいくつかご紹介しましょう。
  • turbostatツールがKernelに取り込まれました。これを使うと、プロセッサのトポロジーや温度や周波数といった統計情報を取得することができます。
  • bondingドライバをアップデートしました。これによりリンク・アグリゲーション速度(Link Aggregation Speed)やDuplexモードのような有用なデータを表示するethtoolコマンドを有効化できます。
  • インストール時のカーネルモジュールの署名でSHA-512ハッシュアルゴリズムが利用可能になりました。
  • NFS共有ディスク上にあるスワップファイルを利用できるようになりました(ただしテクノロジー・プレビューの扱いです)。
  • Xen EFIのサポートが追加されました。
  • 主要なパートナーのストレージデバイス、ネットワーク・カードなどのデバイス・ドライバをアップデートしました
    • Broadcom
    • Cisco
    • Emulex
    • HP
    • Intel
    • Mellanox
    • Microsoft
詳細は、リリースノートをご覧ください。
Oracle® Linux Release Notes for Unbreakable Enterprise Kernel Release 3 Quarterly Update 5
https://docs.oracle.com/cd/E52668_01/E60671/html/index.html
ソースコードはパブリックgitリポジトリにございます。
linux-uek3-3.8 repository
https://oss.oracle.com/git/?p=linux-uek3-3.8.git;a=summary

2015年3月22日

[WLS, Database, FMW] WLS JDBC Driver Patching

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

Oracleドライバのjarパッチの取り扱いが複雑なので整理してみましょう。このエントリでは、詳細情報へのリンクを一箇所にまとめてみました。いくつかまだ利用できないパッチがありますが、それらはTBA(今後利用可能)と下表に明記してあります。これらのファイルが利用可能になった段階で、このページ(注:原文のページです)を更新する予定です。
WebLogic Server 10.3.6、12.1.1、12.1.2ではDatabase 11.2.0.3のjarファイルが同梱されていますが、このjarファイルは標準のjarファイル(つまりDatabaseに同梱されているもの)とは異なり、WebLogic Serverをサポートするよう追加のバグ修正や機能拡張がなされています。つまり、11.2.0.3のパッチをコピーしたり、標準リリースのjarファイルを使ったりするだけでは、11.2.0.4へアップグレードすることができなません。必要に応じて11.2.0.3パッチを提供するサポートは必要ですが難しいでしょう。11.2.0.4の機能に加え、同梱されている11.2.0.3のデータベースjarファイルへの全ての機能拡張やパッチを含む特別な11.2.0.4のパッチにアップグレードすることをお勧めします。WebLogic Sererは12.1.2でOracle Universal Installerを使い始め、異なるパッチ形式が必要になっているため、さらに複雑になっています。
WebLogic Server 10.3.6、12.1.1、12.1.2、および12.1.3では、Oracle Database 12cのクライアントJARファイルの実行をサポートします。WebLogic Server 10.3.6から12.1.2までは、jarファイルを手でインストールする必要があり、このアップグレードを自動化するインストーラやパッチはありません。パッチを入手するためには、Database 12.1.0.2のjarファイルで実行している必要があります。WebLogic Serverのパッチは、Database 12.1.0.1のJARファイル用には作成されません。WebLogic Server 12.1.3ではDatabase 12.1.0.2ドライバのjarファイルのプレリリースバージョンを同梱していますが、これらのファイルの製品版にアップグレードすることができるようになるパッチが提供される予定です。このアップグレード後、標準のDatabase Oracle patchファイルがWebLogic Server 12.1.3(およびDataase 12.2.0.2 jarファイルへ手動アップグレードしたWebLogic Server 12.1.2)で期待通り動作するでしょう。

インストール済みのOracle Database用JDBCドライバへのパッチ適用
WebLogic Serverのバージョン インストールされるJDBCドライバ DatabaseのJarファイルへのパッチ適用方式 ドキュメント
10.3.6 11.2.0.3.0 +  AS 11.1.1.6.0 (WLS 10.3.6) 11.2.0.4用の
WLSパッチ
My Oracle Supportドキュメント(1970437.1)
How To Upgrade the Oracle JDBC Drivers Bundled with WebLogic Server 10.3.6-12.1.2 To the JDBC Driver for Oracle Database 11g Release 2
https://support.oracle.com/rs?type=doc&id=1970437.1
12.1.1 11.2.0.3.0 +  AS 12.1.1.0.0 (WLS 12.1.1) 11.2.0.4用の
WLSパッチ
My Oracle Supportドキュメント(1970437.1)
How To Upgrade the Oracle JDBC Drivers Bundled with WebLogic Server 10.3.6-12.1.2 To the JDBC Driver for Oracle Database 11g Release 2
https://support.oracle.com/rs?type=doc&id=1970437.1 
12.1.2 11.2.0.3.0 + AS 12.1.2.0.0 (WLS 12.1.2) 11.2.0.4 opatch 19477203に関するパッチ(#18557114)
12.1.3 12.1.0.2プレリリースバージョン ○出荷されている12.1.0.2に対応するためには12.1.0.2 opatchを利用
○その他のバグ修正については、標準のopatchを利用
TBA

Database 12c Driverを使う場合
WebLogic Serverのバージョン 12.1.0.2のインストール形式 データベースのJarパッチ方法 インストールに関するドキュメント
パッチ適用のドキュメント
10.3.6 12.1.0.2を手動インストール 12.1.0.2 WLS patch My Oracle Supportドキュメント(1564509.1)
WebLogic Server 12.1.1 and 10.3.6 Support for Oracle 12c Database
https://support.oracle.com/rs?type=doc&id=1564509.1
○パッチ適用のドキュメントはTBA
12.1.1 12.1.0.2を手動インストール 12.1.0.2 WLS patch My Oracle Supportドキュメント(1564509.1)
WebLogic Server 12.1.1 and 10.3.6 Support for Oracle 12c Database
https://support.oracle.com/rs?type=doc&id=1564509.1
○パッチ適用のドキュメントはTBA
12.1.2 12.1.0.2を手動インストール 12.1.0.2 opatch  (日本語)
Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの管理 12c (12.1.2)
Oracle 12cデータベースの使用
http://docs.oracle.com/cd/E50629_01/wls/JDBCA/ds_12cdriver.htm#i1060539
(英語)
Oracle® Fusion Middleware Administering JDBC Data Sources for Oracle WebLogic Server 12c (12.1.2)
Using an Oracle 12c Database
https://docs.oracle.com/middleware/1212/wls/JDBCA/ds_12cdriver.htm#JDBCA272
○標準のパッチ適用方式
12.1.3 ○12.1.0.2プレリリースバージョンインストール済み
○製品版12.1.0.2へアップグレードするためのパッチ適用
12.1.0.2 opatch (日本語)
Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの管理 12c (12.1.3)
Oracle 12cデータベースの使用
http://docs.oracle.com/cd/E57014_01/wls/JDBCA/ds_12cdriver.htm#i1060539

(英語)
Oracle® Fusion Middleware Administering JDBC Data Sources for Oracle WebLogic Server 12c (12.1.3)
Using an Oracle 12c Database
https://docs.oracle.com/middleware/1213/wls/JDBCA/ds_12cdriver.htm#JDBCA272
○パッチ作成方式はTBA
○標準のパッチ適用方式
関連するトピックとして、サードパーティ製ドライバJarファイルの更新について以下のMy Oracle Supportドキュメントで取り扱っています。
How To Upgrade the Third-Party JDBC Drivers Bundled With WebLogic Server 10.3.6 and 12.1.x (ドキュメントID 1969871.1)
https://support.oracle.com/rs?type=doc&id=1969871.1 
これには、DataDirectやMySQLドライバといった、同梱されているドライバが含まれます。jarファイルをバックアップして削除し、新しいファイルをインストールします。jarファイル名が変わっているのであれば、クラスパスを変更します。

2015年3月14日

[Database, JavaScript] node-oracledb 0.4.1 is on GitHub (Node.js driver for Oracle Database)

原文はこちら。
https://blogs.oracle.com/opal/entry/node_oracledb_0_4_1

Node.js driver for Oracle Databaseの今回のアップデートは小規模なものですが、いくつかご紹介します。
Node.js driver for Oracle Database
https://github.com/oracle/node-oracledb
  • 外部認証のサポートを追加しました
    Support external authorization #15
    https://github.com/oracle/node-oracledb/issues/15
  • isAutoCommit フラグはクエリ実行と一緒に使えるようになりました。これはSELECT文が後続する複数のDML文を実行する際に有用です。これを使って、明示的なcommit()の呼び出しを追加するデータベースへのラウンドトリップをしないようにすることができます。
  • Hannes Prirschlがpackage.jsonのAIXでのビルドをサポートするようプルリクエストしてくれました!
    Hannes Prirschl (GitHub)
    https://github.com/schmafu
  • 範囲外のプロパティを利用した場合のエラーメッセージを改善しました。
  • Greg Huang, BuiltInParris, mello151やこうした変更を推進した皆様が数多くのAPIドキュメントをアップデートしてくれました!
    Greg Huang (GitHub)
    https://github.com/zorrofox
    BuiltInParris (GitHub)
    https://github.com/BuiltInParris
    mello151 (GitHub)
    https://github.com/mello151
  • 不具合の修正:接続がまだ閉じられていないことが理由で接続プールのterminate()が失敗する場合、後続するrelease()を使ってそうした接続を閉じたときに出ていた"ORA-24550: Signal Received"というエラーが出ないようにしました。
  • krishnanm86がコードのリファクタリングのプルリクエストをしてくれました!
    krishnanm86 (GitHub)
    https://github.com/krishnanm86
    Source code refactor. Abstracted redundant functionalities #28
    https://github.com/oracle/node-oracledb/pull/28
みなさまが心待ちにされているもっと大きな機能(LOBSやRETURNING INTOなど)は現在作業に取り組んでいるところですので、しばしお待ちを。

2015年3月13日

[Java, JavaScript] Improving Nashorn startup time using code caching

原文はこちら。
https://blogs.oracle.com/nashorn/entry/improving_nashorn_startup_time_using

Nashornはウォームアップが済めば、通常Rhinoよりも速いのですが、その起動時ならびにウォームアップの挙動はRhinoに比べて些か悪いことがあります。これには様々な理由がありますが、これにはinvokedynamic callsitesを実行時にブートする必要があるだけでなく、JDK 8やNashorn自身のinvokedynamic実装が効率的でないことも理由としてあります。

JVM側とNashornの両面で改善の努力をすすめていますが、起動時のオーバーヘッドを削減するため、キャッシュを実装し、コンパイル済みのJavaScriptコードを再利用する機能をNashornに追加しました。これらの機能は、8u20から追加されはじめ、先頃リリースされた8u40リリースで強化されています。

このエントリでは、JDK 8u20でスクリプトのロードのスピードアップのためのいくつかの方法をご紹介します。サンプルスクリプトとしてlodashライブラリを使用します。lodashを含め、この記事で使用するサンプルコードは、こちらからダウンロードできます。
lodash
https://lodash.com/

Sharing compiled scripts between Threads


JDK 8リリース当初、NashornがJavaのバイトコードにコンパイルしたJavaScriptコードはシングルスレッドでかつ単一のJavaScript環境でのみ利用することができました。これはつまり、同じスクリプトを複数のJavaScript環境で実行するためには、その都度最初からコンパイルする必要があった、ということです。

JDK 8u20から、コンパイル済みのスクリプトクラスを複数のグローバルオブジェクト、複数のスレッドで同時に使うことができるようになりました。単一のScriptEngineを複数のバインディングやスレッドで利用することでこの機能を利用できます。

以下のコードは、新たなスコープ・バインディングでスクリプトを実行します。スクリプトエンジンとスクリプトのURLを引数として取得し、スクリプトを(NashornスクリプトエンジンAPIのBindingとして表される)新たなグローバルオブジェクトで実行します。
private Object evaluateInNewScope(ScriptEngine engine, URL url) throws Exception {
   Bindings b = engine.createBindings();
   ScriptContext context = new SimpleScriptContext();
   context.setBindings(b, ScriptContext.ENGINE_SCOPE);
   return engine.eval(new URLReader(url), context);
}
クラスキャッシュのサンプルコードを実行して動作を確認できます。このクラスは複数のJavaScriptスコープでunderscore.jsというJavaScriptライブラリをロードし、実行します。初期のJDK8とJDK 8u20以後の両方でdemoを実行すると、後者の環境でのスクリプト実行のほうがずっと高速であることがわかります。

この機能は素敵なことに、マルチスレッド環境でも利用できます。マルチスレッドでのクラスキャッシュのサンプルコードを実行して確認できます。異なるJavaScriptスコープバインディングを使うだけでなく、異なるスレッドでスクリプトを実行しています。再度言いますが、初期のJDK 8と比べてJDK 8u20以後で実行するほうがずっと高速です。

-ccs--class-cache-size オプションを使って、内部クラスキャッシュのサイズを設定できます。デフォルト値は50で、これはScriptEngineがおよそ50個のコンパイル済みスクリプトクラスをキャッシュする、という意味です。もっと多くのスクリプトを使う場合には、この設定値を大きくする必要があります。

Persisting compiled classes to disk

内部クラスキャッシュのおかげでNashornエンジン内で同じスクリプトを繰り返し利用する回数を減らすことができますが、スクリプトの初期コンパイルに関連するオーバーヘッドがまだかなり存在します。それゆえ、後の実行でスクリプトの再コンパイルをしなくてすむよう、JDK 8u20ではコンパイル済みのNashornクラスをディスクに格納する機能が導入されました。

-pcc もしくは --persistent-code-cacheオプションを使って、永続クラスキャッシュ(Persistent class caching)を有効化することができます。このオプションはNashornコマンドラインツール実行時にjjsに渡すか、もしくはNashornScriptEngineFactorygetScriptEngine メソッドに以下のように渡すことができます。
ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine("-pcc");
デフォルトでは、Nashornクラスは現在のワーキング・ディレクトリのnashorn_code_cacheというディレクトリに格納されます。この場所はnashorn.persistent.code.cacheというシステムプロパティを使ってオーバーライドすることができます。注意頂きたいのは、このディレクトリ内のファイルは純粋なJavaクラスではない、ということです。それは、ディスクからコンパイルされたスクリプトを復元するために、クラスのバイトコードに加えて、様々なメタデータを格納する必要があるためです。

永続クラスキャッシュのサンプルコードを使ってテストすることができます。このクラスはlodashライブラリを永続コードキャッシュを使って実行します。コンパイル済みクラスをディスクから読み出すことによる改善が50%弱で、いささか期待外れと感じる方がいらっしゃるかもしれません。

この理由は、コンパイル済みスクリプトの最初の実行の大部分が実際のところコンパイルのオーバーヘッドではなく、コンパイル済みクラスのロードおよびinvokedynamic callsiteの起動であるためです。繰り返し同じスクリプトをNashornで実行し、できる限りオーバーヘッドを少なくしたいというのであれば、これは有用な選択肢と言えるでしょう。

Persisting optimistic type info


JDK 8u40では、Optimistic Typeという新機能も導入されています。このOptimistic Typesは8u40ではデフォルトでは無効になっており、明示的に-ot もしくは --optimistic-types オプションを使って有効化する必要があります。
-ot=true
--optimistic-types=true
Optimistic TypesはJavaScriptプログラムのデータ型を仮定するというもので、この仮定が間違っている場合には、実行中に再コンパイルします。この機能により、JavaScriptプログラムの最終的な速度はかなり向上しますが、起動およびウォームアップのパフォーマンスに追加の負担がかかります。それゆえ、キャッシュとバイトコードの再利用がより一層有用になるのです。

幸運にも、Optimistic Typeと前述の永続コードキャッシュを組み合わせて利用できます。関数の再コンパイルにより、その関数の以前のバージョンは、永続コードキャッシュで上書きされますので、永続キャッシュをその後の実行で使用する場合、関数の「正しい」バージョンがすぐにロードされるようになります。これにより、実行中の再コンパイルの必要性が減り、Optimistic Typeがない場合に比べてより一層メリットを得られます。

しかし、多くのアプリケーションにとって過剰である場合があるため、コンパイル済みクラス全体をディスクに永続化しなくても、このソリューションが改善される可能性があります。本当に保存が必要なのは、コンパイルされたスクリプト内のcallsitesの型情報だけだからです。

JDK 8u40では、スクリプトの型情報だけをディスクに保存し、その後の同一スクリプトの実行で再利用できる機能も導入しています。起動時間の改善という点では、先ほどのコンパイル済みクラス全体を永続化する場合に類似していますが、型情報だけを保存しているため、結果としてディスクの使用量が減っています。

型情報のキャッシュとOptimistic Typeの組み合わせをサンプルコードで実際に確認することができます。Optimistic Type情報はシステムディレクトリに格納されます。このシステムディレクトリはプラットフォーム依存です。この機能およびその他の様相は様々なシステムプロパティを使って調整できます。詳しくは、NashornのDeveloper Readmeファイルをご覧下さい。
DEVELOPER_README
http://hg.openjdk.java.net/jdk8u/jdk8u-dev/nashorn/file/tip/docs/DEVELOPER_README

まとめ


JDK 8u20と8u40で、Nashornのスタートアップならびにウォームアップの性能を改善するための様々な新機能が導入されています。

これらの機能だけでNashornの起動とウォームアップの問題がすべて解決するとは思っていませんが、NashornおよびJDK 8での体験が改善することを期待しています。引き続き様々なレベルでパフォーマンス向上の取り組みを続けています。

これらの機能に関する質問がありましたら、お気軽にnashorn-devメーリングリストにどうぞ。