13.1 電子メールおよびSMSメッセージング・プロバイダのカスタマイズ

MessagingProviderインタフェースを実装することで、電子メールおよびSMSメッセージ・プロバイダをカスタマイズできます。

前提条件

続行する前に、次の前提条件を確認してください:
  • Oracle Linux 7.x環境
  • コンパイル用のJDK 1.8.x
  • Apache Maven 3.6.2以上
  • 実装に必要なサードパーティ製jar

電子メールおよびSMSメッセージング・プロバイダをカスタマイズするには、次を実行します:

  1. カスタム・ロジックの実装およびJarファイルの作成
  2. 実装とOAAとの統合
  3. 実装を実行時に使用可能にする

カスタム・ロジックの実装およびJarファイルの作成

  1. 管理コンテナの/u01/oracle/libs/messagingprovider-interface-12.2.1.4.1-<date>.jarからプロジェクトzipファイルをダウンロードし、作業ディレクトリに抽出します。
  2. 電子メールおよびSMSのカスタム・ロジックの実装を作成します。インタフェースおよびメソッドの詳細は、Javadocリファレンスを参照してください。

    ノート:

    電子メールとSMSには、別々の実装クラスが必要です。

    送信者インタフェースを実装する実装クラスで、必要なインポートを使用して@Service宣言が作成されていることを確認します。この宣言は、フレームワークが実行時にカスタム実装をロードするのに役立ちます。

  3. この実装を含むjarファイルをコンパイルおよび生成するために、pomファイルに変更を加えます。次のことを確認します:
    • jersey-hk2依存性は、ビルドのpomファイルで依存性として宣言する必要があります。
    • MessagingProviderインタフェースを使用し、ビルドのpomファイルで依存性として宣言する必要があります。
    • 実装では、1つのjarおよび追加のサードパーティ製jarを生成する必要があります。1つ以上のクラスを使用してsendメソッドを実装し、このjarファイルにパッケージ化することもできます。
  4. 実装をテストして、必要に応じて機能することを確認します。

実装とOAAとの統合

  1. OAAでカスタム実装クラスを構成します。
    • 電子メールの場合:

      ChallengeEmail列挙のcustomProviderプロパティを、実装クラスの完全修飾クラス名で更新します。

      たとえば、実装クラスの名前がcom.company.MyCustomEmailMessagingSenderの場合、ChallengeEmail列挙プロパティをbharosa.uio.default.challenge.type.enum.ChallengeEmail.customizedProvider=com.company.MyCustomEmailMessagingSenderとして更新します

      これを行うには、次のサンプル・リクエストに示すように、構成プロパティREST APIを使用します:

      curl  --request PUT 'https://<PolicyUrl>/policy/config/property/v1' \
      --header 'Content-Type: application/json' \
      --header 'Authorization: Basic <Base64Encoded(<username>:<password>)>' \
      --data '[
      {
      "name": "bharosa.uio.default.challenge.type.enum.ChallengeEmail.customizedProvider"
      "value": "com.company.MyCustomEmailMessagingSender"
      }
      ]'

      ノート:

      この場合、およびこの項の他の場所で、<PolicyUrl>から/oaa-policyを削除します。たとえば、https://<host>:<port>/oaa-policy/policy/config/property/v1ではなくhttps://<host>:<port>/policy/config/property/v1を使用します

      PolicyUrlの検索および認証の詳細は、「OAA管理API」を参照してください。

      構成プロパティRESTエンドポイントの詳細は、「構成プロパティRESTエンドポイント」を参照してください

    • SMSの場合:

      ChallengeSMS列挙のcustomProviderプロパティを、実装クラスの完全修飾クラス名で更新します。

      たとえば、実装クラスの名前がcom.company.MyCustomSMSMessagingSenderの場合、ChallengeSMS列挙プロパティをbharosa.uio.default.challenge.type.enum.ChallengeSMS.customizedProvider=com.company.MyCustomSMSMessagingSenderとして更新します

      これを行うには、次のサンプル・リクエストに示すように、構成プロパティREST APIを使用します:

      curl  --request PUT 'http://<PolicyUrl>/policy/config/property/v1' \
      --header 'Content-Type: application/json' \
      --header 'Authorization: Basic <Base64Encoded(<username>:<password>)>' \
      --data '[
      {
      "name": "bharosa.uio.default.challenge.type.enum.ChallengeSMS.customizedProvider"
      "value": "com.company.MyCustomSMSMessagingSender"
      }
      ]'

実装を実行時に使用可能にする

電子メールまたはSMSのサービス・ポッドが構成/開始されると、共有ボリューム情報がその構成の一部になります。そのチャートのdeployment.yamlファイルに表示されます。

次のサンプルに示すように、永続NFSボリュームを作成し、その情報を電子メール・チャートのvalues.yamlに指定します。

ノート:

mountPathPrefix値は変更しないでください
# volume to store customized email sending implementation
customizedFactorImplVolume:
  # name of the volume
  name: "nfsvolume"
  # server where the volume is located
  server: <NFS_IP_ADDRESS>
  # path on the server where the volume is located
  path: <NFS_PATH>/FactorProviderImpls
  # prefix of volume's mounted path in email container
  mountPathPrefix: /u01/oracle/
  # relative path of mounted volume, relative to the above prefix
  mountRelativePath: <NFS_VOLUME>/customprovider
  # indicate whether the volume should be readOnly
  readOnly: false
  # names of customizedJars expected in mounted volume, separated by comma
  customizedJars: "OAACustomMessaging-Provider.jar"
外部ボリュームがNFSでない場合は、次を実行します:
  1. 次のように、電子メール・チャートのdeployment.yamlファイルを編集します:
    {{- if .Values.customizedFactorImplVolume }}
            - name: {{.Values.customizedFactorImplVolume.name}}
              nfs:
                server: {{.Values.customizedFactorImplVolume.server}}
                path: {{.Values.customizedFactorImplVolume.path}}
    {{- end }}
  2. カスタム実装およびサードパーティ製の依存性jarファイルを次のフォルダにコピーします: <mountPathPrefix><mountRelativePath>/

ポッド内のノードを停止して起動し、カスタム実装のロードを開始します。