Quantcast
Channel: Oracle Blogs 日本語のまとめ
Viewing all 760 articles
Browse latest View live

[Java, WLS] Introducing WLS JMS Multi-tenancy

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

Introduction

Multi-tenancy (MT)はWebLogic Server 12.2.1の主要なテーマで、SaaSやPaaS用途のためにOracle Platformがこの機能により機能強化されています。WebLogic Server Multi-Tenancyの主要なメリットは、集積度の向上、テナントの分離、クラウド構成や管理のシンプル化があげられます。

この記事では、WebLogic Serverのメッセージングコンポーネントである、WebLogic JMSのマルチテナントサポートのMulti-tenancyサポートについてご紹介します。

Key MT Concepts

例えばTimの以下のブログなどですでにWebLogic Server Multi Tenancyの主要なコンセプトはご存じかもしれませんが、幅広い皆様にとってのメリットをJMSの内容に入る前にさらっとご紹介します。
Domain Partitions for Multi-tenancy in WebLogic Server 12.2.1
https://blogs.oracle.com/WebLogicServer/entry/domain_partitions_for_multi_tenancy
http://orablogs-jp.blogspot.jp/2015/11/domain-partitions-for-multi-tenancy-in.html
WebLogic Multi-tenancyでは、ドメイン・パーティション(もしくはパーティション)、リソースグループ(RG)、リソースグループ・テンプレート(RGT)というコンセプトが導入されています。
パーティションは、概念としてWebLogic Serverのドメインをスライスしたもので、様々なテナントのリソースやアプリケーションを同一WebLogic Serverや同一クラスタで分離しながら構成、デプロイできます。これにより、全体としての集積度が向上します。パーティションはJNDI、セキュリティ、ランタイムMBean、アプリケーション永続データ、ワークマネージャ、ログの分離境界を定義します。さらに、同一サーバインスタンスで動作するパーティションには各々のライフサイクルがあります。例えば、パーティションを任意のタイミングで停止しても他のパーティションに影響を与えることはありません。
リソースグループは、リソースやアプリケーションに関連するシンプルな機能の集合体です。リソースグループは、同一パーティション内の他のリソース・グループとは独立してターゲットに指定したり、管理したりすることができます。リソースグループをパーティション内部で定義するだけでなく、ドメインレベルでも定義することができます。パーティションと同じように、同一サーバ上で動作する同一パーティションもしくはドメインレベルのリソースグループには、独自のライフサイクルがあります。
リソースグループ・テンプレートは、例えば同じリソースやアプリケーションが複数のパーティションで実行される必要がある、SaaSのような利用形態におけるWebLogic Serverリソースやアプリケーション構成に関わる管理のオーバーヘッドを削減するテンプレートのしくみを提供します。リソースグループ・テンプレートは、configure-once-and-use-everywhere(1回の構成でどこででも利用できる)機能を提供します。構成アーティファクトの共通セットをRGTで指定することができ、異なるパーティションのリソースグループから参照することができます。リソースグループ・テンプレートは、ターゲット指定できません。そして、デプロイ済みのリソースグループが参照しなければリソースグループ・テンプレートのリソースはデプロイされません。
(直接リソースグループ内で、もしくは直接リソースグループ・テンプレートを参照するリソースグループを通じて)パーティション内で構成、デプロイされているリソースやアプリケーションは、当該パーティションに範囲が限定されることにご注意ください。

Understanding JMS Resources in MT

他のWebLogic構成アーティファクトと同様に、JMSサーバ、SAFエージェント、パスサービス、永続ストア、メッセージングブリッジ、JMSシステムモジュール、アプリケーション・デプロイメントJMSモジュール、Java EE 7リソース定義モジュール、およびJMSアプリケーションといったJMSリソースは、直接またはリソースグループ・テンプレートを通じてだけではなく、以前からの方法(常にドメインレベルでは直接設定です)であっても、すべてリソースグループで構成、デプロイできます。パーティション構成と昔ながらの設定を同一ドメインで組み合わせて使うことも可能です。
異なるパーティション内のリソースやアプリケーションは互いに分離されています。例えば、同じクラスタ内で実行されている複数のパーティションに同じJNDI名を持つJMS宛先を設定することができ、これらの宛先を、独立したランタイムMBeanインスタンスを使って管理し、独立したパーティション固有のセキュリティレルムを使って保護することができます。非永続的な状態に加えて、JMS宛先などの永続的なデータ(例えば、永続メッセージと永続サブスクリプション)も互いに分離されています。

Configuring JMS Resources in MT

以下の構成スニペットでは、マルチテナント環境で構成されたJMSリソースと旧来の非マルチテナント環境におけるJMS構成の違いを示しています。

ご覧になるとおわかりになる通り、パーティションスコープのJMSリソースはパーティションのリソースグループに埋め込まれています(代わりにリソースグループ・テンプレートに埋め込むこともできます。その場合、リソースグループがそれを参照します)。
さらに、リソースグループのリソースは決して個別にターゲットとして指定されず、リソースグループ全体を仮想ターゲットを介してターゲットとして指定します。これが通常のターゲット指定の方法です。リソースグループが仮想ターゲットに対して割り付けられると、WebLogic Serverのクラスタにも割り付けられます。リソースグループのすべてのJMSリソースやアプリケーションもクラスタに割り付けられます。

後でご覧に入れますが、仮想ターゲットはだけでなく、リソースグループのターゲット情報を提供するだけではなく、パーティションのアクセス・ポイントをも定義します。リソースグループの割り付けと仮想ターゲットに関する詳細は、以下のJoeのエントリをご覧ください。
Partition Targeting and Virtual Targets in WebLogic Server 12.2.1
https://blogs.oracle.com/dipol/entry/partition_targeting_and_virtual_targets
http://orablogs-jp.blogspot.jp/2015/11/partition-targeting-and-virtual-targets.html
WebLogicクラスタ内の各サーバに対する個別のJMSリソース設定について説明せず、「移行可能なターゲット」を構成して高可用性を担保することに言及しなかったことに気付いてらっしゃるかもしれませんが、いいお知らせがあります。どちらも必要なく、MTでサポートされていません。これらの機能は、大幅に強化されたWebLogic JMSのクラスタ・ターゲティングおよびHAサポートに置き換えられています。同郷のKathiravanがこの件に関するエントリを出しています。
12.2.1 WebLogic JMS: Dynamic Scalability and High Availability Made Simple
https://blogs.oracle.com/WebLogicServer/entry/12_2_1_weblogic_jms
http://orablogs-jp.blogspot.jp/2015/12/1221-weblogic-jms-dynamic-scalability.html
システムレベルのJMSリソース(JMSサーバ、SAFエージェント、永続ストア、メッセージング・ブリッジ、パス・サービス、JMSモジュール)がマルチテナント構成で様々に範囲付けられていますが、それぞれの属性は旧来の非マルチテナント構成と全く同じやり方で指定します。
様々な検証およびターゲティングルールは、WebLogicマルチテナントのJMS構成が分離されていて自己完結しており、簡単に管理できることを保証するために強制されています。マルチテナント環境でJMSを構成する上でのある基本的かつハイレベルなルールは、JMS構成アーティファクトが同じスコープの他の構成アーティファクトを参照するのみである、というものです。例えば、JMSサーバーに範囲限定されたリソースグループは、同じリソース・グループで定義されている永続ストアを参照することだけができます。これらのルールは、構成の検証チェックによって実施され、エラーや警告は実行時にログに記載されます。

Accessing JMS Resources in MT

マルチテナント用に設計されたJMSアプリケーションは、JNDI名前空間でJMSリソースを検索することにより、旧来のJMSアプリケーションと同じ方法でJMSリソースにアクセスします。違いは、MTの環境では、WebLogic JNDI InitialContextが作成時に特定のスコープ(ドメインまたはパーティション)に関連付けられていることです。
マルチテナントのアプリケーションは、同じWebLogicクラスタを参照しても異なるパーティションにスコープ限定されている、複数のJNDIコンテキストを持つことができます。初期コンテキストは、一度作成されるとクローズするまでそのスコープ範囲に限定されます。これは、パーティションスコープのJNDIコンテキスト・インスタンスを使うすべてのJNDIの操作を、パーティション固有のJNDI空間の領域を使用してを使用して、すべてのJNDI操作は、JNDIスペースのパーティション固有の領域を使用して実行することを意味します。
JNDIコンテキストのスコープは、初期コンテキスト作成時に提供されるプロバイダURLによって決定されます。
アプリケーションがパーティションスコープのJNDI初期コンテキストを確立すると、このコンテキストを使ってJMS接続ファクトリや宛先を非マルチテナント環境と同じやり方で検索することができます。違うのは、アプリケーションがパーティションスコープのJMSリソースにのみアクセスできる、という点です。
では具体的なユースケースを通じて、アプリケーションがどのように特定パーティションへの初期コンテキストを確立できるのかを見ていきましょう。

Use Case 1 - Local Intra-partition Access

Java EEアプリケーションが同一クラスタ(または同じクラスタ構成ではない管理対象サーバ)のローカルパーティションのJMS宛先にアクセスする必要がある場合は、アプリケーションはプロバイダURLを使わずに初期コンテキストを作成すればよいです。
Example 1: Null Provider URL
  Context ctx = new InitialContext();
  Object cf = ctx.lookup("jms/mycf1");
  Object dest = ctx.lookup("jms/myqueue1");
この初期コンテキストはアプリケーションがデプロイされたパーティションに範囲が限定されます。

Use Case 2 - Local Inter-partition Access

Java EEアプリケーションが、自分のデプロイされているパーティション以外に存在するJMS宛先やその他のリソースにアクセスする必要があって、パーティションが同じクラスタにある、もしくは同一管理対象サーバにある場合、パーティションスコープのJNDI名もしくは"local:"プロトコルを使うプロバイダURLを使うことができます。

Using Partition Scoped JNDI Names
JNDI名を名前空間の接頭辞で装飾し、スコープを示すことができます。

Example 2.1: 上の例で示されたパーティション構成の場合、以下のコードを使ってpartition1にて構成されたJMS宛先にアクセスすることができます。
Context ctx = new InitialContext();
Object cf = ctx.lookup("partition:partition1/jms/mycf1");
Object dest = ctx.lookup("partition:partition1/jms/myqueue1");
同様にパーティションのJava EEアプリケーションは、同一クラスタ内のドメインレベルのJNDIリソースに"domain:"という名前空間の接頭辞を付けると、パーティションスコープの初期コンテキストを使ってアクセスすることができます(例: "domain:jms/mycf2")。

Using a provider URL with the "local:" Protocol
特定パーティションへの初期コンテキスト作成時に"local:"プロバイダURLを指定することもできます。

Example 2.2: 上の例で示されたパーティション構成の場合、以下のコードを使ってpartition1にて構成されたJMS宛先にアクセスすることができます。
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.PROVIDER_URL, "local://?partitionName=partition1");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "welcome1");
Context ctx = new InitialContext(env);
Object cf = ctx.lookup("jms/mycf1");
Object dest = ctx.lookup("jms/myqueue1");
初期コンテキストはそのライフタイムが"partition1"と関連付けられています。
同様に、パーティション内のJava EEアプリケーションは、同一クラスタ内のドメインレベルのJNDIリソースに local://?partitionName=DOMAIN をプロバイダURLとして指定するとアクセスできます。

Use Case 3 - General Partition Access

Java EEアプリケーションやクライアントがパーティションのJMS宛先にアクセスする三個目の方法は、パーティションURLを使う、というものです。JMS宛先がリモートクラスタ(もしくは非クラスタ環境のリモートの管理対象サーバ)にある場合に、パーティションURLを使うことを意図しています。通常パーティションURLはt3://hostnake:portもしくはt3://hos:port/{URI接頭辞}です。
パーティションURLは、WebLogic Server 12.2.1以後を使うJava EEアプリケーションやクライアントのみが使うことができます。旧バージョンの場合、下記のように専用パーティションポートを使います。

Example 3: 上の例で示されたパーティション構成の場合、以下のコードを使ってpartition1にて構成されたJMS宛先にアクセスすることができます。
注意いただきたいのは、以下のプロバイダURLにある"/partition1"はpartition1の仮想ターゲットで設定されたURI接頭辞です。
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.PROVIDER_URL, "t3://abcdef00:7001/partition1");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "welcome1");
Context ctx = new InitialContext(env);
Object cf = ctx.lookup("jms/mycf1");
Object dest = ctx.lookup("jms/myqueue1");
ベストプラクティスではありませんが、パーティションURLを使って同一JVM/クラスタの別のパーティションにアクセスすることもできます。

Use Case 4– Dedicated Partition Ports

最後の方法は、専用ポートを各パーティションに設定することです。これらの構成はJoeの以下のエントリに説明があります。
Partition Targeting and Virtual Targets in WebLogic Server 12.2.1
https://blogs.oracle.com/dipol/entry/partition_targeting_and_virtual_targets
http://orablogs-jp.blogspot.jp/2015/11/partition-targeting-and-virtual-targets.html
パーティション専用ポートを構成すると、旧来のURLを使うアプリケーションがパーティションにアクセスすることができます。このポートは、12.2.1以前のWebLogic Serverで動作するクライアントやアプリケーションが12.2.1以後のドメイン内のパーティションにアクセスできるようにすることを主目的としています。
このような古いクライアントやアプリケーションの場合、ホスト名とURI接頭辞を使ってパーティションにアクセスすることはサポートしていませんので、旧来のクライアントからこれらを使おうとする試みは単に失敗するか、無言のうちにドメインレベルのJNDI名前空間にアクセスするかのどちらかでしょう。

What’s next?


この記事がマルチテナントにおけるJMSの基本を理解する上での助けになることを願っています。この新しい面白い機能の探索は始まったばかりです。マルチテナントにおけるメッセージングに関する情報は以下のドキュメントでたくさん見つけることができます。
Oracle® Fusion Middleware Using WebLogic Server Multitenant 12c (12.2.1)
Configuring Messaging
http://docs.oracle.com/middleware/1221/wls/WLSMT/config_jms.htm#WLSMT617

[WLS, Java] Multi-Tenancy EJB

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

Multi-Tenancy EJB

WLS12.2.1のマルチテナントサポートのおかげで、EJBコンテナは多くの拡張機能を手にしました。アプリケーションとリソースの「かけ算」により、パーティションのことを知らないままでも、EJBコンテナがマルチテナントの機能を提供することができます。別のアプリケーションのコピーがあるおかげで、異なるリモートオブジェクト、Beansプール、キャッシュ、モジュールクラスローダーインスタンスなどにも分離をもたらします。以下でEJBアプリケーションで活用できる新機能のいくつかを挙げています。

1. JNDI

  • サーバー命名ノードはパーティションを認識します。
  • パーティションにデプロイされたアプリケーションには、対応するパーティションのJNDI名前空間で公開されるEJBクライアントビューがあります。

2. Security

  • セキュリティ実装は現在、パーティションごとのセキュリティレルムのサポートを含む、複数のアクティブなレルムを認めています。
  • ロールベースアクセス制御やパーティションにデプロイされたレルムアプリケーションのための資格証明マッピングは、パーティションが構成したレルムを使います。

3. Runtime Metrics and Monitoring

  • PartitionName属性を持つ新しいApplicationRuntimeMBeanインスタンスが、パーティションにデプロイされるアプリケーション毎に作成されます。
  • ランタイムMBeanサブツリーを公開するEJBコンテナは、ApplicationRuntimeMBeanインスタンスによって根づかせます。

4. EJB Timer service

  • 永続ローカルタイマーは、ストアコンポーネントに依存しています。パーティションカスタムファイルストアは必要なテナントデータの分離を提供します。
  • また、裏のクラスタ化されたタイマーはジョブスケジューラを使用しており、これも分離を提供しています。

5. JTA configuration at Partition Level

  • JTAタイムアウトは、ドメインレベルとEJBコンポーネントレベルに加えて、パーティション・レベルで設定することができます。
  • EJBコンポーネントレベルのタイムアウト値は、他の2つに優先します。
  • デプロイメントプランを使って動的更新をサポートします。

6. WebLogic Store

  • 永続ローカルタイマーはストアコンポーネントに依存しています。パーティション化されたカスタムファイルストアは必要なテナントデータの分離を提供します。 

7. Throttling Thread Resource usage

  • 制約のあるワークマネージャは、グローバル・ランタイム・レベルで定義することができ、パーティション内のアプリケーション・インスタンスは、特に対話しないバッチ処理、非同期、メッセージドリブンbeanの呼び出しなどのために、これらの共有ワークマネージャを参照し、スレッドの利用をパーティション全体で絞ることができます。

8. Data Sources for Java Persistence API users

  • リソースグループ・テンプレートのシステムリソースとして定義されるデータソースを使う永続性ユニットは、PartitionDataSourceInfoMBeanベースのオーバーライドを利用することができます。
  • 高度なカスタマイズを必要とするユースケースは、システムリソースの再構成のために追加された新たなデプロイメントプランのサポートを利用できます。
  • アプリケーションパッケージ化されたデータソースモジュールを使用する永続性ユニットは、現在のデプロイメントプランのサポートを利用して、異なるパーティションでコピーを持ち、適切なPDBに向けることができます。

A sample EJB application leveraging Multi-Tenancy

これらの機能の使用を説明するために、マルチテナント環境にEJBアプリケーションの簡単なセットアップを行っていきます。

EJBアプリケーションのアーカイブはsampleEJB.jarで、JPA APIでデータベースと対話するstateful session beanが含まれています。このアプリケーションを2個の独立したパーティションにデプロイし、両者がそれぞれ独自のデータベース・インスタンスを指して独立して動作できるようにしたいと考えています。

1.  Create Virtual Targets

まずは、2個のパーティションそれぞれに対し、2個の仮想ターゲットを作成します。仮想パーティションでは下図のように異なるURI接頭辞(/partition1と/partition2)を使います。


2.  Create Resource Group Template

myRGTというリソースグループ・テンプレートを作成しましょう。リソースグループ・テンプレートはWebLogic Server 12.2.1で新たに導入されたコンセプトで、必要なアプリケーションや様々なリソースをデプロイすることができるテンプレートです。アプリケーションのセットアップが複雑な場合、同じことを異なるパーティションで何度も繰り返したくないのでこのリソースグループ・テンプレートは非常に有用です。

3.  Deploy application and data source

下図のようにアプリケーションをデプロイし、データソースを定義できます。アプリケーションとデータソースはすべてmyRGTスコープで定義されていることに注意してください。


4.  Create Partitions

すべての準備が完了したので、パーティションを作成します。以下のイメージでは、先ほど作成したリソースグループ・テンプレートをパーティション作成時に適用することができます。指定することができることを示しています。テンプレートに従って、定義されたすべてのものを自動的にデプロイします。

5.  Access the EJB

パーティションの作成、起動がすんだので、以下のコードでEJBを検索、アクセスすることができます。partition1のURLを使っていますが、もちろんURLを変更して別のパーティションにもアクセスできます。
Hashtable<String, String> props = new Hashtable<String, String>();
props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, "t3://server1:7001/partition1");
props.put(Context.SECURITY_PRINCIPAL, user);
props.put(Context.SECURITY_CREDENTIALS, pass);
Context ctx = new InitialContext(props);

BeanIntf bean = (BeanIntf)ctx.lookup("MyEJB"); 
boolean result = bean.doSomething();

6.  Override the data source

どこかまずいと感づいたのであれば、それは正しい感覚です。myRGTにデータソースmyDSを定義し、myRGTを両パーティションに適用したので、両パーティションは同じデータソースを共有しています。通常、これが起こることを望んでいません。2つのパーティションが相互に影響を与えることなく独立して動作してほしいのです。ではどうすれば可能でしょうか。
partition2を別のデータソースに切り替えたい場合、partition2の設定ページの[リソースのオーバーライド]タブでそのように設定すればよいのです。データベースのURLを変更して、別のデータベース・インスタンスをpartition2で使用するように変更することができます。

7.  Change the transaction timeout

前述の通り、EJBアプリケーションのために、動的に特定のパーティションのトランザクション・タイムアウト値を変更することがサポートされています。これは、パーティションの設定ページでも変更できます。以下の例では、15秒にタイムアウトを設定しています。これは、再起動せずに即座に有効です。

ワークマネージャを定義したり、特定のパーティションのリソース使用状況を監視したりと、パーティションの設定のページで、できることがその他にもあります。時間をかけると、このあたりで非常に便利なツールが見つかることでしょう。

[WLS] Three Easy Steps to a Patched Domain Using ZDT Patching and OPatchAuto

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

管理対象サーバーへ新しいパッチを適用されたOracleHomeを展開することで非常に簡単にWebLogic Server環境のアップデートができることがおわかりいただけたかと思います。それではさらに一歩すすめて、その操作の準備、配布の部分を自動化する方法を見ましょう。

ZDT PatchingはOPatchAutoと呼ばれる12.2.1の新しいすばらしいツールと統合しました。OPatchAutoは単一のインターフェースで、これを使うと、たった3ステップで、OracleHomeにパッチを適用し、パッチが適用されたOracleHomeをアップデートしたいすべてのノードに配布し、OracleHomeのロールアウトを開始することができます。

1.最初のステップでは、目的のパッチやPatch Set Updateを本番環境のOracleHomeと組み合わせ、パッチを適用するOracleHomeアーカイブ(.jarファイル)を作成します。この操作はOracleHomeのコピーを作成するので、本番環境に影響しません。その後、指定したパッチをOracleHomeのコピーに適用し、そこからアーカイブを作成します。これはロールアウト時に使うアーカイブですが、まずはすべての対象とするノードにコピーする必要があります。

最初の手順では、以下のようなOPatchAutoコマンドを実行します。
${ORACLE_HOME}/OPatch/auto/core/bin/opatchauto.sh apply /pathTo/PatchHome -create-image -image-location /pathTo/image.jar –oop –oh /pathTo/OracleHome
ここで

  • PatchHome:適用するパッチやPatch Set Updateを含むディレクトリもしくはファイル
  • image-location:生成されるイメージファイルの配置場所

です。また、-oopは“out-of-place”を意味し、OpatchAutoにソースとなるOracleHomeをパッチ適用前にコピーするよう指示します。

2.  第2に、1で作成したパッチ適用済みのOracleHomeアーカイブをすべての対象ノードにコピーします。この手順の素敵なところは、OpatchAutoがZDT Patchingと統合されているため、OpatchAutoに対し、ZDT Patchingとともに使うターゲットを指定することができるので、ZDT Patchingが自動的にノードを計算するようOpatchAutoが依頼します。以下がこの手順におけるコマンド例です。
${ORACLE_HOME}/OPatch/auto/core/bin/opatchauto.sh apply -plan wls-push-image -image-location /pathTo/image.jar -wls-admin-host ${ADMINHOSTNAME}:7001 -wls-target Cluster1 -remote-image-location /pathTo/image.jar -wallet ${WALLET_DIR}
ここで

  • image-location:手順1で作成されたJarファイル
  • wls-target:ドメイン名、クラスタ名、もしくはクラスタのリスト

です。リモートホストに対するssh認可のwalletがまだない場合には作成しておく必要があります。

3.  最後の手順では、OPatchAutoを使ってZDT Patching OracleHomeロールアウトを呼び出します。WLSTにこの時点で切り替え、以前のエントリで説明したように開始することができますが、OPatchAutoはロールアウトの進捗を監視し、有用なフィードバックも返してくれます。OpatchAutoを使ってロールアウトを開始するコマンドの例です。
${ORACLE_HOME}/OPatch/auto/core/bin/opatchauto.sh apply -plan wls-zdt-rollout -image-location /pathTo/image.jar -wls-admin-host ${ADMINHOSTNAME}:7001 -wls-target Cluster1 -backup-home /pathTo/home-backup -remote-image-location /pathTo/image.jar -wallet ${WALLET_DIR}
ここで

  • image-location:手順1で作成されたJarファイル
  • backup-home:オリジナルのOracleHomeのバックアップを格納するための、各リモートノードの場所

です。image-location と remote-image-location は両方指定しておくと、ノードがイメージをなくした場合に自動的にコピーできます。これがここで再度walletが指定されている理由でもあります。

プロセス全体の自動化を見た際に考慮すべきもう一つの素晴らしい点は、これらの同じコマンドを使用して、同じパッチ適用済みOracleHomeアーカイブを検証のためにテスト環境に配布、ロールアウトすることが非常に簡単である、というところにあります。検証がすめば、同じ2つのコマンドを少々変更して、本番環境にまったく同じ(検証済みの)OracleHomeアーカイブをプッシュします。

Zero Downtime PatchingとOPatchAutoを使ったOracleHomeのアップデートに関する詳細は、以下のドキュメントをご覧ください。
Oracle® Fusion Middleware Administering Zero Downtime Patching Workflows 12c (12.2.1)
Using OPatchAuto to Initiate, Revert, and Resume Rolloutshttp://docs.oracle.com/middleware/1221/wls/WLZDT/configuring_patching.htm#WLZDT166

[Java] Latest Java 9 News

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

Javaの次期メジャーリリースであるJava 9では、Java SEプラットフォーム、JDKにモジュールシステムが導入されます。Java 9の作業は引き続いており、新たな提案スケジュール、バージョン文字列体系、最新の機能について知ることができますし、早期アクセスビルドにもアクセスすることができます。

(1) マイルストンスケジュールの変更
新しいGA予定日は2017年3月です。以下はJava 9の提案されたマイルストンをまとめたものです。
2016/05/26  Feature Complete
2016/08/11  All Tests Run
2016/09/01  Rampdown Start
2016/10/20  Zero Bug Bounce
2016/12/01  Rampdown Phase 2
2017/01/26  Final Release Candidate
2017/03/23  General Availability
しばらくの間、ダウンロード、テスト用途で早期アクセスビルドが利用いただけます。
JDK 9 Early Access with Project Jigsaw
https://jdk9.java.net/jigsaw/
ダウンロードバイナリがありますので、ソースからビルドする必要はありません。

(2) JDKバージョン文字列体系の変更
Java 9では、JDKのバージョン文字列体系が変わります。
A New JDK 9 Version String Scheme
https://blogs.oracle.com/java-platform-group/entry/a_new_jdk_9_version
http://orablogs-jp.blogspot.jp/2015/12/a-new-jdk-9-version-string-scheme.html
体系は、マイナー、メジャー、およびクリティカル・パッチ・アップデート(CPU)のリリース番号を強調します。この新しい規約は、Major.Minor.Securityというバージョン文字列に従います。

(3) JEPのステータス変更
議論やレビューを受けて、JEPのオーナーがいくつかのJava Enhancement Proposals (JEP)のステータスを"Proposed to Target"に変更しました。
JEPs proposed to target JDK 9 (2015/12/3)
http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-December/003297.html
対象となるJEPは以下の通りです。
271: Unified GC Logging
http://openjdk.java.net/jeps/271
278: Additional Tests for Humongous Objects in G1
http://openjdk.java.net/jeps/278
279: Improve Test-Failure Troubleshooting
http://openjdk.java.net/jeps/279
280: Indify String Concatenation
http://openjdk.java.net/jeps/280

[Java, WLS] Concurrency Utilities support in WebLogic Server 12.2.1, Part Five: Multi-tenancy Support

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

Overview

WebLogic Server 12.2.1の主要機能の一つがMultitenancyのサポートで、これは単一のWebLogic Serverドメインに複数のパーティションを含めることができるというものです。この記事を読む前に、Part 1からPart 4までの記事をご覧ください。パーティションにデプロイされたアプリケーションは、Part 1からPart 4と同様、4種類の同時管理対象オブジェクト(concurrent managed object)を利用することができますし、また、グローバルの事前定義済み同時管理対象オブジェクト・テンプレート(concurrent managed object template)を使うこともできます。このテンプレートはアプリケーションをパーティションにデプロイした場合に、WebLogic Serverがこのアプリケーションのための同時管理対象オブジェクトをグローバル同時管理対象オブジェクト・テンプレートに基づいて作成します。思い出されるかもしれませんが、サーバ・スコープの最大同時長時間リクエスト(Max Concurrent Long Running Requests)と最大同時新規スレッド(Max Concurrent New Threads)があります。これらの設定はサーバ全体の長時間実行リクエスト、実行スレッドを制限するもので、これにはパーティションも含まれることにご注意ください。

Configuration

システム管理者はパーティション・スコープの同時管理対象オブジェクト・テンプレートを定義することができます。
Part 1(管理対象エグゼキュータ・サービス:ManagedExecutorService)やPart 3(管理対象スレッド・ファクトリ:ManagedThreadFactory)で述べたように、WebLogic Serverは同時実行タスクやスレッドの個数を制限する設定(最大同時長時間リクエストと最大同時新規スレッド)を以下のスコープに対して提供しています。
  • 管理対象エグゼキュータ・サービス(ManagedExecutorService)、管理対象スケジュール済エグゼキュータ・サービス(ManagedScheduledExecutorService)、管理対象スレッド・ファクトリ(ManagedThreadFactory)の各インスタンス
  • サーバのグローバル(ドメインレベル)ランタイム
  • サーバ
これらの中で、インスタンス・スコープとサーバ・スコープの制限はパーティションにも適用できます。その他に、システム管理者はパーティション・スコープの最大同時長時間リクエストと最大同時新規スレッドを定義することもできます。デフォルトの設定値は以下の通りです。
  • パーティション・スコープの最大同時長時間リクエスト:50
  • パーティション・スコープの最大同時新規スレッド:50
管理対象エグゼキュータ・サービス、管理対象スケジュール済エグゼキュータ・サービス、管理対象スレッド・ファクトリは、それぞれの3個の制限をいずれも超えない場合に限り、長時間実行タスクの発行、新規スレッドの作成を受け入れます。例えば、サーバのパーティションにデプロイされたアプリケーションがあり、長時間実行タスクがデフォルトの管理対象エグゼキュータ・サービスに対して発行されるとしましょう。以下の条件のいずれかに該当する場合、RejectedExecutionExceptionがスローされます。
  • この管理対象エグゼキュータ・サービスに対して発行されている10個の長時間実行タスクが進行中
  • このパーティション・スコープにある管理対象エグゼキュータ・サービスや管理対象スケジュール済エグゼキュータ・サービスに対して発行されている50個の長時間実行タスクが進行中
  • このサーバの管理対象エグゼキュータ・サービスや管理対象スケジュール済エグゼキュータ・サービスに対して発行されている100個の長時間実行タスクが進行中

Configure Partition Scope Concurrent Managed Object Templates

WebLogic Serverのシステム管理者はパーティションのために事前定義済みの同時管理対象オブジェクト・テンプレートを構成することができます。アプリケーションをパーティションにデプロイすると、WebLogic Serverは同時管理対象オブジェクト・インスタンスをパーティション・スコープの同時管理対象オブジェクト・テンプレートの設定に基づいて作成します。そしてこの作成された同時管理対象オブジェクト・インスタンスはすべてこのアプリケーションのスコープに入ります。

Example-1: Configure a Partition Scope ManagedThreadFactory template using WebLogic Administration Console

Step1)
WebLogic Server管理コンソールで[同時管理対象オブジェクト・テンプレートのサマリ]の[新規]ボタンをクリックすると、パーティション・スコープの管理対象スレッド・ファクトリ・テンプレートを作成することができます。[新規管理対象スレッド・ファクトリ・テンプレートの作成]ページが開くので、新たな管理対象スレッド・ファクトリ・テンプレートの名前やその他のパラメータを指定することができます。スコープをパーティションに選択してください。この例では、testMTFP1という管理対象スレッド・ファクトリ・テンプレートを partition1パーティションのために作成しています。


Step2)
パーティション・スコープの管理対象スレッド・ファクトリ・テンプレートを作成したら、当該パーティション上の任意のアプリケーションが自身のデフォルト管理対象スレッド・ファクトリ・インスタンスを取得し、利用することができます。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {

    @Resource(mappedName="testMTFP1")
    ManagedThreadFactory mtf;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Runnable aTask = new Runnable() {
            ...
        };
        Thread t = mtf.newThread(aTask);
        t.start();
        ...
    }
}

Configure Partition Scope Max Concurrent New Threads & Max Concurrent Long Running Requests

パーティションの最大同時新規スレッドは、サーバの当該パーティションにおけるすべての管理対象スレッド・ファクトリが作成するスレッドの制限です。パーティションの最大同時長時間リクエストは、サーバの当該パーティションで管理対象エグゼキュータ・サービスや管理対象スケジュール済エグゼキュータ・サービスに対して発行された同時長時間タスクの制限です。

パーティションの最大同時新規スレッドと最大同時長時間リクエストは、WebLogic Server管理コンソールの[(パーティション名)の設定]ページで編集することができます。この例では、partition1パーティションの最大同時新規スレッド、最大同時長時間リクエストをそれぞれ30と80に設定しています。


Related Articles:

詳細は、ドキュメントの以下の項をご覧下さい。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359

[Java, WLS] Concurrency Utilities support in WebLogic Server 12.2.1, Part Four: ContextService

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

Overview

ContextService(コンテキスト・サービス)はコンテキストのプロキシオブジェクトを生成するためにあり、プロキシオブジェクトを作成するためのcreateContextualProxyメソッドを提供しています。このプロキシオブジェクトメソッドは後に取得したコンテキスト内で動作します。
Weblogic Serverではデフォルトの事前構成済みコンテキスト・サービスを提供しているため、アプリケーションは設定せずにWebコンポーネントやEJBコンポーネントで簡単に利用できます。ではデフォルトのコンテキスト・サービスを使う簡単な例から始めましょう。

Example-1: Execute a task with the creator's context using a ExecutorService

Step1)
タスクを作成します。この例ではタスクはRunnableを拡張しています。
public class SomeTask implements Runnable {
    public void run() {
        // do some work
    }
}
Step2)
SomeServlet.javaはデフォルトのコンテキスト・サービスを注入し、そのコンテキスト・サービスを使って新しいコンテキスト・オブジェクト・プロキシをSomeTaskのために作成した上で、コンテキスト・オブジェクト・プロキシをJava SEのExecutorServiceに対して発行します。run()メソッドの各呼び出しはコンテキスト・オブジェクト・プロキシを作成したServletのコンテキストを有しています。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {
    @Resource ContextService cs;

    @Resource ManagedThreadFactory mtf;
    ExecutorService exSvc = Executors.newThreadPool(10, mtf);

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        SomeTask taskInstance = new SomeTask();
        Runnable rProxy = cs.createContextualProxy(taskInstance, Runnable.class);
        Future f =  = exSvc.submit(rProxy);

        // Process the result and reply to the user
    }
}

Runtime Behavior


Application Scoped Instance

コンテキスト・サービスはアプリケーション・スコープで、各アプリケーションには自身でデフォルトのコンテキスト・サービス・インスタンスを持っており、コンテキスト・サービス・インスタンスのライフサイクルはアプリケーションにバインドされています。コンテキスト・サービスが作成するプロキシ・オブジェクトもまたアプリケーション・スコープゆえ、アプリケーションが停止すると、インターフェースへのプロキシメソッドの呼び出しはIllegalStateExceptionをスローして失敗しますし、createContextualProxy()の呼び出しもまたIllegalArgumentExceptionをスローします。
WebLogic Serverはデフォルトのコンテキスト・サービス・インスタンスを各アプリケーションのために提供するだけで、コンテキスト・サービスの設定方法は提供しません。

Context Propagation

コンテキスト・サービスはコンテキスト・プロキシ・オブジェクト作成時にアプリケーション・コンテキストを取得し、コンテキスト・プロキシ・オブジェクトのメソッドを呼び出す前にその取得したアプリケーションコンテキストを伝播します。そのため、プロキシ・オブジェクト・メソッドもまた、アプリケーション・コンテキストを有して実行することができます。
以下の4種類のアプリケーション・コンテキストが伝播されます。

  • JNDI
  • クラスローダ(ClassLoader)
  • セキュリティ(Security)
  • ワークエリア(WorkArea)

伝播されるコンテキストの種類は同時管理対象オブジェクトの4種類と同じです。

Related Articles:

詳細は、ドキュメントの以下の項をご覧下さい。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359

[Java, WLS] Concurrency Utilities support in WebLogic Server 12.2.1, Part Three: ManagedThreadFactory

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

Overview

ManagedThreadFactory(管理対象スレッド・ファクトリ)はWebLogic Serverが管理するスレッドを作成するために存在します。これはjava.util.concurrent.ThreadFactoryを拡張したもので、新規追加されたメソッドはありません。この管理対象スレッド・ファクトリはThreadFactory由来のnewThreadメソッドを提供し、ThreadFactoryを必要とする、例えばjava.util.concurrent.ExecutorsでJava SE concurrency utilities APIとともに利用できます。
Weblogic Serverは各アプリケーションに対しデフォルトの事前構成済み管理対象スレッド・ファクトリを提供しているので、アプリケーションはWebコンポーネントやEJBコンポーネントで設定しなくても簡単に利用できます。Servletでデフォルトの管理対象スレッド・ファクトリを使う簡単な例からはじめてみましょう。

Example-1: Use Default ManagedThreadFactory to Create a Thread in a Servlet

Step1)
スレッドが中断されるまでデータをログ出力するRunnableなメソッドを作成します。
public class LoggerTask implements Runnable {
    @Override
    public void run() {
        while (!Thread.interrupted()) {
            // collect data and write them to database or file system
        }
    }
}
Step2)
SomeServlet.javaがデフォルトの管理対象スレッド・ファクトリを注入し、スレッド作成に利用します。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {
    @Resource ManagedThreadFactory mtf;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Thread t = mtf.newThread(new LoggerTask());
        t.start();
        // Do something else and reply to the user
    }
}

Runtime Behavior

Application Scoped Instance

管理対象スレッド・ファクトリはアプリケーション・スコープです。各アプリケーションは自身で管理対象スレッド・ファクトリ・インスタンスを持っており、管理対象スレッド・ファクトリ・インスタンスのライフサイクルはアプリケーションにバインドされています。管理対象スレッド・ファクトリが作成したスレッドもまたアプリケーション・スコープなので、アプリケーションが停止した場合、関連するスレッドも中断されます。
各アプリケーションは自身でデフォルトの管理対象スレッド・ファクトリ・インスタンスを持っていますが、その他に、アプリケーション管理者やシステム管理者がカスタマイズされた管理対象スレッド・ファクトリを定義することができます。WebLogic Server管理コンソールでグローバルに定義された管理対象スレッド・ファクトリ・テンプレート(後でご紹介します)であってもランタイムではアプリケーション・スコープであることにご注意ください。

Context Propagation

管理対象スレッド・ファクトリは管理対象スレッド・ファクトリ作成時にアプリケーション・コンテキストを取得(newThreadメソッドを呼び出したタイミングではありません)し、取得したアプリケーション・コンテキストをタスク実行前に伝播するので、タスクもまたアプリケーション・コンテキストを持って実行できます。
以下の4種類のアプリケーション・コンテキストが伝播されます。
  • JNDI
  • クラスローダ(ClassLoader)
  • セキュリティ(Security)
  • ワークエリア(WorkArea)
伝播されたコンテキストタイプは4種類の同時管理対象オブジェクトの4種類と同じです。

Limit of Running Threads

newThreadメソッドが呼び出されると、WebLogic Serverは新しいスレッドを作成します。実行中スレッドの個数が過大である場合、サーバパフォーマンスや安定性に悪影響を与えるため、WebLogic Serverは管理対象スレッド・ファクトリの実行中スレッドの個数を制限するための設定(最大同時新規スレッド)をインスタンス、サーバのグローバル(ドメインレベル)ランタイム、サーバで提供しています。デフォルト設定値は以下の通りです。
  • 10:管理対象スレッド・ファクトリ・インスタンス
  • 50:サーバのグローバル(ドメインレベル)ランタイム
  • 100:サーバ
いずれかの制限を超えた場合、管理対象スレッド・ファクトリのnewThread()メソッド呼び出しでnullを返します。
グローバル(ドメインレベル)ランタイムスコープの最大同時新規スレッドと、サーバスコープの最大同時新規スレッドの違いに着目してください。WebLogic Server 12.2.1の重要機能の一つが、単一のWebLogic Serverドメインには複数のパーティションを含めることができるMultitenancyサポートです。グローバル(ドメインレベル)ランタイムの最大同時新規スレッドとは、グローバル(ドメインレベル)ランタイムのために、すべてのサーバの管理対象スレッド・ファクトリが作成したスレッドの最大個数であって、これにはサーバで動作するパーティションスコープ内で作成されたスレッドは含まれません。対して、サーバスコープの最大同時新規スレッドとはサーバのすべての管理対象スレッド・ファクトリが作成したスレッドの最大個数ですが、こちらの場合はパーティションのスコープ内で作成されたスレッドを含みます。パーティションスコープの最大同時新規スレッドについては、Part 5 - Multitenancy supportのエントリをご覧下さい。
Concurrency Utilities support in WebLogic Server 12.2.1, Part Five: Multi-tenancy Support
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic5
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_41.html
管理対象スレッド・ファクトリは3個の上限値をいずれも超えない場合にのみ新たなスレッドを返します。例えば、サーバのグローバル(ドメインレベル)ランタイムにデプロイされたアプリケーションがあって、ServletやEJBがデフォルトの管理対象スレッド・ファクトリのnewThreadメソッドを呼び出したとしましょう。そこで
  • この管理対象スレッド・ファクトリが作成した10個の実行中スレッドがある
  • サーバのグローバル(ドメインレベル)ランタイムスコープの管理対象スレッド・ファクトリが作成した50個の実行中スレッドがある
  • サーバの管理対象スレッド・ファクトリが作成した100個の実行中スレッドがある
のいずれかの場合にnullを返します。後の章で最大同時新規スレッドの指定方法の例をご紹介します。

Configuration

前述の通り、各アプリケーションは自身でデフォルトの管理対象スレッド・ファクトリを持っており、以下の値がデフォルトで設定されています。
  • 最大同時スレッド数:10
  • デフォルトスレッド優先度:Thread.NORM_PRIORITY
また、
  • サーバ全体に対する最大同時スレッド数:100
がデフォルトで設定されています。デフォルトの設定が十分ではない場合、設定方法を記載していますので続きを読んでください。例えば、より高い優先度を持つスレッドを作成する必要がある場合、管理対象スレッド・ファクトリを構成する必要がありますし、100個を上回る同時実行スレッドがサーバに存在する可能性がある場合、サーバスコープの最大同時新規スレッドを変更する必要があるでしょう。

Configure ManagedThreadFactories

名前、最大同時新規スレッド、優先度を管理対象スレッド・ファクトリ内で構成します。
  • 名前:管理対象スレッド・ファクトリを識別する文字列
  • 最大同時新規スレッド:管理対象スレッド・ファクトリが作成する実行スレッド数の上限
  • 優先度:スレッドの優先度
アプリケーションはDD(デプロイメント・ディスクリプタ:weblogic-application.xml/weblogic-ejb-jar.xml/weblogic.xml)で管理対象スレッド・ファクトリを構成することができます。その管理対象スレッド・ファクトリ・インスタンスを@Resource(mappedName=<管理対象スレッド・ファクトリの名前>)で取得してスレッドを作成します。アノテーションの他に、アプリケーションは管理対象スレッド・ファクトリ・インスタンスを<resource-env-description>や<resource-env-ref>をDDで指定することで、JNDIにバインドすれば、JNDI Naming Contextを使って検索することができます。詳細は以下の製品ドキュメントをご覧下さい。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359
また、WebLogicシステム管理者は事前定義済みの管理対象スレッド・ファクトリ・テンプレートを構成することができます。アプリケーションをデプロイすると、WebLogic Serverが管理対象スレッド・ファクトリ・テンプレートの設定に基づいて管理対象スレッド・ファクトリを作成します。作成された管理対象スレッド・ファクトリは全てこのアプリケーションのスコープに入っています。

Example-2: Configure a ManagedThreadFactory in weblogic.xml

Step1)
管理対象スレッド・ファクトリを定義します。
<!-- weblogic.xml -->
<managed-thread-factory>
    <name>customizedMTF</name>
    <priority>3</priority>
    <max-concurrent-new-threads>20</max-concurrent-new-threads>
</managed-thread-factory>
Step2)
管理対象スレッド・ファクトリ・インスタンスを取得して利用します。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {

    @Resource(mappedName="customizedMTF")
    ManagedThreadFactory mtf;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Runnable aTask = new Runnable() {
            ...
        };
        Thread t = mtf.newThread(aTask);
        t.start();
        ...
    }
}

Example-3: Configure a ManagedThreadFactory template using WebLogic Administration Console

個別アプリケーションではなく複数のアプリケーションに要件がある場合、管理対象スレッド・ファクトリ・テンプレートをグローバルに作成して全てのアプリケーションで利用可能にすることができます。例えば、すべてのアプリケーションから低優先度のスレッドを作成する必要がある場合、管理対象スレッド・ファクトリ・テンプレートを構成する必要があります。前述のように、管理対象スレッド・ファクトリ・テンプレートがあれば、WebLogic Serverはテンプレートの設定に基づいて管理対象スレッド・ファクトリ・インスタンスを各アプリケーションのために作成します。

Step1)
WebLogic Server管理コンソールから、同時管理対象オブジェクト・テンプレートのサマリーのページで、[新規]をクリックすると、管理対象スレッド・ファクトリ・テンプレートを作成することができます。[管理対象スレッド・ファクトリ・テンプレートの作成]ページで、管理対象スレッド・ファクトリ・テンプレートの名前やその他のパラメータを指定することができます。この例では、優先度3を持つtestMTFという管理対象スレッド・ファクトリ・テンプレートを作成しています。



Step2)
管理対象スレッド・ファクトリ・テンプレートを作成すると、WebLogic Serverの任意のアプリケーションが自身の管理対象スレッド・ファクトリ・インスタンスを取得して利用することができます。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {

    @Resource(mappedName="testMTF")
    ManagedThreadFactory mtf;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Runnable aTask = new Runnable() {
            ...
        };
        Thread t = mtf.newThread(aTask);
        t.start();
        ...
    }
}

Configure Max Concurrent New Threads in global (domain-level) runtime scope or server scope


Example-4: Configure global (domain-level) runtime Scope Max Concurrent New Threads

グローバル(ドメインレベル)ランタイムの最大同時新規スレッドとは、サーバのグローバル(ドメインレベル)ランタイムの管理対象スレッド・ファクトリが作成するスレッド数の上限であり、これには当該サーバで動作するパーティションスコープ内で作成されたスレッドの個数は含まれません。
WebLogic Server管理コンソールの[(ドメイン名)の設定]画面で、グローバル(ドメインレベル)ランタイムの最大同時新規スレッド数を編集できます。この例では、base_domainのグローバル(ドメインレベル)ランタイムの最大同時新規スレッドを100に設定しています。

Example-5: Configure Server Scope Max Concurrent New Threads

サーバの最大同時新規スレッドは当該サーバのすべての管理対象スレッド・ファクトリが作成する実行スレッド数の上限です。
WebLogic Server管理コンソールの[(サーバ名)の設定]画面で、サーバの最大同時新規スレッドを編集できます。この例では、myserverの最大同時新規スレッドを200に設定しています。


Related Articles:

詳細は、ドキュメントの以下の項をご覧下さい。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359

[Java, WLS] Concurrency Utilities support in WebLogic Server 12.2.1, Part Two: ManagedScheduledExecutorService

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

Overview

ManagedScheduledExecutorService(管理対象スケジュール済エグゼキュータ・サービス)はManagedExecutorService(管理対象エグゼキュータ・サービス)を拡張したもので、管理対象エグゼキュータ・サービス由来の全てのメソッドは管理対象スケジュール済エグゼキュータ・サービスでサポートされています。それゆえ、この記事の前に是非Part 1をお読み下さい。
Concurrency Utilities support in WebLogic Server 12.2.1, Part One: ManagedExecutorService
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic1
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_66.html
管理対象スケジュール済エグゼキュータ・サービスはjava.util.concurrent.ScheduledExecutorServiceを拡張したものゆえ、特定の遅延後もしくは定期的に実行するタスクのスケジュールのためのScheduledExecutorService由来のメソッド(schedule、scheduleAtFixedRate、scheduleAtFixedDelay)を提供します。それ以外に、管理対象スケジュール済エグゼキュータ・サービスは、トリガーベースのカスタムスケジュールでタスクを動作するための新たなメソッドを提供します。こうした全てのタスクはWebLogic Serverが提供するスレッド上で動作します。
Weblogic Serverはデフォルトの事前構成済み管理対象スケジュール済エグゼキュータ・サービスを各アプリケーションのために提供しているので、これを設定せずにWebコンポーネントやEJBコンポーネントで簡単に利用できます。デフォルトの管理対象スケジュール済エグゼキュータ・サービスをServletContextListenerで使うという簡単な例から始めましょう。

Example-1: Use Default ManagedScheduledExecutorService to Submit a Periodical Task

Step1)
データをログ出力するタスクを作成します。
public class LoggerTask implements Runnable {
    @Override
    public void run() {
        // collect data and write them to database or file system
    }
}
Step2)
SomeListener.javaがデフォルトの管理対象スケジュール済エグゼキュータ・サービスを注入します。このコードはcontextInitializedでタスクを定期的にスケジューリングし、contextDestroyedでタスクをキャンセルします。
@WebListener
public class SomeListener implements ServletContextListener {
    Future loggerHandle = null;
    @Resource ManagedScheduledExecutorService mses;


    public void contextInitialized(ServletContextEvent scEvent) {
        // Creates and executes LoggerTask every 5 seconds, beginning at 1 second later
        loggerHandle = mses.scheduleAtFixedRate(new LoggerTask(), 1, 5, TimeUnit.SECONDS);
    }

    public void contextDestroyed(ServletContextEvent scEvent) {
        // Cancel and interrupt our logger task
        if (loggerHandle != null) {
            loggerHandle.cancel(true);
        }
    }
}

Runtime Behavior

管理対象スケジュール済エグゼキュータ・サービスはPart 1のRuntime Behaviorで説明したすべての機能を提供します。
Concurrency Utilities support in WebLogic Server 12.2.1, Part One: ManagedExecutorService
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic1
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_66.html
前述の通り、管理対象スケジュール済エグゼキュータ・サービスはタスクを定期的もしくはカスタムスケジュールで実行することができるので、タスクは複数回実行される可能性があります。長時間実行タスクの場合、タスクが1回以上実行されるとしても、WebLogic Serverは最初の実行時にこの長時間実行タスクのために1スレッドのみ作成します。

Configuration


Configure ManagedScheduledExecutorService

管理対象スケジュール済エグゼキュータ・サービスには管理対象エグゼキュータ・サービスと同じ構成(名前、ディスパッチ・ポリシー、最大同時長時間リクエスト、長時間実行の優先度)があります。カスタマイズされた管理対象スケジュール済エグゼキュータ・サービスを取得、利用する方法もまた管理対象エグゼキュータ・サービスに似ています。

Example-2: Configure a ManagedScheduledExecutorService in weblogic.xml

Step1)
管理対象スケジュール済エグゼキュータ・サービスを定義します。
<!-- weblogic.xml -->
<work-manager>
<name>customizedWM</name>
    <max-threads-constraint>
        <name>max</name>
        <count>1</count>
    </max-threads-constraint>
</work-manager>
<managed-scheduled-executor-service>
    <name>customizedMSES</name>
    <dispatch-policy>customizedWM</dispatch-policy>
    <long-running-priority>10</long-running-priority>
    <max-concurrent-long-running-requests>20</max-concurrent-long-running-requests>
</managed-scheduled-executor-service>
Step2)
管理対象スケジュール済エグゼキュータ・サービス・インスタンスを取得して利用します。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {
    @Resource(mappedName="customizedMSES")
    ManagedScheduledExecutorService mses;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Runnable aTask = new Runnable() {
            ...
        };
        mses.schedule(aTask, 5, TimeUnit.SECONDS);
        ...
    }
}

Example-3: Configure a ManagedScheduledExecutorService template using WebLogic Administration Console

Step1)
WebLogic Server管理コンソールで、[同時管理対象オブジェクト・テンプレートのサマリ]ページで[新規]ボタンをクリックすると、管理対象スケジュール済エグゼキュータ・サービス・テンプレートを作成することができます。[新規管理対象スケジュール済エグゼキュータ・サービス・テンプレートの作成]ページで、新たな管理対象スケジュール済エグゼキュータ・サービス・テンプレートの名前やその他のパラメータを指定することができます。この例では、testMSESという管理対象スケジュール済エグゼキュータ・サービスを作成し、事前定義済みのワークマネージャtestWMにマッピングしています。

Step2)
管理対象スケジュール済エグゼキュータ・サービス・テンプレートを作成したら、WebLogic Serverの任意のアプリケーションが自身の管理対象スケジュール済エグゼキュータ・サービス・インスタンスを取得して利用することができます。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {
    @Resource(mappedName="testMSES")
    ManagedScheduledExecutorService mses;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Runnable aTask = new Runnable() {
            ...
        };
        mses.schedule(aTask, 5, TimeUnit.SECONDS);
        ...
    }
}

Related Articles:

詳細は、ドキュメントの以下の項をご覧下さい。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359

[Java, WLS] Concurrency Utilities support in WebLogic Server 12.2.1, Part One: ManagedExecutorService

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

Overview

ManagedExecutorService(管理対象エグゼキュータ・サービス)はWebLogic Serverが提供するスレッドで非同期でタスクを実行するためにあります。このサービスはjava.util.concurrent.ExecutorServiceの拡張ですが、新しいメソッドを持ちません。そのため、ExecutorSrevice由来のメソッド(execute、submit、invokeAll、invokeAny)を提供しますが、ライフサイクルのメソッド(awaitTermination、isTerminated、isShutdown、shutdown、shutdownNow)は無効にされており、使うとIllegalStateExceptionが発生します。
Weblogic Serverは事前構成済みのデフォルトの管理対象エグゼキュータ・サービスを各アプリケーションのために提供しており、アプリケーションは何も設定せずに簡単にこのサービスをWebコンポーネントやEJBコンポーネントで利用できます。デフォルトの管理対象エグゼキュータ・サービスをServletで使うという簡単な例からはじめてみましょう。

Example-1: Use Default ManagedExecutorService to Submit an Asynchronous Task in a Servlet

Step1)
非同期タスクを作成します。非同期タスクはjava.util.concurrent.Callableもしくは java.lang.Runnableのいずれかを実装する必要があります。タスクはjavax.enterprise.concurrent.ManagedTaskを実装して、識別情報やManagedTaskListener、もしくはタスクの追加実行プロパティを提供することができます。
JSR 236: Concurrency Utilities for JavaTM EE
https://jcp.org/en/jsr/detail?id=236
public class SomeTask implements Callable<Integer> {
    public Integer call() {
        // Interact with a database, then return answer.
    }
}
Step2)
SomeServlet.java がデフォルトの管理対象エグゼキュータ・サービスを注入し、タスクを管理対象エグゼキュータ・サービスに対し発行します。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {
    @Resource ManagedExecutorService mes;

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Create and submit the task instances
        Future<Integer> result = mes.submit(new SomeTask());

        // do something else

        try {
            // Wait for the result
            Integer value = result.get();

            // Process the result and reply to the user

        } catch (InterruptedException | ExecutionException e) {
            throw new ServletException("failed to get result for SomeTask", e);
        }
    }
}

Runtime Behavior


Application Scoped Instance

上図には2個のアプリケーション(赤はA、緑はB)があります。この2個のアプリケーションがタスクを異なる管理対象エグゼキュータ・サービス・インスタンスに発行していることがわかります。これは管理対象エグゼキュータ・サービスがアプリケーションスコープにあるためです。各アプリケーションにはそれぞれ固有の管理対象エグゼキュータ・サービス・インスタンスがあり、管理対象エグゼキュータ・サービス・インスタンスのライフサイクルはアプリケーションに紐付いています。管理対象エグゼキュータ・サービスに発行された非同期タスクもまたアプリケーションスコープであるため、アプリケーションをシャットダウンすると、関連する非同期タスクやスレッドはキャンセルもしくは中断されます。
各アプリケーションはそれぞれデフォルト管理対象エグゼキュータ・サービス・インスタンスを持ちます。それに加え、アプリケーションやシステムの管理者はカスタマイズされた管理対象エグゼキュータ・サービスを定義することができます。管理今ソースでグローバルに定義された管理対象エグゼキュータ・サービス・テンプレート(後述します)は実行時にはアプリケーションスコープであることにご注意ください。

Context Propagation

上図で、アプリケーションAがタスクを発行すると、そのタスクはアプリケーションAのコンテキストでラップされ、アプリケーションBがタスクを発行すると、そのタスクはアプリケーションBのコンテキストでラップされます。これは管理対象エグゼキュータ・サービスがアプリケーションコンテキストをタスク発行時に捕獲し、その後捕獲したアプリケーションコンテキストをタスク実行前に伝播するため、正しい振る舞いです。そえゆえタスクもアプリケーションコンテキストを伴って実行します。
4種類のアプリケーションコンテキスト、JNDI、クラスローダ、セキュリティ、ワークエリアが伝播されます。伝播されたコンテキストタイプは4種類のコンカレント管理対象オブジェクトと同じものです。

Self Tuning(for short-running tasks)

上図で、管理対象エグゼキュータ・サービスが短時間実行されるタスクをワークマネージャに対して発行すること、長時間実行されるタスク用に新たなスレッドを生成することがわかります。
Workload Management in WebLogic Server 9.0
http://www.oracle.com/technetwork/articles/entarch/workload-management-088692.html
ご存じかもしれませんが、WebLogic Serverは、一定期間(デフォルトでは10分)スレッドが引き続き動作している(アイドル状態ではない)場合、スタックしたと判断します。そのため、通常はタスクはその時間を超えて継続する場合、長時間実行するタスクの可能性があります。ManagedTask.LONGRUNNING_HINTプロパティ(JSR 236の仕様をご覧ください)にtrueを設定し、長時間実行するタスクとして実行させることができます。
JSR 236: Concurrency Utilities for JavaTM EE
https://jcp.org/en/jsr/detail?id=236
各管理対象エグゼキュータ・サービスはアプリケーションスコープのワークマネージャと関連づけられています。デフォルトでは、管理対象エグゼキュータ・サービスはアプリケーションのデフォルトのワークマネージャと関連付けられています。アプリケーションやシステムの管理者はディスパッチ・ポリシーを指定し、管理対象エグゼキュータ・サービスをアプリケーションスコープのワークマネージャと関連付けることができます。後の章でディスパッチ・ポリシーの利用例をご紹介します。
管理対象エグゼキュータ・サービスをワークマネージャと関連付けることで、WebLogic Serverはシングルスレッドプールのスレッドを活用し、非同期タスクをアプリケーションから実行します。非同期タスクはServletやRMIリクエストとともに動的に優先度を付けることもできます。

Limit of Concurrent Long-running Requests

前述の通り、長時間実行するタスクはシングルスレッドプールのスレッドを活用せず、WebLogic Serverが各タスク用に新規のスレッドを作成します。過剰に多くの実行中スレッドが存在するとサーバーのパフォーマンスと安定性に影響を及ぼす可能性があるため、WebLogic Serverは、同時長時間実行リクエストの最大数を管理対象エグゼキュータ・サービス/ManagedScheduledExecutorService(管理対象スケジュール済エグゼキュータ・サービス)インスタンス、サーバのグローバル(ドメインレベル)ランタイム、サーバにて提供します。デフォルト設定は以下のようになっています。
  • 管理対象エグゼキュータ・サービス/ 管理対象スケジュール済エグゼキュータ・サービス・インスタンス:10
  • サーバーのグローバル(ドメインレベル)ランタイム:50
  • サーバ:100
制限のいずれかを超過すると、管理対象エグゼキュータ・サービス/管理対象スケジュール済エグゼキュータ・サービスはRejectedExecutionExceptionをスローすることによって長時間実行タスクの発行を拒否します。
グローバル(ドメインレベル)ランタイムスコープの同時長時間実行リクエストの最大数と、サーバスコープの同時長時間実行リクエストの最大数に違いがあることにご注意ください。WebLogic Server 12.2.1の重要な機能の一つはMultitenancyのサポートで、一つのWebLogic Serverドメインに複数のパーティションを含めることができます。グローバル(ドメインレベル)ランタイムスコープの同時長時間実行リクエストの最大数は、グローバル(ドメインレベル)ランタイム用のサーバ上の管理対象エグゼキュータ・サービス/管理対象スケジュール済エグゼキュータ・サービスの全てが発行した同時長時間実行タスクの最大数であり、これはサーバ上で動作しているパーティションスコープ内で発行された同時長時間実行タスクを除くのに対し、サーバスコープの同時長時間実行リクエストの最大数は、サーバ上の管理対象エグゼキュータ・サービス/管理対象スケジュール済エグゼキュータ・サービスの全てが発行した同時長時間実行タスクの最大数であり、これにはグローバル(ドメインレベル)のランタイム、パーティション内で発行された同時長時間実行タスクを含みます。パーティションスコープの同時長時間実行タスクの最大数については、Part 5 - Multitenancy supportのエントリをご覧下さい。
Concurrency Utilities support in WebLogic Server 12.2.1, Part Five: Multi-tenancy Support
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic5
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_41.html
管理対象エグゼキュータ・サービス/管理対象スケジュール済エグゼキュータ・サービスは3個の制限のいずれも超えない場合のみ、同時長時間実行タスクの発行を受け付けます。例えば、サーバーのグローバル(ドメインレベル)ランタイムにデプロイされたアプリケーションがあって、長時間実行中のタスクをデフォルトの管理対象エグゼキュータ・サービスに発行したとします。そこで、
  • 管理対象エグゼキュータ・サービスに発行された進行中の長時間実行タスクが10個ある
  • グローバル(ドメインレベル)ランタイムスコープの管理対象エグゼキュータ・サービス/管理対象スケジュール済エグゼキュータ・サービスに発行された進行中の長時間実行タスクが50個ある
  • サーバの管理対象エグゼキュータ・サービス/管理対象スケジュール済エグゼキュータ・サービスに発行された進行中の長時間実行タスクが100個ある
のいずれかの場合に、RejectedExecutionExceptionがスローされます。同時長時間実行タスクの最大数の設定方法は後の章でご紹介します。

Configuration

前述の通り、各アプリケーションは個々の管理対象エグゼキュータ・サービスを持ちます。デフォルトの管理対象エグゼキュータ・サービスはデフォルトのワークマネージャと関連付けられており、次の設定値がデフォルトで設定されています。
  • 同時長時間実行タスクの最大数:10
  • スレッド優先度:Thread.NORM_PRIORITY
また、
  • サーバ全体に対する同時長時間実行タスクの最大数:100
がデフォルトで設定されています。デフォルトの設定が十分ではない場合、設定方法を記載していますので続きを読んでください。例えば、事前定義済みのワークマネージャに対する短時間実行タスクをより高い優先度で関連付ける場合、管理対象エグゼキュータ・サービスを構成する必要がありますし、サーバで同時長時間実行タスクが100を超える場合にはサーバスコープの同時長時間実行タスクの最大数を変更する必要があるでしょう。

Configure ManagedExecutorServices

名前、ディスパッチ・ポリシー、長時間実行リクエストの最大数、長時間実行プライオリティを管理対象エグゼキュータ・サービス内で設定します。
  • 名前:管理対象エグゼキュータ・サービスを識別する文字列
  • ディスパッチ・ポリシー:短時間実行タスクを発行するワークマネージャの名前
  • 最大同時長時間リクエスト:この管理対象エグゼキュータ・サービスに発行された同時長時間実行タスク個数の上限
  • 長時間実行の優先度:長時間実行タスクのために作成されたスレッドの優先度 
アプリケーションはDD(デプロイメント・ディスクリプタ:weblogic-application.xml/weblogic-ejb-jar.xml/weblogic.xml)で管理対象エグゼキュータ・サービスを構成できます。管理対象エグゼキュータ・サービス・インスタンスを@Resource(mappedName=<管理対象エグゼキュータ・サービスの名前>)で取得してから、タスクを発行します。アノテーションの他に、DDで<resource-env-description> と <resource-env-ref> を指定することで、アプリケーションは管理対象エグゼキュータ・サービス・インスタンスをJNDIにバインドすれば、JNDI Naming Contextを使って検索します。詳細は以下の製品ドキュメントをご覧下さい。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359
また、WebLogicシステム管理者は事前定義済みの管理対象エグゼキュータ・サービス・テンプレートを構成することができます。アプリケーションをデプロイすると、WebLogic Serverが管理対象エグゼキュータ・サービス・テンプレートの設定に基づいて管理対象エグゼキュータ・サービスを作成します。作成された管理対象エグゼキュータ・サービスは全てこのアプリケーションのスコープに入っています。

Example-2: Configure a ManagedExecutorService in weblogic.xml

Step1)
管理対象エグゼキュータ・サービスを定義します
<!-- weblogic.xml --> 
<work-manager>
<name>customizedWM</name>
  <max-threads-constraint>
    <name>max</name>
    <count>1</count>
  </max-threads-constraint>
</work-manager>
<managed-executor-service>
  <name>customizedMES</name>
  <dispatch-policy>customizedWM</dispatch-policy>
  <long-running-priority>10</long-running-priority>
  <max-concurrent-long-running-requests>20</max-concurrent-long-running-requests>
</managed-executor-service>
Step2)
管理対象エグゼキュータ・サービス・インスタンスを取得して利用します
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {
    @Resource(mappedName="customizedMES")
     ManagedExecutorService mes;

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         Runnable aTask = new Runnable() {
             ...
         };
         mes.submit(aTask);
         ...
    }
}

Example-3: Configure a ManagedExecutorService template using WebLogic Administration Console

個別アプリケーションではなく複数のアプリケーションに要件がある場合、管理対象エグゼキュータ・サービス・テンプレートをグローバルに作成して全てのアプリケーションで利用可能にすることができます。例えば、すべてのアプリケーションから低優先度の短時間実行タスクを実行する必要がある場合、管理対象エグゼキュータ・サービス・テンプレートを構成する必要があります。管理対象エグゼキュータ・サービス・テンプレートはバッチジョブでも有用です。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Prerequisite Steps Configure the JobRepository Tables, Batch Data Source, and Managed Executor Service
https://docs.oracle.com/middleware/1221/wls/CNFGD/batch-apps.htm#CNFGD374
前述の通り、管理対象エグゼキュータ・サービス・テンプレートがある場合、WebLogic Serverは管理対象エグゼキュータ・サービス・インスタンスをテンプレートの設定に従って各アプリケーション用に作成します。

Step1)
WebLogic Server管理コンソールから、同時管理対象オブジェクト・テンプレートのサマリーのページで、[新規]をクリックすると、管理対象エグゼキュータ・サービス・テンプレートを作成することができます。[管理対象エグゼキュータ・サービス・テンプレートの作成]ページで、管理対象エグゼキュータ・サービス・テンプレートの名前やその他のパラメータを指定することができます。この例では、testMESという管理対象エグゼキュータ・サービス・テンプレートを作成し、testWMという事前定義済みワークマネージャにマッピングしています。

Step2)
管理対象エグゼキュータ・サービス・テンプレートを作成すると、WebLogic Serverの任意のアプリケーションは管理対象エグゼキュータ・サービス・インスタンスを取得して利用することができます。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {

    @Resource(mappedName="testMES")
    ManagedExecutorService mes;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Runnable aTask = new Runnable() {
            ...
        };
        mes.submit(aTask);
        ...
    }
}

Configure Max Concurrent Long Running Requests Running in global (domain-level) runtime scope or server scope


Example-4: Configure global (domain-level) runtime Scope Max Concurrent Long Running Requests

グローバル(ドメインレベル)ランタイムの最大同時長時間リクエストとは、サーバのグローバル(ドメインレベル)ランタイムの全ての管理対象エグゼキュータ・サービスやManagedScheduledExecutorServiceに対して発行された同時長時間実行タスク個数の上限です。これには当該サーバで動作しているパーティションスコープ内で発行された長時間実行タスクを含まれません。
WebLogic Server管理コンソールの[(ドメイン名)の設定]画面で、グローバル(ドメインレベル)ランタイムの最大同時長時間リクエストを編集できます。この例では、base_domainのグローバル(ドメインレベル)ランタイムの最大同時長時間リクエストを80に設定しています。


Example-5: Configure Server Scope Max Concurrent Long Running Requests

サーバの最大同時長時間リクエストとは、当該サーバの全ての管理対象エグゼキュータ・サービスと管理対象スケジュール済エグゼキュータ・サービスに対して発行された同時長時間実行タスク個数の上限です。
WebLogic Server管理コンソールの[(サーバ名)の設定]画面で、サーバの最大同時長時間リクエストを編集できます。この例では、myserverの最大同時長時間リクエストを200に設定しています。


Related Articles:

詳細は、ドキュメントの以下の項をご覧下さい。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359

[Java, WLS] Concurrency Utilities support in WebLogic Server 12.2.1

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

Java EE 7をサポートしているため、WebLogic Server 12.2.1はJava EE Concurrency Utilities (JSR236)仕様をサポートしています。
この仕様は、(ServletやEJBといった)Java EEアプリケーションコンポーネントから並列性を利用するため、シンプルかつ標準化されたAPI(4種類の管理対象オブジェクト)を提供します。
この4種類の並列性管理対象オブジェクトは、パッケージjavax.enterprise.concurrent packageのインターフェースManagedExecutorService、ManagedScheduledExecutorService、ManagedThreadFactory、ContextServiceを実装します。
依然としてServletやEJB内で直接java.lang.Threadやjava.util.Timerといった共通のJava SE concurrency APIを使っている場合、Java EE Concurrency Utilityを使うことを強く推奨します。Java SE concurrency APIを使って作成されたスレッドはWebLogic Serverで管理されないので、通常これらの管理対象外のスレッドからは、WebLogic Serverが管理するサービスやリソースを利用できません。Java EE Concurrency Utilitiesを使うことで、非同期タスクはWebLogic Serverで管理されたスレッドで動作します
Since WebLogic Serverにはこれらのスレッドや非同期タスクに関する知識があるので、以下の操作をすることでWebLogic Serverはスレッドや非同期タスクを管理します。
  • 適切な実行コンテキストを提供する。これにはJNDI、クラスローダ、セキュリティ、作業領域を含む。
  • サーバ全体の自己チューニングするシングルスレッドプールに短時間実行するタスクを発行し、定義されたルールやランタイムメトリックを基にしてタスクに優先度を付ける
  • 長時間実行するタスク用のスレッド数を制限し、サーバのパフォーマンスや安定性に影響を与えないようにする
  • アプリケーションがシャットダウンした場合には、スレッドの割り込みやタスクのキャンセルによって非同期タスクのライフサイクルを管理する
コンテキストを意識識したワークマネージャやタイマーを提供する)CommonJ APIはWebLogic Server固有であり、Java EE Concurrency Utilitiesの前身です。CommonJ APIに比較して、Java EE Concurrency Utilitiesは一層標準化されていて使いやすく、カスタムスケジューリング、ContextService、ManagedThreadFactoryといった多くの機能を提供しています。詳細は以下の記事をご覧ください。
詳細は、製品ドキュメントをご覧ください。
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359

[WLS, Database] WLS UCP Datasource

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

WebLogic Server (WLS) 12.2.1では、Oracle Universal Connetion Pool(UCP)を代替接続プールとして利用する新たなデータソースタイプが導入されています。UCPデータソースを使うと、WebLogic Serverドメインの一部としてUCP接続プールの構成、デプロイ、監視が可能です。Oracle Thin Driver(シンプル、XA, リプレイ・ドライバ)での動作保証済みです。

製品ドキュメントは以下にあります。
Oracle® Fusion Middleware Administering JDBC Data Sources for Oracle WebLogic Server 12c (12.2.1)
Using Universal Connection Pool Data Sources
http://docs.oracle.com/middleware/1221/wls/JDBCA/ucp_datasources.htm#JDBCA746 
この記事の目的は、情報を再生産することではなく、機能をまとめて追加情報やデータソース構成時のスクリーンショットを提供することにあります。
UCPデータソースはjdbc-data-sourceディスクリプタを使ってシステムリソースとして定義します。Multitenantでは、これらのシステムリソースをドメインレベル、パーティションレベル、リソースグループテンプレート、リソースグループレベルで定義できます。

UCPデータソースの構成は、標準的なデータソースパラメータを使い、非常にシンプルです。 名前を付け、URL、ユーザ名、パスワード、JNDI名を設定すればよく、詳細な構成やチューニングのほとんどは、UCP接続プロパティのフォームで実施します。管理者はLogWriterを除いた、oracle.ucp.jdbc.PoolDataSourceImplがサポートする任意のsetterのための値を設定することができます。これは属性名(大文字小文字を認識します)から"set"を取り除いたものです。
Oracle® Universal Connection Pool for JDBC Java API Reference 11g Release 2 (11.2)
oracle.ucp.jdbc - Class PoolDataSourceImpl
http://docs.oracle.com/cd/E11882_01/java.112/e12826/oracle/ucp/jdbc/PoolDataSourceImpl.html 
例えば、以下のような形で属性値を設定できます。
ConnectionHarvestMaxCount=3
ドキュメントのTable 8-2では、WebLogic Server 12.2.1に同梱されている12.1.0.2 UCP jarファイルを基づき、現在サポートされているUCP属性のすべてをリストアップしています。
組み込み済みの検証として、ドライバと接続ファクトリの常識的な組合せがあります。
ドライバ接続ファクトリクラス (ConnectionFactoryClassName)
oracle.ucp.jdbc.PoolDataSourceImpl (default)oracle.jdbc.pool.OracleDataSource
oracle.ucp.jdbc.PoolXADataSourceImploracle.jdbc.xa.client.OracleXADataSource
oracle.ucp.jdbc.PoolDataSourceImploracle.jdbc.replay.OracleDataSourceImpl
接続をシンプルにするため、"ドライバ名"を指定しない場合、oracle.ucp.jdbc.PoolDataSourceImplがデフォルト値となり、ConnectionFactoryClassName接続プロパティは上表の対応するエントリがデフォルト値になります。

製品ドキュメントのExample 8.1では、UCPデータソースをWLSTで作成する完全な例ですが、WLSTの使用はこの頃のアプリケーション構成では一般的です。

weblogic.management.runtime.JDBCUCPDataSourceRuntimeMBeanを使って監視できます。このMBeanはJDBCDataSourceRuntimeMBeanを拡張したものなので、管理コンソールやWLSTスクリプトといったツールのために、JDBCサービスから他のJDBC MBeanのリストを伴って結果を返します。UCPデータソースのために、状態や以下の属性を設定します。
  • CurrCapacity
  • ActiveConnectionsCurrentCount
  • NumAvailable
  • ReserveRequestCount
  • ActiveConnectionsAverageCount
  • CurrCapacityHighCount
  • ConnectionsTotalCount
  • NumUnavailable
  • WaitingForConnectionSuccessTotal
管理コンソールやFusion Middleware Controlを使うと、UCPデータソースの作成、更新、監視が簡単です。

下図は管理コンソールのイメージです。作成にあたっては、データソースタイプのドロップダウンリストが現れ、UCPも含まれています。作成した結果、データソースディスクリプタのdatasource-typeは"UCP"になっています。

最初に、データソースのIDを決定するJDBCデータソースのプロパティを指定します。このプロパティには、データソース名、スコープ(グローバルもしくはMultitenantのパーティション、リソースグループ、リソースグループテンプレート)、JNDI名が含まれています。

次のページでは、ユーザー名、パスワード、URL、追加接続プロパティを設定します。追加接続プロパティを使ってUCP接続プールを構成します。コンソールでUCPデータソースの接続プロパティを設定する方法には2通りの方法があり、一つは接続プロパティのページで、UCPドライバで利用可能なすべての接続プロパティが表示されるので、プロパティ値を指定するだけでOKです。もう一方の方法は、続くデータベース接続テストページで、propertyName=valueの形で直接プロパティのテキストボックスに指定する、というものです。前ページで指定したプロパティ値はテキストボックス中に現れます。このページを使って、接続プロパティを含む指定した値のテストをすることができます。

データベース接続のテストページでは、プロパティの値をフリーフォームで入力し、データソース構成が確定される前に、データベース接続をテストすることができます。必要に応じて、プロパティ、システム・プロパティ、暗号化されたプロパティ属性を使って追加の構成情報を提供することができます。


最後の手順で、データソースのターゲットを指定します。新規のUCPデータソースのデプロイ対象を一つ以上選択することができます。ターゲットを指定しない場合、データソースを作成してもデプロイされないので、後でアプリケーションで接続を取得するまでにデータソースをデプロイする必要があります。

データソースの編集では、このデータソースタイプを構成、ターゲット指定、監視するための最小限のタブや属性が公開されています。


Middleware Controlは管理コンソールと似ていますが、Look&Feelが異なります。


JDBCデータソースをWebLogic Serverドメインのドロップダウンから選択すると、既存のデータソースと関連づけられたデータソースタイプ、スコープ、そしてもし利用可能であればリソースグループやリソースグループテンプレート、パーティションが確認できます。

既存のデータソース名を選択すると、データソース編集画面が現れます。リソースグループ名(存在する場合)を選択すると、リソースグループの編集画面が現れます。既存のデータソースのパーティション名を選択すると、パーティション属性の編集画面が現れます。[作成]を選択すると、データソースのタイプを選択するドロップダウンが表示されますので、UCPデータソースを選択することができます。

UCP作成画面の最初では、データソース名、スコープ、JNDI名、ドライバクラス名を指定する必要があります。
接続プロパティは次ページで指定します。管理コンソールとは異なり、UCP接続プロパティはリスト表示されませんので、"+"をクリックして新規エントリを追加し、プロパティ名と値を入力する必要があります。このページではデータベース接続もテストできます。
最後のページで、データソースのターゲット指定、新規オブジェクトの作成が可能です。

データソースを作成しデプロイすると、他のWebLogic Serverデータソースと同じく、アプリケーションでJNDIをルックアップしUCPデータソースにアクセスします。
import javax.naming.Context;
import javax.naming.InitialContext;
import java.sql.Connection;
import oracle.ucp.jdbc.PoolDataSource;

Context ctx = new InitialContext();
PoolDataSource pds = (PoolDataSource) ctx.lookup("ucpDS");
Connection conn = pds.getConnection();
アプリケーションでの利用方法は他のWebLogic Serverのデータソースと似ていますが、WebLogic Serverのデータソースの機能すべてを持っているわけではなく、UCP接続プールがサポートする追加機能が利用できます。なお、UCPデータソースはWebLogic ServerのセキュリティやJTAトランザクションと統合されていないことにご注意ください。UCP自身でJMX管理を有しています。UCPの概要については以下のリンクをどうぞ。
Oracle® Universal Connection Pool for JDBC開発者ガイド 12cリリース1 (12.1)
UCPの概要
http://docs.oracle.com/cd/E57425_01/121/JJUCP/intro.htm#JJUCP8109
Oracle® Universal Connection Pool for JDBC Developer's Guide 12c Release 1 (12.1)
Introduction to UCP
https://docs.oracle.com/database/121/JJUCP/intro.htm#JJUCP8109 

PoolDataSourceFactory.getPoolDataSource() の実行例を参照し、データソースのSetterを呼び出すと、WLSTや管理コンソールやFusion Middleware ControlのGUIで設定したUCPデータソースの内容を置き換えます。上記のように接続を取得する例を参考にしてください。

[Linux] Announcing the general availability of Unbreakable Enterprise Kernel Release 4

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

Oracle LinuxチームはOracle Linux 6およびOracle Linux 7向けUnbreakable Enterprise Kernel (UEK) Release 4のGAを発表できうれしく思っています。このリリースは4.1メインラインカーネルをベースにしており、最新のクラウドインフラストラクチャのために設計された数多くの重要な新機能や機能強化をお届けします。
  • 自動NUMAバランシングやCPUスケジューラのような機能に対する機能強化により顕著なパフォーマンス向上を果たしました。また、zswapやzram、LZ4圧縮アルゴリズム、ネットワークバッチ伝送、低レイテンシのネットワークポーリングといった新機能を導入しました。
  • システムと、ホストするアプリケーションのセキュリティを高めるためのたくさんのオプション。UEK Release 4には、カーネルアドレス空間のランダム化、新たな乱数システムコールやSELinux、nftables、SHA256、SHA512などの主要領域分野でのアップデートが含まれています。
  • クラウドインフラストラクチャの管理をシンプルにし、セキュリティを向上するための、Ksplice for Oracle Linuxを使ったカーネルおよびユーザ空間へのリアルタイムパッチ適用
  • 主要なクラウドテクノロジーのサポート。Xenホストやゲストドメイン機能とパフォーマンス強化、ネットワークではOpen vSwitch、VXLANの機能向上、LinuxコンテナやDockerでは、cgroupsや名前空間の強化
  • 本番システムでの動的なリアルタイムシステムトレーシングのためのOracle Linux DTraceの強化
  • 基になるFireflyのリリースに基づいて、Ceph Storage for Oracle Linux Release 1.0の製品リリースとサポート
  • タイマーレス(tickless)マルチタスキング、デッドラインスケジューリングクラスの追加を含む、リアルタイムカーネルの新機能
  • プロトコル、ドライバ、ファームウェアの改善を含む、infiniband機能の強化
  • XFS、Btrfs、Ext4、NFS、FUSE、Overlayファイルシステムのような重要な領域に対する多くのアップデート
  • 最新のハードウェアをサポートするよう、数多くのドライバをアップデート
これら主要なエンジニアリングの成果がすべてのOracle Linuxのお客様に利益をもたらします。本リリースの詳細については、以下のリリースノートをご覧ください。
Oracle® Linux Release Notes for Unbreakable Enterprise Kernel Release 4
https://docs.oracle.com/cd/E52668_01/E69348/html/index.html
Oracle LinuxはOracle Software Delivery CloudやOracle Yumリポジトリからダウンロードいただけます。
Oracle Software Delivery Cloud
https://edelivery.oracle.com/linux
Oracle Linux Yum Server
https://yum.oracle.com/

[WLS, FMW] Changes to some WLST Commands in 12.2.1

$
0
0
原文はこちら。
https://blogs.oracle.com/OracleWebCenterSuite/entry/changes_to_wlst_commands_in

WLSTを使ってドメイン作成のためのスクリプトを作っていましたが、これまでのWLSTコマンドのいくつかがWebLogic Server 12.2.1で非推奨になっていることに気付きました。以前の場合、新しいドメイン作成のために、以下のスニペットのようなスクリプトを使っていました。
readTemplate("/u01/app/oracle/middleware/wlserver_10.3/common/templates/domains/wls.jar")
addTemplate("/u01/app/oracle/middleware/oracle_common/common/templates/applications/oracle.em_11_1_1_0_0_template.jar")

# ... configure domain here ...

writeDomain("/u01/data/domains/mydomain")
closeTemplate()
12.2.1からは、readTemplate() と addTemplate() コマンドが非推奨になり、selectTemplate() と loadTemplates() に置き換わりました。selectTemplate() コマンドを使って機能を選択し、 loadTemplates() コマンドは当該機能に必要なすべてのテンプレートをロードします。新しいメソッドを使って新しいドメインを作成する場合、以下のスニペットのようなスクリプトを使います。
selectTemplate("Basic WebLogic Server Domain", "12.2.1")
loadTemplates()

# ... configure domain here ...

writeDomain("/u01/data/domains/mydomain")
ドメイン作成に関するドキュメントは以下からどうぞ。
Oracle® Fusion Middleware Understanding the WebLogic Scripting Tool 12c (12.2.1)
Creating WebLogic Domains Using WLST Offline
Editing a WebLogic Domain (Offline)
https://docs.oracle.com/middleware/1221/wls/WLSTG/domains.htm#WLSTG161
WLSTコマンドや変数のリファレンスは以下からどうぞ。
Oracle® Fusion Middleware WLST Command Reference for WebLogic Server 12c (12.2.1)
WLST Command and Variable Reference
Control Commands
https://docs.oracle.com/middleware/1221/wls/WLSTC/reference.htm#WLSTC140
また、pack/unpack コマンドを使って手作業でドメインを管理対象サーバに複製する必要もなくなっています。管理対象サーバで以下のドキュメントに記載されているオンラインWLSTスクリプトを実行することで実現することができます。
Oracle® Fusion Middleware Understanding the WebLogic Scripting Tool 12c (12.2.1)
Creating a Managed Server Domain on a Remote Machine
https://docs.oracle.com/middleware/1221/wls/WLSTG/domains.htm#WLSTG406

[WLS, FMW] Pack/Unpack No More...

$
0
0
原文はこちら。
https://blogs.oracle.com/OracleWebCenterSuite/entry/pack_unpack_no_more

これまでWebLogic Serverドメインを作成する場合、ご存じのように管理サーバでドメインを作成・構成した後に、PACKコマンドを使って管理対象サーバテンプレートを作成する必要があります。その後、このテンプレートを管理対象サーバが動作するすべてのホストにコピーし、管理対象サーバドメインをUNPACKコマンドを使って作成します。

ドメイン作成を自動化したい場合、追加の手順として、テンプレートを管理サーバと管理対象サーバ間で共有される場所に配置するか、もしくはSCPのようなホストコマンドを使ってテンプレートを転送する必要があります。管理対象サーバから管理サーバに接続し、ドメインを何とかダウンロードできうようなコマンドが欲しいと思うことでしょう。

WebLogic 12.2.1からは、リモートマシン上の管理対象サーバドメインをオンラインWLSTを使って作成することができるようになりました。手順は以下のドキュメントに記載されています。
Oracle® Fusion Middleware Understanding the WebLogic Scripting Tool 12c (12.2.1)
Creating a Managed Server Domain on a Remote Machine
https://docs.oracle.com/middleware/1221/wls/WLSTG/domains.htm#WLSTG406
以下はドキュメントに掲載されているスニペットです。
import os

wlsHome = os.getenv('WL_HOME')
mwHome = os.path.join(wlsHome, '..')

#Substitute the administrator user name and password values below as needed
connect('adminusername','adminpassword','localhost:7001')

#The path on the local machine where the template will be created,
#it should not already exist.
templatePath = 'user_templates/myTemplate.jar'

#get the packed template from the Administration Server
writeTemplate(templatePath)

#disconnect from online WLST connection to the Administration Server
disconnect()

#select and load the template that was downloaded from the Administration
#Server.
selectCustomTemplate('templatepath')
loadTemplates()

#specify the domain directory where the domain needs to be created
domainPath = 'domains/myRemoteDomain')

#create the domain
writeDomain(domainPath)

[WLS, Java] WLS JNDI Multitenancy

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

WebLogic Server 12.2.1で導入された最も重要な機能は、マルチテナントです。
Understanding PaaS Multitenancy
http://docs.oracle.com/middleware/1221/wls/WLSMT/concepts.htm#WLSMT724
Domain Partitions for Multi-tenancy in WebLogic Server 12.2.1
https://blogs.oracle.com/WebLogicServer/entry/domain_partitions_for_multi_tenancy
http://orablogs-jp.blogspot.jp/2015/11/domain-partitions-for-multi-tenancy-in.html 
ご存知のように、WebLogic Server 12.2.1までは、1 WebLogic Serverドメインを、1テナントで使用しますが、WebLogic Server 12.2.1からは、WebLogic Serverドメインを複数のパーティションに分割してテナントがWebLogic Serverドメインの異なるパーティションを利用することができるため、複数のテナントが1個のWebLogic Serverドメインを互いに影響することなく共有することができます。それゆえ、パーティション間のリソースの分離が重要です。JNDIがこれらのリソースにアクセスするための一般的な方法ですので、WebLogic Server 12.2.1でのJNDIの主な目標は、JNDIリソースを分離することにあります。

WebLogic Server 12.2.1までは、WebLogic ServerドメインのJNDIグローバルツリーしかありません。パーティションには一意の分離された名前空間が必要なので、この1個のJNDIグローバルツリーで複数のパーティションをサポートすることは困難です。例えば、複数のパーティションが同じJNDI名を使って個別にJNDIリソースをバインド/ルックアップをすることができますが、NameAlreadyBoundExceptionになることでしょう。異なるパーティションでJNDIリソースを分離するため、すべてのパーティションには、WebLogic Server 12.2.1以降の一意のJNDIグローバルツリーがあります。そうすることで、テナントは、他のパーティションと名前が競合せずに、パーティションのJNDIリソースを操作することができます。アプリケーションスコープのJNDIツリーの場合、アプリケーション内部でのみ見えるので、自然に分離しますから、アプリケーションスコープのJNDIツリーは、WebLogic Server 12.2.1で変更する必要はありません。では、パーティションのJNDIリソースへのアクセス方法を見てみましょう。

Access JNDI resource in partition

パーティションのJNDIリソースにアクセスするには、InitialContext作成時にパーティション情報をプロバイダURLプロパティに指定する必要があります。
partition1情報をInitialContext作成時にプロパティに追加し、partition1のJNDIリソースにアクセスします。
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.PROVIDER_URL, "t3://ms1:7001/partition1");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "welcome1");
Context ctx = new InitialContext(env);
Object c = ctx.lookup("jdbc/ds1");
Partition2はクラスタで動作するので、クラスタアドレス形式を使ってInitialContext作成時にプロパティに指定する必要があります。
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.PROVIDER_URL, "t3://ms1:7001,ms2:7003/partition2");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "welcome1");
Context ctx = new InitialContext(env);
Object c = ctx.lookup("jdbc/ds1");
WebLogic Serverでは、外部JNDIプロバイダを作成して別サーバのJNDIリソースをリンクすることができます。WebLogic Server 12.2.1では、構成にパーティション情報を追加すれば、外部JNDIプロバイダを使って指定のパーティションのJNDIをリンクすることもできます。これらのパーティション情報(URL、ユーザ名、パスワードなど)を使ってJNDIコンテキストを作成します。以下はPartition1の外部JNDIプロバイダ構成例です。このプロバイダはpartition2にリンクします。
<foreign-jndi-provider-override>
  <name>jndi_provider_rgt</name>
  <initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
  <provider-url>t3://ms1:7001,ms2:7003/partition2</provider-url>
  <password-encrypted>{AES}6pyJXtrS5m/r4pwFT2EXQRsxUOu2n3YEcKJEvZzxZ7M=</password-encrypted>
  <user>weblogic</user>
  <foreign-jndi-link>
    <name>link_rgt_2</name>
    <local-jndi-name>partition_Name</local-jndi-name>
    <remote-jndi-name>weblogic.partitionName</remote-jndi-name>
  </foreign-jndi-link>
</foreign-jndi-provider-override>

Stickiness of JNDI Context

JNDIコンテキストを作成すると、コンテキストは指定されたパーティションに関連付けられるので、この後のJNDIの操作は、関連付けられたパーティションのJNDIツリー内で実施します(現在のパーティションのJNDIツリーではありません)。この関連付けられたパーティションは、コンテキストを作成時とは異なるスレッドが使っている場合でも残ります。JNDIコンテキスト作成時にプロバイダURLプロパティを環境に設定すると、プロバイダURLで指定されたパーティションに関連付けられます。そうでない場合、JNDIコンテキストは現在のパーティションに関連付けられます。

Life cycle of Partition JNDI service

WebLogic Server 12.2.1までは、JNDIサービスのライフサイクルはWebLogic Serverと同じですが、12.2.1からは各パーティションが個々でJNDIグローバルツリーを持つため、JNDIサービスのライフサイクルはパーティションに一致します。パーティション開始時にすぐJNDIサービスが利用でき、パーティションのシャットダウンで当該パーティションのJNDIサービスは破棄されます。

[Support, FMW, Database, EM] Database、EM、MiddlewareのBundle Patchのバージョン番号表記が変わります

$
0
0
2015年11月より、Oracle Database、Enterprise Manager、Middleware製品の新しいBundle Patch (BP)、Patch Set Update (PSU)、Security Patch Update (SPU) のバージョン番号のフォーマットが変わります。新しい形式では、Bundle Versionの5桁目が、メインのBundle、PSU、SPU のリリース日付を"YYMMDD"で表記したものにかわります。
  • YY:西暦年の最後の2桁
  • MM:月(数字、2桁)
  • DD:日付(数字、2桁)
2016年1月19日(US時間)にリリースされる四半期毎のパッチで、ほとんどのものがこの形式に変わります。
詳しくは、以下のサポート文書をご覧ください。
Oracle Database, Enterprise Manager and Middleware - Change to Patch Numbering from Nov 2015 onwards (Doc ID 2061926.1)
https://support.oracle.com/rs?type=doc&id=2061926.1
Oracle データベース, Enterprise Manager, ミドルウェア - 2015年11月以降パッチの番号付けの変更 (Doc ID 2074965.1)
https://support.oracle.com/rs?type=doc&id=2074965.1
表現の変更例を下表にまとめました。
旧表記新表記
WebLogic Server PSU 12.1.3.0.6WebLogic Server 12.1.3.0.160119
Enterprise Manager Base Platform PSU 12.1.0.4.6Enterprise Manager Base Platform PSU 12.1.0.4.160119
Database PSU 11.2.0.4.9Database PSU 11.2.0.4.160119
Exadata Database Bundle Patch 11.2.0.4.21Exadata Database Bundle Patch 11.2.0.4.151117

[WLS] Even Applications can be Updated with ZDT Patching

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

Zero Downtime Patchingは、アプリケーションの停止やエンドユーザのセッション消失をせずにWebLogic Serverで動作する本番環境のアプリケーションのアップデートすることができます。この新機能は特に複数のアプリケーションを同時にアップデートしたい人や、様々な理由や制限でプロダクション再デプロイメント(Production Redeployment)機能を使うことができない、そんな人たちにとりわけ有用かもしれません。今や複雑なアプリケーションへのパッチ適用方法に対する便利な代替方法があります。

このロールアウトは、アプリケーションがサービスリクエストを受け付け続けながらドメイン間でのロールアウトを自動化するプロセスやメカニズムをベースにしています。信頼性の高い自動化に加え、Zero Downtime Patching機能はOracle Traffic Director (OTD) ロードバランサとWebLogic Serverを組合せ、アクティブなセッションを保持しつつ、パッチ適用時に互換性のないセッション状態を取り扱うための、より優れたテクニックを提供します。
  1. アプリケーションのアップデートを実行するためには、以下のたった3個の手順を踏むだけです。アップデート対象のアプリケーションのコピーを用意し、テスト、検証します。管理者はアップデート対象のアプリケーションソースが適切なノードに展開されていることを確認する責任があります。ステージ・モードでは、アップデート対象のソースが管理サーバがアプリケーションソースを配布するためにファイルシステム上で利用可能になっている必要があります。ステージモードがない場合、もしくは外部ステージモードの場合は、アップデート対象のアプリケーションソースは各ノードのファイルシステムで利用可能になっている必要があります。
  2. Create a JSON形式のファイルを作成し、ロールアウト中にアップデートが必要なアプリケーションの詳細を記載します。
  3. {
    "applications": [
    {
    "applicationName":"ScrabbleStage",
    "patchedLocation":"/scratch/wlsconfg/Domains/Domain1221/applications/ScrabbleStagev2.war",
    "backupLocation": "/scratch/wlsconfg/Domains/Domain1221/applications/ScrabbleStagev1.war"
    },
    {
    "applicationName":"ScrabbleNoStage",
    "patchedLocation":"/scratch/wlsconfg/Domains/Domain1221/applications/ScrabbleNoStagev2.war",
    "backupLocation":"/scratch/wlsconfg/Domains/Domain1221/applications/ScrabbleNoStagev1.war"
    },
    {
    "applicationName":"ScrabbleExternalStage",
    "patchedLocation":"/scratch/wlsconfg/Domains/Domain1221/applications/ScrabbleExternalStagev2.war",
    "backupLocation":"/scratch/wlsconfg/Domains/Domain1221/applications/ScrabbleExternalStagev1.war"
    }
    ]
    }
  4.  あとは、以下のようなWLSTコマンドを使ってApplicationのロールアウトを実行するだけです。
    rolloutApplications("Cluster1", "/pathTo/applicationRolloutProperties")
    管理サーバは、"Cluster1"という名前のクラスタに所属する各メンバーノードのローリング・リスタートを調整するロールアウトを開始します。サーバがシャットダウンすると、元のアプリケーションソースを特定のバックアップ先に移動し、新たなアプリケーションソースをコピーします。各サーバが順に管理モードで起動します。サーバが管理モードにある間、アプリケーションの再デプロイコマンドが特定サーバに対して呼び出され、これにより新しいソースがリロードされます。その後、サーバは元の実行状態に戻り、アップデートされたアプリケーションでリクエストを受け付けます。
Zero Downtime Patchingを使ったアプリケーションの更新について詳細は以下のドキュメントをご覧ください。
Oracle® Fusion Middleware Administering Zero Downtime Patching Workflows 12c (12.2.1)
Overview: Rolling Out Updated Applications
http://docs.oracle.com/middleware/1221/wls/WLZDT/intro.htm#WLZDT163

[Java] Now Available: Migration Guide from Oracle JRockit JVM to HotSpot JVM

$
0
0
原文はこちら。
https://blogs.oracle.com/java-platform-group/entry/migration_guide_from_jrockit_to

2010年のJavaOneでOracleはOracle JRockit JVMとHotSpot JVMをマージし、JRockitのみで利用可能な機能をHotSpotに組み込む、と発表しました。
Oracle's JVM Strategy
https://blogs.oracle.com/henrik/entry/oracles_jvm_strategy 
JDK 7でOracleはそのビジョンを実現し始め、その作業がJDK 8で完了しました。Oracle JRockit JVMをお使いのお客様は、その間定期的なセキュリティアップデートやバグフィックスを受け取っています。Java SE 6 JRockit (R28のみ)のCPUリリースやバグフィックスは引き続きJava SE 6 JRockitのExtended Supportフェーズ終了まで(現在の予定では、2018年12月まで)提供されます。
Oracle Announces Availability of Java SE 7
http://www.oracle.com/us/corporate/press/444374
Oracle Announces Java 8
http://www.oracle.com/us/corporate/press/2172618
Final Release of JRockit for Java SE 5 in January
https://blogs.oracle.com/jrockit/entry/final_release_of_jrockit_for
http://orablogs-jp.blogspot.jp/2014/10/final-release-of-jrockit-for-java-se-5.html
Oracle JRockit JVMからHotSpot JVMへ移行するお客様のために、移行ガイドが公開されました。このガイドには、JRockitで利用可能な一般的なツールやオプションと、対応するHotSpotのツールやオプションに関する多くの情報が掲載されています。
Java Platform, Standard Edition JRockit to HotSpot Migration Guide
http://docs.oracle.com/javacomponents/jrockit-hotspot/migration-guide/

[Java] New Release JDK 8u71 and JDK 8u72

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

JDK 8u71と8u72という、2個のJava 8アップデートがダウンロードできるようになっています。ほとんどのJava SEをご利用の方に対し、重要なセキュリティ修正を含む最新のJava 8u71 CPUリリースにアップデートされることをOracleは強く推奨します。Java SE 8u72はパッチセットアップデートで、8u71にさらに追加の機能を含んでいます。最新のJDKリリースは以下のページからダウンロードできます。
Java SE Downloads
http://www.oracle.com/technetwork/java/javase/downloads/index.html 
これらのリリースに含まれる新機能やバグ修正に関する情報は、以下のリリースノートをご覧ください。
JDK 8u71 Release Notes
http://www.oracle.com/technetwork/java/javase/8u71-relnotes-2773756.html
JDK 8u72 Release Notes
http://www.oracle.com/technetwork/java/javase/8u72-relnotes-2775802.html
Java CPUとPSUの違いについては、以下のエントリをご覧ください。
Java CPU and PSU Releases Explained
http://www.oracle.com/technetwork/java/javase/cpu-psu-explained-2331472.html

[訳注]
以前CPUとPSUの違いをまとめたエントリをUpしていましたので、参考までに。
[Java] Java SE 8u65とJava SE 8u66の違い
http://orablogs-jp.blogspot.jp/2015/10/java-se-8u65-vs-java-se-8u66.html

[Java] Optionals: Patterns and Good Practices

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

データ処理パイプラインでめったに発生しない厄介なケースを処理するための新しい方法を提供し、エレガントなパターンについて学ぶことに興味はありますか?

José Paumardが、プライベートコンストラクタを持つ、Java SE 8で導入された新しいfinalクラスであるOptionalを使用するいくつかのパターンを紹介する記事を寄稿しています。このクラスは、ストリーム上に構築されたデータ処理パイプラインの記述するための選択肢を提供します。Optionalを使うことで、結果として、より優れた、可読性の高いコードを書くことができます。

Optionalの使い方、必要とする理由、いくつかのシナリオで利用可能なパターンを紹介しています。最初のパターンは、値がない可能性のあるオブジェクトのラッパーオブジェクトとしてOptionalを使用しています。第二のパターンでは、Optionalクラスのメソッドを紹介しています。

詳細は、以下のリンクからどうぞ。
Optionals: Patterns and Good Practices
https://community.oracle.com/docs/DOC-991686
Viewing all 760 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>