4 ジェスチャの追加

独自のジェスチャおよび操作をOIG構成ユーティリティに追加できます。ユーティリティにはGesturesSPIが含まれており、このサービス・プロバイダ・インタフェースを使用すると新規ジェスチャを実装できます。そのためには、AbstractGestureクラスを拡張して独自のジェスチャを作成します。各ジェスチャで1つ以上の操作を定義できます。操作のサポートを追加するには、各操作のAbstractGestureOperationを拡張します。MBeans操作を使用すると、WebLogic Serverに変更を加えることができます。コードが完成したら、ジェスチャ・クラスをlib/ディレクトリにコピーし、oig-utility-config.jsongesturesConfigセクションにジェスチャを追加して、isEnabledの値をtrueに設定します。ジェスチャが有効であれば、ユーティリティを起動すると、ユーティリティ・ヘルプの「Configured Gestures」セクションにジェスチャが表示されます。

AbstractGestureの拡張

ジェスチャを作成するには、AbstractGestureクラスを拡張し、抽象メソッドを実装して、ジェスチャ固有の情報を追加する必要があります。TuningGesture.javaソース・コードは、AbstractGestureを拡張してジェスチャを実装する方法の例を示しています。次の各項では、ジェスチャ・クラスの作成について詳しく説明します。

ジェスチャ・メソッドのオーバーライド

OIG構成ユーティリティでジェスチャを使用できるようにするには、ジェスチャ・クラスの次のメソッドをオーバーライドする必要があります:

メソッド 説明 サンプル戻り値
public String getDescription() ジェスチャの説明を含む文字列を返します。 Tune different components.
public List<GestureOperation> getOperations() このジェスチャによってサポートされる操作のリストを返します。操作は、AbstractGestureOperationクラスを拡張することで作成されます。  
public String getShortName() ジェスチャの短縮名を返します。 tune

ユーティリティでは、これらのメソッドによって返された値を使用して、有効なジェスチャに関するヘルプを自動的に生成します。oig-utility-config.jsonでジェスチャを有効にできます。

AbstractGestureOperationの拡張

操作を作成するには、AbstractGestureOperationクラスを拡張し、抽象メソッドを実装して、操作固有の情報を指定する必要があります。たとえば、tuneジェスチャは、TuneDBOperation.javaで実装される「DBのチューニング」操作を提供します。OIG構成ユーティリティに付属する操作のコードは、AbstractGestureOperationを拡張して操作を実装する方法を示しています。各ジェスチャで1つ以上の操作を定義できます。次の各項では、OIG構成ユーティリティ・フレームワークで機能する操作の実装に関する追加情報を提供します:

GestureOperationメソッドのオーバーライド

OIG構成ユーティリティでジェスチャを使用できるようにするには、ジェスチャ操作クラスの次のメソッドをオーバーライドする必要があります:
メソッド 説明 サンプル戻り値
public int execute() このメソッドは、操作の実行ロジックを定義します。フレームワークでは、この操作を実行するリクエストを受信すると、このメソッドをコールします。  
public GestureOperationReport generateReport() この操作の影響を受ける属性のレポートを生成します。  
public String getDescription() このメソッドは、操作の説明を返します。 Tune Database Operation
public String getLongCliFlag() このメソッドは、この操作の実行に使用できるロングCLIフラグを返します。 -database
public String getShortCliFlag() このメソッドは、この操作の実行に使用できるショートCLIフラグを返します。 -d
public Class getOperationAttributeClass() このメソッドは、この操作で属性の定義に使用される属性クラスを返します。 DBTuneAttributes.class
public List<Option> getOptions() このメソッドは、この操作に対してコマンドラインで指定できる、サポートされているオプションのリストを返します。  
public List<RequiredParam> getRequiredParams() このメソッドは、この操作の実行に必要なパラメータのリストを返します。これらは、inputs.propertiesで定義するか、CLIで指定できます。  
public List<String> getWarnings() このメソッドは、HTMLレポートおよびログに表示する警告のリストを返します。これらは、操作の実行後に必要な手動ステップなどの一般的な警告です。  
public void validate() このメソッドには、ジェスチャ操作で実行する必要のある検証が含まれています。  

属性の実装

各操作に対して、com.oracle.oig.gesture.spi.Attributesマーカー・インタフェースを実装するクラスを作成する必要があります。このインタフェースは、GesturesSPIフレームワークの一部としてAttributes.javaに定義されます。Attributesを実装する各クラスには、操作によって変更される属性が含まれます。

Attributesの実装例の1つにDBTuneAttributes.javaがあります。これは、データベース・チューニング操作で使用されるすべての属性をモデル化したものです。フレームワークでは、実装を使用して、その一連の属性に関連付けられた操作の実行時に使用するオブジェクトを作成します。

oig-utility-config.jsonの更新

操作の属性モデルを作成した後、操作の属性とその値を含むセクションを追加して、oig-utility-config.jsonを更新する必要があります。たとえば、Attributesマーカー・インタフェースのDBTuneAttributes.java実装に対応するDBチューニング操作の属性は、次のようにoig-utility-config.jsonに含められます:

                "Tune Database Operation":
                {
                  "com.oracle.oig.attributes.DBTuneAttributes":
                  {
                    "queries":
                    [
                      "java.util.ArrayList",
                      [
                        {
                          "com.oracle.oig.attributes.QueryAttributes":
                          {
                            "parameter": "DB_KEEP_CACHE_SIZE=200M"
                          }
                        },

                        ...

                        {
                          "com.oracle.oig.attributes.StoredProcedures": 
                          {
                            "parameter": "OPEN_CURSORS=600"
                          }
                        }
                      ]
                    ]
                  }
                },

OIG構成ユーティリティのユーザーは、操作用に追加する構造の属性の値を変更して、構成に新しい値を設定できます。

オプションの定義

操作には一連の関連オプションがあり、各オプションがOptionオブジェクトによって定義されています。

各操作は、オプションを保持する配列を定義しています。TuneDBOperationは、配列を次のように定義しています:
private static final List<Option> options = new ArrayList<Option>();
Optionは、6つの値で構成されています:
  • description - ユーティリティ・ヘルプで使用される操作の説明。

  • hasValue - オプションに関連する値があるかどうかを示すフラグ。trueに設定した場合、フレームワークではこのオプションの値が予測され、操作の実行時に値が指定されたかどうかが検証されます。

  • isOptional - オプションがオプションかどうかを示すフラグ。オプションの場合はtrue、オプションが必須の場合はfalseに設定します。

  • longCliFlag - オプションのCLIロング・フラグ。

  • shortCliFlag - オプションのCLIショート・フラグ。

  • validValues - このオプションに対して有効な一連の値。

クラス変数では、OptionlongCliFlagおよびshortCliFlagメンバーを定義する方法を示します。hasValueおよびisOptionalの値は、Optionの作成時に定義されます。

操作へのオプションの追加

操作にオプションを追加するには、getOptions()メソッドを実装します。その中で、操作のオプションを作成してoptionsリストに追加します。

Optionを作成する際、使用可能なコンストラクタが2つあります。1つはオプションがデフォルトでオプションになる(isOptionalの値が渡されない)もの、もう1つはオプションがオプションであるかどうかを指定する必要があるものです。たとえば、TuneDBOperationでは、最初のメソッドが次のように使用されています:
  @Override
  public List<Option> getOptions() throws OIGException {
    if (options == null || options.isEmpty()) {
      final Option dbOption = new Option(LONG_CLI_FLAG, SHORT_CLI_FLAG, "Tune DB params", false);
      options.add(dbOption);
    }
    return options;
  }
getOptions()メソッドでもオプションの有効な値を指定します。たとえば、次のgetOptions()メソッドでは、ファンクションXYZを有効にするオプションを追加します:
  @Override
  public List<Option> getOptions() throws OIGException {
    if (options == null || options.isEmpty()) {
      final Option enableOption =
          new Option(LONG_CLI_FLAG, SHORT_CLI_FLAG, "Enable XYZ for OIM servers", false);

      for (final PostInstallConstants.SupportedComponents s : PostInstallConstants.SupportedComponents
          .values()) {

        enableOption.addValidValue(s.getSupportedComponent());
      }

      options.add(enableOption);
    }
    return options;
  }

前述の例は、有効な値をOption (ここではenableOption)に追加してから、Optionを操作のoptionsリストに追加する方法を示しています。フレームワークでは、入力をこれらの値に対してチェックし、無効な値が指定された場合はエラーを返します。

必須パラメータの定義

操作には特定の入力が必要な場合があります。たとえば、WebLogic Serverのユーザー名とパスワードが操作に必要な場合があります。この種の入力は必須パラメータと呼ばれます。

各操作は、必須パラメータを格納するクラス変数を次のように定義しています:
private static final List<RequiredParam> requiredParams = new LinkedList<RequiredParam>();

必須入力を定義するには、RequiredParamオブジェクトを作成します。各RequiredParamには、5つの属性があります。パラメータの名前、対話型モードでユーザーにパラメータ値の入力を求めるときに表示するテキスト、パラメータの説明、入力がセキュアで、対話型モードでマスキングする必要があるかどうか、パラメータがオプションかどうかです。パラメータがセキュアである(trueに設定されている)場合、その値の入力はコマンドラインでマスクされます。RequiredParamは、オプションかどうかを指定せずに作成すると、必須になります。

操作の必須パラメータを設定するには、AbstractGestureOperationgetRequiredParams()メソッドをオーバーライドします。TuneDBOperation.javaでの実装は次のとおりです:

@Override
public List<RequiredParam> getRequiredParams() throws OIGException {
  if (requiredParams.isEmpty()) {

    final RequiredParam dbSysUrl = new RequiredParam(DBParams.DB_SYS_URL.paramName,
      "Enter Database JDBC URL for sys dba: Ex:jdbc:oracle:thin:@dbhostname:5521(:orclsid or /serviceName)",
      "Jdbc url is used to connect to the db ", false);

    final RequiredParam dbSysDbaUser = new RequiredParam(DBParams.DB_SYS_DBA_USER.getParamName(),
      "Enter Database Sys User", "Database Sys User", false);

    final RequiredParam dbSysDbaPassword =
      new RequiredParam(DBParams.DB_SYS_DBA_PASSWORD.getParamName(),
      "Enter Database Sys Password", "Database Sys Password", true);

    final RequiredParam dbOimUrl = new RequiredParam(DBParams.DB_OIM_URL.paramName,
      "Enter Database JDBC URL for oim user: Ex:jdbc:oracle:thin:@dbhostname:5521(:orclsid or /serviceName)",
      "Jdbc url is used to connect to the oim user. (Example: jdbc:oracle:thin:@dbhostname:5521(:orclsid or /serviceName)) ",
      false);

    final RequiredParam dbOimUser = new RequiredParam(DBParams.DB_OIM_USER.getParamName(),
      "Enter Database Oim User", "Database Oim User", false);

    final RequiredParam dbOimUserPassword =
      new RequiredParam(DBParams.DB_OIM_USER_PASSWORD.getParamName(),
      "Enter Database Oim Password", "Database Oim Password", true);

    requiredParams.add(dbSysUrl);
    requiredParams.add(dbSysDbaUser);
    requiredParams.add(dbSysDbaPassword);
    requiredParams.add(dbOimUrl);
    requiredParams.add(dbOimUser);
    requiredParams.add(dbOimUserPassword);
  }
  return requiredParams;

}

操作を実行すると、操作に指定した入力がフレームワークでチェックされ、いずれかの必須パラメータが指定されていない場合はエラーが返されます。

ジェスチャのデプロイ

ジェスチャがサポートする操作ごとにAbstractGestureクラスとAbstractGestureOperationクラスを記述してジェスチャを作成した後、いくつかのステップを実行して、ジェスチャをユーティリティに追加する必要があります。

コードが完成したら、ジェスチャのJARを作成してlib/ディレクトリにコピーし、oig-utility-config.jsonのgesturesConfigセクションにジェスチャを追加して、isEnabledの値をtrueに設定します。

JARのビルドとコピー

ジェスチャをユーティリティ用に準備するには、Javaコードをビルドし、ジェスチャのJARを生成し、JARをユーティリティのlib/ディレクトリにコピーして、JARクラス・パス環境変数をまだ設定していない場合は設定します。CLASSPATH=で始まる行にパスを追加することで、oig-config-utility.shにクラス・パスを設定できます。

ジェスチャの追加と有効化

フレームワークは、lib/ディレクトリに存在するすべてのジェスチャ・コードにアクセスできます。ただし、OIG構成ユーティリティでユーザーにジェスチャを提供するには、ユーティリティ構成にジェスチャを追加する必要があります。

ユーティリティ構成にジェスチャを追加するには、oig-utility-config.jsonを編集して、ジェスチャのエントリをgesturesConfig配列に追加します。たとえば、サンプルのMyGestureOperationジェスチャのエントリは次のようになります:

    {
      "name": "My Gesture",
      "gestureClass": "com.yourcompany.oig.gestures.MyGesture",
      "isEnabled": "true"
    }

ジェスチャを有効にするには、gesturesConfigエントリでisEnabledの値をtrueに設定します。ジェスチャを無効にするには、isEnabledの値をfalseに設定します。