プライマリ・コンテンツに移動
Oracle® Fusion Middleware WebLogic Deployment APIによるアプリケーションのデプロイ
12c (12.2.1.2.0)
E82899-02
目次へ移動
目次

前
次

2 WebLogicデプロイメントAPIの理解

この章では、Java EEデプロイメントAPI仕様(JSR-88)を実装および拡張するWebLogicデプロイメントAPIの構造および機能について説明します。また、デプロイメント操作用のJMX APIについても説明します。これは、JSR-88の代替として使用できます。

この章の内容は以下のとおりです。

JSR-88の詳細は、http://jcp.org/en/jsr/detail?id=88を参照してください。

WebLogicデプロイメントAPI

注意:

WebLogic Server 9.0では、旧リリースで使われていたweblogic.management.deploy APIの使用は非推奨になっています。

次の項では、WebLogic ServerデプロイメントAPIの概要を説明します。

WebLogicデプロイメント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デプロイメントAPIのweblogic.Deployer実装

WebLogic Serverでは、パッケージ化されたデプロイメント・ツールwebLogic.Deployerが提供されています。このツールを使用すると、WebLogic Serverでデプロイメント・サービスを利用できます。WebLogicデプロイメントAPIを使用して実装できるデプロイメント操作は、weblogic.Deployerによって部分的に、または完全に実装されています。

WebLogicデプロイメントAPIを使用する場合

注意:

weblogic.Deployerは、WebLogic Server環境にお薦めするデプロイメント・ツールです。weblogic.DeployerおよびWebLogic Server管理コンソールの使用方法は、「Oracle WebLogic Serverへのアプリケーションのデプロイ」を参照してください。

WebLogicデプロイメントAPIは以下の場合に必要になります。

Java EEデプロイメントAPIコンプライアンス

WebLogicデプロイメントAPIのクラスおよびインタフェースは、javax.enterprise.deployサブパッケージに記述されているJava EEデプロイメントAPI仕様(JSR-88)インタフェースを拡張および実装します(http://docs.oracle.com/javaee/7/api/overview-summary.htmlを参照)。WebLogicデプロイメントAPIには、以下のパッケージが提供されています。

WebLogic Serverのデプロイメントの付加価値機能

WebLogicでは、http://jcp.org/en/jsr/detail?id=88のJava EEデプロイメントAPI仕様(JSR-88)に記述されている「製品プロバイダ」のロールをサポートし、任意のJava EEネットワーク・クライアント用の拡張可能なコンポーネントに加えて、WebLogic Server環境固有のユーティリティも用意されています。そうした拡張機能には、以下のようなものがあります。

  • WebLogicの各種機能のサポート。adminモードでの起動や、バージョニング機能付きの再デプロイなどがあります。

  • 以下のようなきめ細かなレベルでの制御。

    • モジュール・レベルのターゲット指定

    • 部分的な再デプロイメント(アプリケーションの一部の再デプロイメントまたは削除)

    • 動的な構成変更

  • JMS、JDBC、インターセプション、アプリケーション固有の構成(カスタムまたは構成)モジュールなど、WebLogicモジュール拡張のサポート。

  • 付加的な操作。distributestartを組み合わせたDeployという動詞などがあります。

    注意:

    WebLogicデプロイメントAPIでは、アプリケーションの更新に失敗した際の自動フォールバック手続きはサポートされていません。この動作のポリシーと手続きは、各デプロイメント環境の開発者または管理者が定義し、構成する必要があります。

Service Provider Interfaceパッケージ

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.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デプロイメント記述子のプロパティがカプセル化されます。

weblogic.deploy.api.spi.factories

このパッケージに含まれるインタフェースは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ターゲット・タイプの問合せサポート

WebLogic Serverでは、WebLogicTargetクラスにWebLogic Serverで使用できるターゲット・タイプを管理するための直接インタフェースが提供されています。表2-1で、ターゲット・アクセサ・メソッドについて説明します。


表2-1ターゲット・アクセサ・メソッド

メソッド 説明

boolean isCluster()

このターゲットがクラスタかどうかを示します。

boolean isJMSServer()

このターゲットがJMSサーバーかどうかを示します。

boolean isSAFAgent()

このターゲットがSAFエージェントかどうかを示します。

boolean isServer()

このターゲットがサーバーかどうかを示します。

boolean isVirtualHost()

このターゲットが仮想ホストかどうかを示します。


サーバーのステージング・モード

アプリケーションのステージング・モードは、デプロイメントの動作に影響します。アプリケーションのステージング動作は、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に設定されます。

DConfigBean検証

DConfigBeanのプロパティ・セッターでは、無効な値の設定が拒否されます。これには、プロパティの型の検証(整数型プロパティに対する非数値の指定の検証など)が含まれます。一部のプロパティでは、セマンティックな検証(関連する最小値よりも最大値が小さく指定されていないことの確認など)が行われます。

Modelパッケージ

これらのクラスは、javax.enterprise.deploy.modelインタフェースのWebLogic Server拡張および実装です(http://docs.oracle.com/javaee/7/api/javax/enterprise/deploy/model/package-summary.htmlを参照)。modelインタフェースでは、Java EEアプリケーションの標準的な要素(デプロイメント記述子など)を表現します。

weblogic.deploy.api.model

このパッケージには、デプロイ可能なオブジェクトの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を作成します。基本的な構成タスクを実行するには、WebLogicDDBeanWebLogicDConfigBeanに関連付けます。WebLogicDConfigBeanはWebLogic Serverへのアプリケーションのデプロイに必要なサーバー構成のプロパティを表しています。「アプリケーション評価」を参照してください。

サーバー環境(この場合はWebLogic Serverインスタンス)の具体的な構成情報を格納するDConfigBeanと異なり、DDBeanオブジェクトにはアプリケーションの一般的なデプロイメント記述子要素が格納されます。たとえば、Webアプリケーションをデプロイする場合、WebLogicDDBeansのデプロイメント記述子は、.warアーカイブのWEB-INF/web.xmlファイルから取得されます。WebLogicDConfigBeansの情報は、WebLogicDDBeansに基づいて.warアーカイブのWEB-INF/weblogic.xmlから取得されます。これらのBeanは構成情報を保持するという基本的な目的については同じですが、論理的には異なるものです。DDBeanではアプリケーションについて記述され、DConfigBeansでは特定の環境に対してアプリケーションが構成されます。

これらのオブジェクトは両方とも構成セッションを開始するときに生成されます。WebLogicDeployableObjectWebLogicDDBeans、およびWebLogicDConfigBeansはすべて構成セッションの中でインスタンス化され、操作されます。「構成プロセスの概要」を参照してください。

Sharedパッケージ

次の項では、WebLogic Server固有のデプロイメント・コマンド、モジュールのタイプ、および(クラスとしての)ターゲット・タイプを表現する一連のクラスについて説明します。

weblogic.deploy.api.shared

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パッケージに定義されている必須のコマンド・タイプに、deployupdateのコマンド・タイプが追加され、WebLogicDeploymentManagerから利用できます。

モジュールのタイプのサポート

サポートされているモジュールのタイプには、JMS、JDBC、インターセプション、WSEE、構成、およびWLDFがあります。これらはweblogic.deploy.api.shared.WebLogicModuleTypeクラスにフィールドとして定義されています。

全種類のWebLogic Serverターゲットのサポート

Java EEデプロイメントAPI仕様では実装されていないターゲットはWebLogicデプロイメントAPIで実装されます。有効なターゲットの値は以下のとおりです。

  • クラスタ

  • JMSサーバー

  • ストア・アンド・フォワード(SAF)エージェント

  • サーバー

  • 仮想ホスト

これらは、weblogic.deploy.api.shared.WebLogicTargetTypeクラスの列挙フィールドの値です。

Toolsパッケージ

次の項では、最小限の制御および明示的なオブジェクト操作で一般的なデプロイメント・ツールのタスクを実行できるAPIツールについて説明します。

weblogic.deploy.api.tools

weblogic.deploy.api.toolsには、コンビニエンス・クラスが用意されています。

  • WebLogicDeploymentManagerの取得

  • アプリケーションの構成の入力

  • デプロイメント・プランの新規作成または更新

ツール・パッケージのクラス群は、Java EEデプロイメントAPI仕様(JSR-88、http://jcp.org/en/jsr/detail?id=88を参照)インタフェースの拡張ではありません。これらのクラス群を使用すると、WebLogicデプロイメントAPIで提供されるデプロイメント操作に簡単にアクセスできます。

SessionHelper

構成セッションは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: プロパティをエクスポートしません

デプロイメント操作用のJMX API

デプロイメント操作用の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

    DeploymentManagerMBeanでは、デプロイや配布などのデプロイメント操作を提供します。また、ドメインにデプロイされた各アプリケーションのAppDeploymentRuntime MBeanにもアクセスできます。さらに、デプロイメント進行状況オブジェクトを管理し、アプリケーションが作成または削除された場合やアプリケーションの状態が変更された場合に、通知を表示します。

  • AppDeploymentRuntimeMBean

    AppDeploymentRuntimeMBeanでは、起動、停止、アンデプロイ、再デプロイ、およびアプリケーションの再デプロイなしのデプロイメント・プランの更新などの、アプリケーションのデプロイメント操作を提供します。

  • DeploymentProgressObjectMBean

    DeploymentProgressObjectMBeanでは、AppDeploymentRuntime MBeanによって開始されたデプロイメント操作をモニターします。

  • LibDeploymentRuntimeMBean

    LibDeploymentRuntimeMBeanでは、アンデプロイや再デプロイなどの、ライブラリのデプロイメント操作を提供します。

詳細は、Oracle WebLogic Server MBeanリファレンスを参照してください。

サポート対象のデプロイメント・オプション

デプロイメント操作用のJMX APIでは、JSR-88で使用可能なすべてのデプロイメント・オプションをサポートしています。これらは、Propertyの名前/値ペアとして指定されます。デプロイメント・オプションを指定することにより、デフォルト値をオーバーライドできます。表 2-2に、サポート対象のデプロイメント・オプションの名前と値の概要を示します。


表2-2 JMX APIでサポートされているデプロイメント・オプション

デプロイメント・オプション 説明

adminMode

実行中のアプリケーションをADMINモードに切り替えて、構成済の管理チャネル経由での管理リクエストのみを受け付けることを指定するオプション。

altDD

管理サーバーにある、代替アプリケーション・デプロイメント記述子の場所。

altWlsDD

管理サーバーにある、代替WebLogicアプリケーション・デプロイメント記述子の場所。

appVersion

アプリケーションのバージョン識別子。

clusterDeploymentTimeout

このアプリケーションでクラスタのデプロイメント・タスクに付与されている時間(ミリ秒単位)。

createPlan

ユーザーがデフォルト・プランを作成することを示すブール値。このオプションのデフォルト値はfalseです。

defaultSubmoduleTargets

条件を満たすJMSサブモジュールのターゲット指定がシステムによって導出される必要があることを示すブール値。このオプションのデフォルト値はtrueです。

deploymentOrder

相互に関連するデプロイメントのロード順序を制御するオプション。

deploymentPrincipalName

サーバーの起動時にファイルまたはアーカイブをデプロイするときに使用されるプリンシパルを示す文字列値(静的デプロイメントであるため、現在のデプロイメント・タスクには影響を与えません)。

forceUndeployTimeout

アンデプロイメントのタイムアウト値を強制します。

gracefulIgnoreSessions

本番モードからADMINモードへの正常な移行の際に保留中のHTTPセッションを無視するかどうかを指定するブール値。このオプションのデフォルト値はfalseで、gracefulProductionToAdminがtrueに設定されている場合にのみ適用されます。

gracefulProductionToAdmin

本番モードからADMINモードへの移行を正常に行う必要があるかどうかを指定するブール値。このオプションのデフォルト値はfalseです。

library

共有Java EEライブラリまたはオプション・パッケージとしてのデプロイメント。

libImplVer

ライブラリの実装バージョン(マニフェストにない場合)。

libSpecVer

ライブラリの仕様バージョン(マニフェストにない場合)。

noVersion

バージョニング情報は無視されます。

planVersion

デプロイメント・プランのバージョン識別子。

retireGracefully

すべての処理中の作業が完了した後にのみ、アプリケーションを正常にリタイアするためのリタイア・ポリシー。このポリシーは停止および再デプロイ操作でのみ意味があり、リタイアされたタイムアウト・ポリシーと相互に排他的になります。

retireTimeout

新しいバージョンで置き換えられたアプリケーションをリタイアする前にWebLogic Serverが待機する時間(秒単位)。このオプションのデフォルト値は-1で、正常なタイムアウトを指定します。

rmiGracePeriod

正常停止または廃止の際にRMIの猶予期間内でRMIリクエストの受信がなくなるまで、ワーク・マネージャがRMI呼出しを受け付けてスケジューリングする時間(秒単位)。

securityModel

セキュリティ・モデル。有効な値はDDOnlyCustomRolesCustomRolesAndPolicies、およびAdvancedです。

securityValidationEnabled

セキュリティ検証を有効にするかどうかを指定するブール値。

stageMode

デプロイするアプリケーションのステージング・モード。有効な値はstagenostage、およびexternal_stageです。指定していない場合は、WebLogic Serverでは、デフォルトのステージ・モードが使用されます。デフォルトのステージ・モードは、管理サーバーの場合はnostage、管理対象サーバーの場合はstageです。

subModuleTargets

JMSモジュールのサブモジュール・レベル・ターゲット。例: submod@mod-jmx.xml@target | submoduleName@!target

timeout

操作を取り消す前にWebLogic Serverがデプロイメント・プロセスの完了を待機する時間(ミリ秒単位)。値0は、操作のタイムアウトが発生しないことを示します。この引数のデフォルト値は300,000 ms(5分)です。

useNonExclusiveLock

同じユーザーがドメインですでに取得している既存のロックを、デプロイメント処理で使用することを指定します。複数のデプロイメント・ツールを同時に使用していて、いずれかのツールでドメイン構成のロックをすでに取得している場合に便利。

versionIdentifier

バージョン識別子。


デプロイメント操作用のJMX APIの使用

例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でのデプロイメント検証プラグインの使用方法

デプロイメント検証プラグインを作成すると、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

    DeploymentConfigurationMBeanにはDeploymentValidationPlugIn属性が含まれています。この属性はDeploymentValidationPluginMBeanで、デプロイメント検証プラグインを有効または無効にする<deployment-validation-plugin>要素に対応します。

  • DeploymentValidationPluginMBean

    DeploymentValidationPluginMBeanでは、デプロイメント検証プラグインの構成情報を指定します。このMBeanには、プラグインの完全修飾クラス名であるFactoryClassname属性が含まれています。このクラスは、管理サーバーのCLASSPATHから使用できる必要があります。DeploymentValidationPluginMBeanには、プラグインに渡すことのできるパラメータも含まれています。これらのパラメータはParameterMBeanで宣言します。

  • ParameterMBean

    ParameterMBeanでは、デプロイメント検証プラグインの構成パラメータとユーザー・パラメータを指定します(NameValueDescriptionなど)。

デプロイメント検証プラグインの使用方法

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では、アプリケーションの検証で実行されるプラグイン・アクションやアプリケーションを無効とした理由に関するメッセージをログに記録します。

検証結果でアプリケーションが有効であることが示された場合、デプロイメントは検証にパスして、デプロイメント・プロセスを続行します。検証結果でアプリケーションが無効であることが示された場合、プラグインではアプリケーションが検証に失敗した理由を説明する例外メッセージを送信して、アプリケーションはデプロイされません。構成変更やデプロイメントのエビデンスは記録されません。検証プロセスは管理サーバー上で発生するため、デプロイメントが失敗しても管理対象サーバーではデプロイメントを意識することはなく、構成をアンデプロイしたり元に戻したりする必要はありません。