この章の内容は以下のとおりです。
JSR-88の詳細は、http://jcp.org/en/jsr/detail?id=88
を参照してください。
注意:
WebLogic Server 9.0では、旧リリースで使われていたweblogic.management.deploy
APIの使用は非推奨になっています。
次の項では、WebLogic ServerデプロイメントAPIの概要を説明します。
Java EEデプロイメントAPI仕様(JSR-88、http://jcp.org/en/jsr/detail?id=88
を参照)では、構成セッションとデプロイメントは違うものとされています。この2つは次のように区別されています。
デプロイメント・プランの記述子を生成するアプリケーションの構成
配布、起動、停止、再デプロイ、アンデプロイなどのデプロイメント・タスク
お使いの環境でデプロイメント・プロセスを効率的に管理するには、WebLogicデプロイメントAPIを使用して、以下を実行する必要があります。
このドキュメントでは、構成という用語は、WebLogic Serverインスタンスへのデプロイメントのためにアプリケーションまたはデプロイ可能なリソースを準備するプロセスのことを指します。アプリケーションの構成は、次のフェーズで構成されています。
アプリケーション評価 - アプリケーション・ファイルを検査および評価して、アプリケーションの構造と埋込み記述子の内容を決定します。「アプリケーション評価」を参照してください。
フロントエンド構成 - アプリケーションに埋め込まれている情報に基づいて構成情報を作成します。この情報には、WebLogic Server記述子、デフォルト、ユーザー定義によるデプロイメント・プランなどがあります。「フロントエンド構成の実行」を参照してください。
デプロイメント構成 - ユーザー入力および選択されたWebLogic Serverターゲットに基づいて、個別のWebLogic Server構成の値を変更します。「デプロイメント構成のカスタマイズ」を参照してください。
デプロイメントの準備 - 最終的なデプロイメント・プランを生成し、クライアント側でアプリケーションを事前に検証します。「デプロイメントの準備」を参照してください。
アプリケーションのデプロイメントは、サーバー側処理とアプリケーションの起動のために管理サーバーにアプリケーションとプランを配布するプロセスです。「デプロイメント操作の実行」を参照してください。
WebLogic Serverでは、パッケージ化されたデプロイメント・ツールwebLogic.Deployer
が提供されています。このツールを使用すると、WebLogic Serverでデプロイメント・サービスを利用できます。WebLogicデプロイメントAPIを使用して実装できるデプロイメント操作は、weblogic.Deployer
によって部分的に、または完全に実装されています。
注意:
weblogic.Deployer
は、WebLogic Server環境にお薦めするデプロイメント・ツールです。weblogic.DeployerおよびWebLogic Server管理コンソールの使用方法は、「Oracle WebLogic Serverへのアプリケーションのデプロイ」
を参照してください。
WebLogicデプロイメントAPIは以下の場合に必要になります。
独自の実装をモデル化し、WebLogicサービス・プロバイダ・インタフェース(SPI)とインタフェースさせる必要がある場合。この場合、WebLogicデプロイメントAPIデプロイメント・ファクトリを使用してWebLogicDeploymentManager
を取得します。これは、weblogic.deploy.api.spi
と併用するためのjavax.enterprise.deploy.spi.DeploymentManager
の拡張です(http://docs.oracle.com/javaee/7/api/javax/enterprise/deploy/spi/DeploymentManager.html
を参照)。「アプリケーション評価」およびJava EEデプロイメントAPI仕様(http://jcp.org/en/jsr/detail?id=88
)を参照してください。
WebLogic Server管理コンソールまたはweblogic.Deployer
を使用するかわりに、独自のデプロイメント・インタフェースを作成する必要がある場合。この場合、WebLogicデプロイメントAPIのクラスおよびインタフェースを使用して、「WebLogicデプロイメントAPIのデプロイメントのフェーズ」の一部またはすべてを実装します。
WebLogicデプロイメントAPIのクラスおよびインタフェースは、javax.enterprise.deploy
サブパッケージに記述されているJava EEデプロイメントAPI仕様(JSR-88)インタフェースを拡張および実装します(http://docs.oracle.com/javaee/7/api/overview-summary.html
を参照)。WebLogicデプロイメントAPIには、以下のパッケージが提供されています。
WebLogicでは、http://jcp.org/en/jsr/detail?id=88
のJava EEデプロイメントAPI仕様(JSR-88)に記述されている「製品プロバイダ」のロールをサポートし、任意のJava EEネットワーク・クライアント用の拡張可能なコンポーネントに加えて、WebLogic Server環境固有のユーティリティも用意されています。そうした拡張機能には、以下のようなものがあります。
WebLogicの各種機能のサポート。admin
モードでの起動や、バージョニング機能付きの再デプロイなどがあります。
以下のようなきめ細かなレベルでの制御。
モジュール・レベルのターゲット指定
部分的な再デプロイメント(アプリケーションの一部の再デプロイメントまたは削除)
動的な構成変更
JMS、JDBC、インターセプション、アプリケーション固有の構成(カスタムまたは構成)モジュールなど、WebLogicモジュール拡張のサポート。
付加的な操作。distribute
とstart
を組み合わせたDeploy
という動詞などがあります。
注意:
WebLogicデプロイメントAPIでは、アプリケーションの更新に失敗した際の自動フォールバック手続きはサポートされていません。この動作のポリシーと手続きは、各デプロイメント環境の開発者または管理者が定義し、構成する必要があります。
OracleはJava EE製品プロバイダとして、javax
Service Provider Interface (SPI)パッケージを拡張して、WebLogic Server固有の構成とデプロイ制御を提供しています。このパッケージのコア・インタフェースはDeploymentManager
であり、ここから他のすべてのデプロイメント・アクティビティを開始、モニターおよび制御します。
WebLogicDeploymentManager
インタフェースは、javax.enterprise.deploy.spi.DeploymentManager
インタフェースに対してWebLogic Server拡張を提供します。WebLogicDeploymentManager
のオブジェクトではWeblogic Serverデプロイメント・フレームワークがステートレスでインタフェースされます。これにより、基本的なデプロイメント機能に加えて、本番再デプロイメント、エンタープライズ・アプリケーション内のモジュールの部分的なデプロイメントなどの幅広いWebLogic Serverデプロイメント機能が実現します。WebLogicDeploymentManager
オブジェクトは、通常ToolsパッケージのSessionHelper
ヘルパー・クラスからSessionHelper.getDeploymentManager
メソッドを使用して取得します。「アプリケーション評価」を参照してください。
次の項では、WebLogic Server SPIの機能の概要について説明します。
weblogic.deploy.api.spi
パッケージには、ターゲットにアプリケーションを構成およびデプロイするために必要なインタフェースが用意されています(有効なターゲット・タイプは、「WebLogicターゲット・タイプの問合せサポート」を参照してください)。このパッケージを使用すると、エンタープライズ・アプリケーションまたはスタンドアロン・モジュールのWebLogic Server固有のデプロイメント構成を実装できるデプロイメント・ツールを作成できます。
weblogic.deploy.api.spi
には、WebLogicDeploymentManager
インタフェースが含まれています。このデプロイメント・マネージャを使用して、WebLogic Serverでのすべてのデプロイメント関係の操作(アプリケーションの配布、起動、停止など)を実行します。WebLogicDeploymentManager
では、Java EE DeploymentManager
インタフェースの重要な拡張で、エンタプライズ・アプリケーション・モジュールのモジュール・レベルのターゲット指定、本番再デプロイメント、アプリケーションのバージョニング、アプリケーションのステージング・モード、デプロイされたアプリケーションへの管理アクセスの制約などの機能が提供されます。
weblogic.deploy.api.spi
パッケージのWebLogicDeploymentConfiguration
クラスおよびWebLogicDConfigBean
クラスで、アプリケーションのデプロイメントおよび構成の記述子(WebLogic Serverデプロイメント記述子)が表されます。
WebLogicDeploymentConfiguration
オブジェクトはデプロイメント・プランのラッパー。
WebLogicDConfigBean
には、Weblogicデプロイメント記述子のプロパティがカプセル化されます。
このパッケージに含まれるインタフェースはWebLogicDeploymentFactory
のみです。これは、javax.enterprise.deploy.spi.factories.DeploymentFactory
のWebLogic拡張です。このファクトリ・インタフェースを使用すると、様々な特性を持つDeploymentManager
オブジェクトを選択して割り当てられます。WebLogicDeploymentManager
の特性は、このWebLogicDeploymentFactory
のpublicフィールドで定義されます。
モジュールのターゲット指定とは、アプリケーション内の特定のモジュールを別のターゲットにデプロイすることです(JSR-88の仕様にある、すべてのモジュールを同じターゲットのセットにデプロイする処理とは異なります)。モジュールのターゲット指定は、WebLogicDeploymentManager.createTargetModuleID
メソッドによってサポートされています。
WebLogicTargetModuleID
クラスには、javax.enterprise.deploy.spi.TargetModuleID
インタフェースのWebLogic Server拡張が含まれています。このクラスは、構成されたTargetInfoMBeans
(AppDeploymentMBean
およびSubDeploymentMBean
)と密接に関連しています。WebLogicTargetModuleID
クラスには、アプリケーション・モジュールについて、またアプリケーション・モジュールとそのターゲットとの関係について、TargetInfoMBeans
にあるよりも詳細に記述されます。「モジュールのタイプ」を参照してください。
WebLogic Serverでは、WebLogicTarget
クラスにWebLogic Serverで使用できるターゲット・タイプを管理するための直接インタフェースが提供されています。表2-1で、ターゲット・アクセサ・メソッドについて説明します。
表2-1ターゲット・アクセサ・メソッド
メソッド | 説明 |
---|---|
|
このターゲットがクラスタかどうかを示します。 |
|
このターゲットがJMSサーバーかどうかを示します。 |
|
このターゲットがSAFエージェントかどうかを示します。 |
|
このターゲットがサーバーかどうかを示します。 |
|
このターゲットが仮想ホストかどうかを示します。 |
アプリケーションのステージング・モードは、デプロイメントの動作に影響します。アプリケーションのステージング動作は、DeploymentOptions.setStageMode (stage mode)
を使用して設定されます。stage mode
の値は以下のいずれかになります。
STAGE
- ターゲット・サーバーにファイルが強制的にコピーされます。
NO_STAGE
- ターゲット・サーバーにファイルがコピーされません。
EXTERNAL_STAGE
- ファイルを手動でステージングします。
アプリケーションのデプロイメント・プランは、アプリケーション・アーカイブとは別個にステージングできます。これにより、アプリケーションがステージングされていない場合に、デプロイメント・プランをステージングできます。DeploymentOptions.setPlanStageMode (plan stage mode)
を使用してデプロイメント・プランのステージング動作を構成できます。この場合、plan stage mode
の値は次のいずれかになります。
STAGE
- デプロイメント・プランがターゲット・サーバーにコピーされます。
NO_STAGE
- デプロイメント・プランはターゲット・サーバーにコピーされません。
EXTERNAL_STAGE
- デプロイメント・プランがターゲット・サーバーに手動でコピーされます。
ステージング・モードを指定しない場合は、デプロイメント・プランでは、アプリケーションのステージングに指定された値がデフォルトで使用されます。たとえば、デプロイメント・プランのステージングが指定されておらず、アプリケーション・ステージングがSTAGE
に設定されている場合は、デプロイメント・プランのステージング・モードはSTAGE
に設定されます。
これらのクラスは、javax.enterprise.deploy.model
インタフェースのWebLogic Server拡張および実装です(http://docs.oracle.com/javaee/7/api/javax/enterprise/deploy/model/package-summary.html
を参照)。modelインタフェースでは、Java EEアプリケーションの標準的な要素(デプロイメント記述子など)を表現します。
このパッケージには、デプロイ可能なオブジェクトのJava EE構成を表すために使用されるインタフェース群が含まれています。デプロイ可能なオブジェクトとは、エンタープライズ・アプリケーションまたはスタンドアロン・モジュールのデプロイメント・コンテナです。
javax.enterprise.deploy.model
インタフェースのWebLogic Server実装を使用すると、WebLogic Serverアプリケーション・インストール・ディレクトリに格納されているアプリケーションで作業できます。WebLogic Serverアプリケーション・インストール・ディレクトリとは、構成プロセスで生成される、アプリケーションのデプロイメント・ファイル、デプロイメントおよび外部WebLogicデプロイメント記述子の管理に使用する正式なディレクトリ構造です。アプリケーション・インストール・ディレクトリの配置の詳細は、アプリケーションおよびモジュールのデプロイメント準備を参照してください。任意のJava EEアプリケーションと、(拡張として)アプリケーション・インストール・ディレクトリにあるサポート・アプリケーションがサポートされています。
注意:
weblogic.deploy.api.model
では、Java EEデプロイメント記述子要素に対する構成中の動的な変更がサポートされません。したがって、XPathリスナーの登録および削除はサポートされません。DDBean.addXPathListener
およびremoveXPathListener
はサポートされていません。
weblogic.deploy.api.model
パッケージのWebLogicDeployableObject
クラスとWebLogicDDBean
インタフェースで、アプリケーションの標準的なデプロイメント記述子が表現されます。
Java EEデプロイメントAPIでは、Java EEデプロイメント記述子にはDeployableObject
を介してアクセスするように規定されています(http://docs.oracle.com/javaee/7/api/javax/enterprise/deploy/model/DeployableObject.html
を参照)。DeployableObject
はアプリケーション内のモジュールを表します。記述子の要素はDDBeans
で表されます。デプロイメント記述子の各要素に1つのDDBeanが対応します。記述子のルート要素はDDBeanRoot
オブジェクトで表されます。これらのインタフェースはすべて、対応するこのパッケージのインタフェースおよびクラス内に実装されます。
DeployableObject
のWebLogic Server実装であるWebLogicDeployableObject
クラスには、createDeployableObject
メソッドがあり、これらのメソッドでアプリケーションのデプロイメント記述子のWebLogicDeployableObject
およびWebLogicDDBean
を作成します。基本的な構成タスクを実行するには、WebLogicDDBean
をWebLogicDConfigBean
に関連付けます。WebLogicDConfigBeanはWebLogic Serverへのアプリケーションのデプロイに必要なサーバー構成のプロパティを表しています。「アプリケーション評価」を参照してください。
サーバー環境(この場合はWebLogic Serverインスタンス)の具体的な構成情報を格納するDConfigBean
と異なり、DDBean
オブジェクトにはアプリケーションの一般的なデプロイメント記述子要素が格納されます。たとえば、Webアプリケーションをデプロイする場合、WebLogicDDBeans
のデプロイメント記述子は、.war
アーカイブのWEB-INF/web.xml
ファイルから取得されます。WebLogicDConfigBeans
の情報は、WebLogicDDBeans
に基づいて.war
アーカイブのWEB-INF/weblogic.xml
から取得されます。これらのBeanは構成情報を保持するという基本的な目的については同じですが、論理的には異なるものです。DDBean
ではアプリケーションについて記述され、DConfigBeans
では特定の環境に対してアプリケーションが構成されます。
これらのオブジェクトは両方とも構成セッションを開始するときに生成されます。WebLogicDeployableObject
、WebLogicDDBeans
、およびWebLogicDConfigBeans
はすべて構成セッションの中でインスタンス化され、操作されます。「構成プロセスの概要」を参照してください。
次の項では、WebLogic Server固有のデプロイメント・コマンド、モジュールのタイプ、および(クラスとしての)ターゲット・タイプを表現する一連のクラスについて説明します。
weblogic.deploy.api.shared
パッケージには、WebLogic Server固有のデプロイメント・コマンド、モジュールのタイプ、および(クラスとしての)ターゲット・タイプを表す一連のクラスが用意されています。これらのクラスのオブジェクトはweblogic.deploy.api.modelパッケージおよびweblogic.deploy.api.spiパッケージで共有できます。
標準のjavax.enterprise.deploy.shared
クラスにあるModuleType
およびCommandType
の定義は、以下をサポートするように拡張されています。
モジュールのタイプ。「モジュールのタイプのサポート」を参照してください。
コマンド。「デプロイ用、更新用のコマンド・タイプ」を参照してください。
Java EEデプロイメントAPI仕様(JSR-88、http://jcp.org/en/jsr/detail?id=88
を参照)で必須ではないWebLogicTargetType
クラスでは、WebLogic Serverでサポートされる多様なデプロイメント・ターゲット・タイプが列挙されます。このクラスでjavax
のデプロイメント・クラスが拡張されません。「すべてのタイプのWebLogic Serverターゲットのサポート」を参照してください。
javax.enterprise.spi.shared
パッケージに定義されている必須のコマンド・タイプに、deploy
とupdate
のコマンド・タイプが追加され、WebLogicDeploymentManager
から利用できます。
サポートされているモジュールのタイプには、JMS、JDBC、インターセプション、WSEE、構成、およびWLDFがあります。これらはweblogic.deploy.api.shared.WebLogicModuleType
クラスにフィールドとして定義されています。
次の項では、最小限の制御および明示的なオブジェクト操作で一般的なデプロイメント・ツールのタスクを実行できるAPIツールについて説明します。
weblogic.deploy.api.tools
には、コンビニエンス・クラスが用意されています。
WebLogicDeploymentManager
の取得
アプリケーションの構成の入力
デプロイメント・プランの新規作成または更新
ツール・パッケージのクラス群は、Java EEデプロイメントAPI仕様(JSR-88、http://jcp.org/en/jsr/detail?id=88
を参照)インタフェースの拡張ではありません。これらのクラス群を使用すると、WebLogicデプロイメントAPIで提供されるデプロイメント操作に簡単にアクセスできます。
構成セッションはWebLogicDeploymentManager
から直接制御することもできますが、制御を簡単に実行できるメソッドがSessionHelper
に用意されています。使用しているツールで直接WebLogic Server Java EEデプロイメントAPI実装に対してコーディングする場合、必ずSessionHelper
を使用する必要があります。
SessionHelper
を使用すると、1回のメソッド呼出しでWebLogicDeploymentManager
を取得できます。この作業を効率的に行うには、アプリケーションを検索できる必要があります。SessionHelper
では「インストール・ルート」抽象を使用してアプリケーションとデプロイメント・プランのアーティファクトを表示します。これは理想的には実際のアプリケーションの構成です。インストール・ルートは次のように表示されます。
install-root (eg myapp) -- app ----- archive (eg myapp.ear) -- plan ----- deployment plan (eg plan.xml) ----- external descriptors (eg META-INF/weblogic-application.xml...)
アプリケーションは上記の構成でなくてもかまいません。ただし、アプリケーションと構成アーティファクトは共通のルートに保持するのが推奨されるアプローチです。そうすることでSessionHelper
で解釈できる形式になります。
SessionHelper.getModuleInfo()
では、アプリケーション構造の理解に役立つオブジェクトが返されます。この場合、DDBeans
およびDeployableObjects
を直接扱う必要がありません。次のような情報が提供されます:
アプリケーション内のモジュールおよびサブモジュールの名前およびタイプ
アプリケーションで提供されるWebサービスの名前
Webアプリケーションのコンテキスト・ルート
EJBのエンタープライズBean名
デプロイメント記述子は、内部的には記述子Beanのツリー(個々の記述子要素を表す型付きのJava Beanオブジェクトのツリー)として表現されます。こうしたBeanツリーを使用すると、より一般的なDDBean
およびDConfigBean
オブジェクトを扱うよりも簡単に処理できます。各モジュールの記述子Beanツリーには、関連する各モジュールのWebLogicDDBeanRoot
オブジェクトおよびWebLogicDConfigBeanRoot
オブジェクトから、それらのオブジェクトにあるgetDescriptorBean
メソッドを使用して直接アクセスできます。WebLogicDConfigBean
から取得したBeanツリーを変更すると、関連付けられたDConfigBean
(したがってアプリケーションのデプロイメント・プラン)を変更するのと同じ結果が得られます。
weblogic.PlanGenerator
を使用すると、アプリケーション内にあるJava EEおよびWebLogic Server記述子に基づいてデプロイメント・プランのテンプレートを作成できます。結果として作成されるプランによりアプリケーションの構造が記述され、すべてのデプロイメント記述子が特定されて、アプリケーションの構成可能なプロパティのサブセットがエクスポートされます。プロパティがエクスポートされると、そのプロパティはWebLogic Serverコンソールのようなツールに対して公開されます。そうしたツールではプランを使用して、管理者がプロパティに適切な値を指定できるように支援します。weblogic.PlanGenerator
ツールからは、デフォルトではアプリケーションの依存関係、つまり正常なデプロイメントに必要なプロパティのみがエクスポートされます。この動作は以下のオプションの1つを用いてオーバーライドできます。
Dependencies
: アプリケーションで参照するリソースをエクスポートします(デフォルト)
Declarations
: アプリケーションで定義されているリソースをエクスポートします
Configurables
: 非リソース指向の構成可能なプロパティをエクスポートします
Dynamics
: 実行中のアプリケーションで変更される可能性があるプロパティをエクスポートします
All
: すべての変更可能なプロパティをエクスポートします
None
: プロパティをエクスポートしません
デプロイメント操作用のJava Management Extensions (JMX) APIでは、Java EEデプロイメントAPI仕様(JSR-88)で使用可能な一般的な機能すべてをサポートしています。JMX APIをJSR-88の代替として使用し、指定したターゲット・サーバーで、次のようなデプロイメント・タスクを実行できます。
起動
停止
配布
デプロイ
再デプロイ
アンデプロイ
アプリケーションの再デプロイなしのデプロイメント・プランの更新
デプロイメント操作用のJMX APIでは、オープンMBeanデータ・タイプを使用するため、クライアント側ではWebLogic Serverクラスは必要ありません。デプロイメント用のこれらの新しいMBeansは、JSR-88と概念的に類似しており、ドメイン実行時MBeanサーバーに存在します。このモデルでは、管理サーバーでデプロイメント操作を開始する必要があります。
次の4つの実行時MBeansでは、デプロイメント操作用のJMX APIをサポートしています。
DeploymentManagerMBean
では、デプロイや配布などのデプロイメント操作を提供します。また、ドメインにデプロイされた各アプリケーションのAppDeploymentRuntime
MBeanにもアクセスできます。さらに、デプロイメント進行状況オブジェクトを管理し、アプリケーションが作成または削除された場合やアプリケーションの状態が変更された場合に、通知を表示します。
AppDeploymentRuntimeMBean
では、起動、停止、アンデプロイ、再デプロイ、およびアプリケーションの再デプロイなしのデプロイメント・プランの更新などの、アプリケーションのデプロイメント操作を提供します。
DeploymentProgressObjectMBean
では、AppDeploymentRuntime
MBeanによって開始されたデプロイメント操作をモニターします。
LibDeploymentRuntimeMBean
では、アンデプロイや再デプロイなどの、ライブラリのデプロイメント操作を提供します。
「Oracle WebLogic Server MBeanリファレンス」を参照してください。
デプロイメント操作用のJMX APIでは、JSR-88で使用可能なすべてのデプロイメント・オプションをサポートしています。これらは、Property
の名前/値ペアとして指定されます。デプロイメント・オプションを指定することにより、デフォルト値をオーバーライドできます。表 2-2に、サポート対象のデプロイメント・オプションの名前と値の概要を示します。
表2-2 JMX APIでサポートされているデプロイメント・オプション
デプロイメント・オプション | 説明 |
---|---|
|
実行中のアプリケーションを |
|
管理サーバーにある、代替アプリケーション・デプロイメント記述子の場所。 |
|
管理サーバーにある、代替WebLogicアプリケーション・デプロイメント記述子の場所。 |
|
アプリケーションのバージョン識別子。 |
|
このアプリケーションでクラスタのデプロイメント・タスクに付与されている時間(ミリ秒単位)。 |
|
ユーザーがデフォルト・プランを作成することを示すブール値。このオプションのデフォルト値はfalseです。 |
|
条件を満たすJMSサブモジュールのターゲット指定がシステムによって導出される必要があることを示すブール値。このオプションのデフォルト値はtrueです。 |
|
相互に関連するデプロイメントのロード順序を制御するオプション。 |
|
サーバーの起動時にファイルまたはアーカイブをデプロイするときに使用されるプリンシパルを示す文字列値(静的デプロイメントであるため、現在のデプロイメント・タスクには影響を与えません)。 |
|
アンデプロイメントのタイムアウト値を強制します。 |
|
本番モードから |
|
本番モードから |
|
共有Java EEライブラリまたはオプション・パッケージとしてのデプロイメント。 |
|
ライブラリの実装バージョン(マニフェストにない場合)。 |
|
ライブラリの仕様バージョン(マニフェストにない場合)。 |
|
バージョニング情報は無視されます。 |
|
デプロイメント・プランのバージョン識別子。 |
|
すべての処理中の作業が完了した後にのみ、アプリケーションを正常にリタイアするためのリタイア・ポリシー。このポリシーは停止および再デプロイ操作でのみ意味があり、リタイアされたタイムアウト・ポリシーと相互に排他的になります。 |
|
新しいバージョンで置き換えられたアプリケーションをリタイアする前にWebLogic Serverが待機する時間(秒単位)。このオプションのデフォルト値は-1で、正常なタイムアウトを指定します。 |
|
|
|
セキュリティ・モデル。有効な値は |
|
セキュリティ検証を有効にするかどうかを指定するブール値。 |
|
デプロイするアプリケーションのステージング・モード。有効な値は |
|
JMSモジュールのサブモジュール・レベル・ターゲット。例: |
|
操作を取り消す前にWebLogic Serverがデプロイメント・プロセスの完了を待機する時間(ミリ秒単位)。値 |
|
同じユーザーがドメインですでに取得している既存のロックを、デプロイメント処理で使用することを指定します。複数のデプロイメント・ツールを同時に使用していて、いずれかのツールでドメイン構成のロックをすでに取得している場合に便利。 |
|
バージョン識別子。 |
例2-1では、デプロイメント操作用のWebLogic Server JMX APIの使用について説明します。この例には、インライン・コメントと次の作業の実行方法が示されています。
同期および非同期でのアプリケーションのデプロイ
デプロイメント操作の進行状況のモニター
アプリケーションの停止
アプリケーションのアンデプロイ
通知の処理
注意:
この例では、可読性のためにJMXプロキシを使用しています。WebLogic Server JMX APIでは、オープン・タイプを使用しているため、WebLogic ServerクラスなしでJMXクライアントで実行できます。さらに、例をできるかぎり小さくするため、エラー処理が省略されています。
JMXの理解と使用に関する詳細な情報は、『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』および『Oracle WebLogic Server JMXによる管理可能アプリケーションの開発』を参照してください。
例2-1 デプロイメント操作用のJMX APIの使用
import weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean; import weblogic.management.runtime.AppDeploymentRuntimeMBean; import weblogic.management.runtime.DeploymentManagerMBean; import weblogic.management.runtime.DeploymentProgressObjectMBean; import java.util.Hashtable; import java.util.Properties; import javax.management.MBeanServerConnection; import javax.management.Notification; import javax.management.NotificationListener; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import javax.naming.Context; public class JMXDeploymentExample { // Deployment Manager JMX proxy DeploymentManagerMBean deploymentManager; // Domain Runtime MBean Server connection MBeanServerConnection connection; private void setUp() throws Exception { System.out.println("*** Setting up..."); // Get connection to the Domain Runtime MBean Server. // For more information, see Make Remote Connections to an MBean Server. // in Developing Custom Management Utilities Using JMX for Oracle WebLogic Server. connection = getDomainRuntimeJMXConnection(); // Get DeploymentManager JMX proxy. // For more information, see Oracle WebLogic Server MBean Reference. DomainRuntimeServiceMBean svcBean = (DomainRuntimeServiceMBean) weblogic.management.jmx.MBeanServerInvocationHandler.newProxyInstance( connection, new ObjectName(DomainRuntimeServiceMBean.OBJECT_NAME)); deploymentManager = svcBean.getDomainRuntime().getDeploymentManager(); // Add a JMX notification listener that outputs the JMX notifications generated during deployment operations. connection.addNotificationListener(new ObjectName("com.bea:Name=DeploymentManager,Type=DeploymentManager"), new DeployListener(), null, null); } /* * Demonstrates synchronously deploying an application. */ private void deploySynchronously() throws Exception { System.out.println("*** Deploying SimpleApp..."); // This form of the deploy operation is synchronous. // Errors are still returned through a progress object. // By default, the SimpleApp is deployed to all servers. DeploymentProgressObjectMBean progressObj = deploymentManager.deploy( "SimpleApp", "/apps/simpleapp.war", /* no plan */ null); printCompletionStatus(progressObj); } /* * Demonstrates asynchronously deploying an application to a server instance. */ private void deployASynchronously() throws Exception { System.out.println("*** Deploying VersionedApp..."); // This form of the deploy operation is asynchronous. // The caller should utilize the returned progress object to monitor the progress of the deployment. Properties deploymentOptions = new Properties(); deploymentOptions.put("appVersion", "V1"); deploymentOptions.put("planVersion", "P1"); DeploymentProgressObjectMBean progressObj = deploymentManager.deploy("VersionedApp", "/apps/app-v1.war", new String[] { "myserver" }, "/apps/app-v1-plan.xml", deploymentOptions); waitForCompletion(progressObj, 200); } /* * Demonstrates using a deployment progress object to display the status of the deployment operation. */ private void printCompletionStatus(DeploymentProgressObjectMBean progressObj) throws Exception { System.out.println(" State: " + progressObj.getState()); if ("STATE_FAILED".equals(progressObj.getState())) { Exception[] exceptions = progressObj.getRootExceptions(); for (int i = 0; exceptions != null && i < exceptions.length; i++) System.out.println(" Exception: " + exceptions[i]); } } /* * Demonstrates using a deployment progress object to wait for the completion of the deployment operation. */ private void waitForCompletion(DeploymentProgressObjectMBean progressObj, int timeoutSecs) throws Exception { for (int i = 0; i < timeoutSecs; i++) { String state = progressObj.getState(); if ("STATE_COMPLETED".equals(state) || "STATE_FAILED".equals(state)) break; try { Thread.currentThread().sleep(1000); } catch (InterruptedException ex) { //ignore } } printCompletionStatus(progressObj); } /* * Demonstrates stopping an application asynchronously. */ private void stopAsynchonously() throws Exception { System.out.println("*** Stopping SimpleApp..."); // The DeploymentManagerMBean is used for the initial deployment of an application. // After the initial deployment, the AppDeploymentRuntimeMBean is used for stop, start, // redeploy, and undeploy of an application. AppDeploymentRuntimeMBean appRuntime = deploymentManager.lookupAppDeploymentRuntime("SimpleApp"); Properties deploymentOptions = new Properties(); deploymentOptions.put("gracefulIgnoreSessions", "true"); DeploymentProgressObjectMBean progressObj = appRuntime.stop(new String[]{"myserver"}, deploymentOptions); waitForCompletion(progressObj, 200); } /* * Demonstrates using an AppDeploymentRuntimeMBean to undeploy an application. */ private void undeploySynchronously() throws Exception { System.out.println("*** Undeploying SimpleApp..."); // The DeploymentManagerMBean is used for the initial deployment of an application. // After the initial deployment, the AppDeploymentRuntimeMBean is used for stop, start, // redeploy, and undeploy of an application. AppDeploymentRuntimeMBean appRuntime = deploymentManager.lookupAppDeploymentRuntime("SimpleApp"); DeploymentProgressObjectMBean progressObj = appRuntime.undeploy(); printCompletionStatus(progressObj); } /* * Demonstrates the notifications that are generated by WebLogic Server deployment operations. */ private class DeployListener implements NotificationListener { public void handleNotification(Notification notification, Object handback) { System.out.println(" Notification from DeploymentManagerMBean"); System.out.println(" notification type: " + notification.getType()); String userData = (String)notification.getUserData(); System.out.println(" userData: " + userData); } } private MBeanServerConnection getDomainRuntimeJMXConnection() throws Exception { JMXServiceURL serviceURL = new JMXServiceURL("t3", "localhost", 7001, "/jndi/weblogic.management.mbeanservers.domainruntime"); Hashtable h = new Hashtable(); h.put(Context.SECURITY_PRINCIPAL, "weblogic"); h.put(Context.SECURITY_CREDENTIALS, "password"); h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote"); JMXConnector connector = JMXConnectorFactory.connect(serviceURL, h); MBeanServerConnection connection = connector.getMBeanServerConnection(); return connection; } public static void main(String args[]) throws Exception { JMXDeploymentExample example = new JMXDeploymentExample(); example.setUp(); example.deploySynchronously(); example.deployASynchronously(); example.stopAsynchonously(); example.undeploySynchronously(); } }
デプロイメント検証プラグインを作成すると、WebLogic Serverドメインにアプリケーションをデプロイする前に、そのアプリケーションを検証できます。管理サーバーでは、デプロイメント・プロセスの開始時にプラグインを実行して、アプリケーションがドメインに対して有効であるかどうかを判断します。検証にパスすると、アプリケーションがデプロイされます。検証に失敗すると、アプリケーションはデプロイされないので、構成変更やデプロイメントのエビデンスは記録されません。
デプロイメント検証プラグインを使用する場合は、ドメイン固有の要件に基づいて、無効と判断すべき条件を定めておきます。たとえば、不正な形式やEJBを拒否するようにプラグインを構成できます。登録可能なデプロイメント検証プラグインはドメインごとに1つのみで、プラグインはドメインに対して一意であることが必要です。新しいデプロイメント検証プラグインを構成して、元のプラグインを置き換えることは可能ですが、同じドメインに2つ目のプラグインを追加することはできません。
WebLogic Serverでデプロイメント検証プラグインを使用すると、次のことができるようになります。
不正なアプリケーション・コードを拒否して悪意のあるアプリケーションからドメインを保護
アプリケーションのデプロイメント・プランの変更
構成パラメータを使用して固有の要件に合せたプラグインの調整
メッセージのログ記録
検証はオプションのステップなので、デプロイメント検証プラグインの有無にかかわらず、デプロイメント・プロセスは変わりません。検証プロセスはアプリケーションの初回デプロイ時に発生し、デプロイ済アプリケーションのサーバー起動時や自動デプロイメント中には発生しません。
次の各項では、WebLogic Serverでデプロイメント検証プラグインを使用して、アプリケーションを検証する方法について説明します。
デプロイメント検証プラグインをWebLogic Serverで実行できるようにするには、<deployment-validation-plugin>
要素をconfig.xml
ファイルに追加し、管理サーバーがプラグインのクラスにアクセスしてそのクラスを使用できるようにする必要があります。<deployment-validation-plugin>
要素にプラグインの完全修飾クラス名を追加して、パラメータを宣言する必要があります。<deployment-validation-plugin>
要素は、手動またはDomainMBean
に用意されているDeploymentConfigurationMBean
を使用して追加できます。
デプロイメント検証プラグインは、次の3つの構成MBeansでサポートされています。
DeploymentConfigurationMBean
にはDeploymentValidationPlugIn
属性が含まれています。この属性はDeploymentValidationPluginMBean
で、デプロイメント検証プラグインを有効または無効にする<deployment-validation-plugin>
要素に対応します。
DeploymentValidationPluginMBean
DeploymentValidationPluginMBean
では、デプロイメント検証プラグインの構成情報を指定します。このMBeanには、プラグインの完全修飾クラス名であるFactoryClassname
属性が含まれています。このクラスは、管理サーバーのCLASSPATH
から使用できる必要があります。DeploymentValidationPluginMBean
には、プラグインに渡すことのできるパラメータも含まれています。これらのパラメータはParameterMBean
で宣言します。
ParameterMBean
では、デプロイメント検証プラグインの構成パラメータとユーザー・パラメータを指定します(Name
、Value
、Description
など)。
WebLogic Serverは、デプロイメント検証プラグインのコード自体は提供しませんが、プラグインをデプロイメント・プロセスの一環として実行し、検証してドメインを悪意のあるアプリケーションから保護する方法を備えています。ドメイン管理者は、使用環境の要件や仕様に従って、ドメイン固有のプラグインで使用するコードのプログラミングとコンパイルを行います。プラグイン・クラスと、そこで使用されるその他のクラスは、管理サーバーのCLASSPATH
から使用できる必要があります。
デプロイメント検証プラグインはプラグイン・ファクトリ・インタフェースweblogic.deployment.configuration.DeploymentValidationPlugin
を実装している必要があります。デプロイメント検証プラグインのインスタンスを作成するため、この実装には空のコンストラクタが含まれている必要があります。
weblogic.deployment.configuration
インタフェースには、初期化メソッドと検証メソッドが含まれています。初期化メソッドは、デプロイメント検証プラグインのインスタンスに対して、config.xmlファイルの<deployment-validation-plugin>
要素で宣言されているparameters
を提供します。検証メソッドはアプリケーション・コンテキスト情報を提供し、アプリケーションに検証結果を返します。
検証結果はValidationResult
インタフェースを実装するクラスです。デプロイメントが有効で作業を続行する必要があるかどうかを示すisDeploymentValid
メソッドを実装します。デプロイメントが無効な場合に、その原因として設定する必要のある例外を提供するgetException
メソッドを実装します。検証メソッドに渡される引数はDeploymentValidationContext
で、SessionHelper
インスタンスを介して、指定されたアプリケーションへのアクセスを提供します。デプロイメント検証プラグインではDeploymentValidationContext
引数のgetSessionHelper
属性を使用して、SessionHelper
で許可されているアプリケーション情報を確認します。
DeploymentValidationContext
引数では、DeploymentValidationLogger
へのアクセスも提供します。DeploymentValidationLogger
では、アプリケーションの検証で実行されるプラグイン・アクションやアプリケーションを無効とした理由に関するメッセージをログに記録します。
検証結果でアプリケーションが有効であることが示された場合、デプロイメントは検証にパスして、デプロイメント・プロセスを続行します。検証結果でアプリケーションが無効であることが示された場合、プラグインではアプリケーションが検証に失敗した理由を説明する例外メッセージを送信して、アプリケーションはデプロイされません。構成変更やデプロイメントのエビデンスは記録されません。検証プロセスは管理サーバー上で発生するため、デプロイメントが失敗しても管理対象サーバーではデプロイメントを意識することはなく、構成をアンデプロイしたり元に戻したりする必要はありません。