ヘッダーをスキップ
Oracle BPEL Process Manager 管理者ガイド
10g(10.1.3.1.0)
B31875-02
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

3  カスタムIDサービス・プラグインの作成

この章では、カスタムIDサービス・プラグインを作成して特定のサードパーティ・リポジトリに統合する方法を説明しています。

この章で説明する内容は次のとおりです。

3.1 カスタムIDサービス・プラグインの作成

カスタムIDサービス・プラグインを作成して、特定のサードパーティ・リポジトリに統合できます。カスタム・プラグインを作成した後、次のタスクを実行します。

この項で説明する内容は次のとおりです。

3.1.1 Oracle BPEL Process Managerインタフェースの説明

表3-1は、使用可能なインタフェースを説明したものです。

表3-1 インタフェース

インタフェース 説明
BPMIdentityService Oracle BPEL Process Manager IDサービスを定義する主要インタフェースです。このインタフェースは、あらゆるプラグインについて、サービス・ファクトリによりインスタンス化される主要クラスです。このインタフェースは、BPMAuthorizationServiceおよびBPMAuthenticationServiceインタフェースを拡張します。
BPMAuthorizationService Oracle BPEL Process Manager認可サービス・プロバイダ・インタフェースを定義します。
BPMAuthenticationService Oracle BPEL Process Manager認証サービス・プロバイダ・インタフェースを定義します。
BPMUser Oracle BPEL Process Managerユーザーを定義します。ユーザーは論理名によって識別され、名、姓、電子メールなどの各種属性が関連付けられています。
BPMRole Oracle BPEL Process Managerロールを定義します。ロールは、ユーザーが自分のジョブに関連するタスクを実行するために必要な権限として定義されます。ロールは、ユーザーおよびユーザー・グループに付与されます。ロールはネスト可能です(つまり、ロール自体を別のロールなどに付与できます)。BPMRoleは、ロールが付与されたすべてのユーザーおよびロールを検索するためのメソッドを定義します。
BPMAppRole Oracle BPEL Process Managerアプリケーション・ロールを定義します。BPMRoleから導出されたものであり、アプリケーション・ロールはアプリケーションでサポートされるタスクについて定義されます。このインタフェースにより、これらのロールが付与されたユーザーおよびグループはアプリケーションに関連するすべてのタスクを実行できます。BPMAppRoleインスタンスは、ユーザーが所有する可能性のあるワークフローのセットBPMActivitiesを定義する必要があります。
BPMGroup Oracle BPEL Process Managerグループを定義します。BPMRoleから導出されたものであり、BPMGroupは複数のユーザーに一度に権限を割り当てることができる便利な方法です。ユーザー・グループに属するすべてのユーザーに対し、そのグループのすべての権限が付与されます。
BPMIdentity ロールおよびユーザーに対してメソッドおよびAPIの共通セットを定義します。BPMUserおよびBPMRoleのどちらも、このインタフェースから導出されています。
BPMPrincipal IDを表し、Oracle BPEL Process Manager IDサービス内のあらゆるIDに対する共通メソッドを定義します。BPMIdentityは、BPMPrincipalインタフェースから導出されています。
BPMProvider あらゆるサードパーティ・リポジトリについてサポートされる必要があるメソッドおよびAPIのセットを定義します。これは便利なインタフェースです。このインタフェースにより、1つのIDサービス実装で異なるカスタム・プロバイダに接続できるようになります。このインタフェースでは、インタフェース・クラスの実装でリポジトリ・アクセスに必要なすべての機能をローカライズできます。各カスタム・リポジトリについてこのインタフェースを使用できます。


関連項目:

次のディレクトリにあるIDサービスの異なるインタフェース用のJavadoc
SOA_Oracle_Home\bpel\docs\workflow

3.1.2 IDサービス・プラグインの実装

IDサービス実装のエントリ・ポイントはBPMIdentityServiceです。

package is.custom.plugin;

import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.w3c.dom.Element;


import oracle.tip.pc.infra.exception.*;
import oracle.tip.pc.services.common.*;
import oracle.tip.pc.services.identity.*;

public class CustomIdentityService extends BPMServiceBase implements
 BPMIdentityService {


/**
  * Constructor
  */
  private CustomIdentityService(ProviderCfg provCfg) throws ServiceException {
     super(provCfg);
  }
/**
  * Factory Method
  */
  public static Service getInstance(String realmName)  throws ServiceException {
    try {
      BPMIdentityConfigService cfgSrv  =
                                ServiceFactory.getIdentityConfigServiceInstance();
      if ( realmName == null )  {
           realmName = cfgSrv.getDefaultRealmName();
       }
       Configuration config = cfgSrv.getConfigurationInstance(realmName);
       ProviderCfg  providerCfg = config.getProviderCfg(
                                   ProviderCfg.IDENTITY_SERVICE);
       CustomIdentityService service =  new  CustomIdentityService(providerCfg);

       return service;
    } catch (Exception e) {
      throw new ServiceException(e, DiagnosticService.SERVICESCOMPONENT);
    }
  }
…

  /**
  * @see oracle.tip.pc.services.identity. BPMAuthorizationService
     #lookupUser(String)
  */
  public BPMUser lookupUser(String userName)  throws BPMIdentityException,
    BPMIdentityNotFoundException {
    Logger.debugLog("CustomIdentityService::lookupUser() begin");
    if(userName == null)
       throw new BPMIdentityException(
                 PCExceptionIndex.IDENTITYSERVICE_NAME_IS_NULL);

    BPMUser user =  getProvider().lookupUser(userName);
    if(user==null) {
       throw new BPMIdentityNotFoundException(
              PCExceptionIndex.IDENTITYSERVICE_USER_NOT_FOUND,
              new String[] {userName, getRealmName()});
    }
    Logger.debugLog("CustomIdentityService::lookupUser() end");
    return user;
 }
 ….
}

前の例で、CustomIdentityServiceBPMIdentityServiceインタフェースを実装するクラスです。構成において認証または認可サービス・プロバイダに対してのみCUSTOM providerTypeが指定されている場合、BPMAuthenticationServiceまたはBPMAutorizationServiceインタフェースを実装する必要があります。

<?xml version = '1.0' encoding = 'UTF-8'?
<ISConfiguration xmlns="http://www.oracle.com/pcbpel/identityservice/isconfig"
   <configurations
      <configuration realmName="jazn.com"
          <provider providerType="JAZN" name="xml" service="Identity"
             <property name="userPropertiesFile" value="users-properties.xml"/
          </provider
          <provider providerType="CUSTOM
             name="CustomPlugIn" service="Authentication
             class=Ópackage.name.CustomAuthenticationServiceÓ /
      </configuration
   </configurations
</ISConfiguration

前の例では、認証プロバイダでのみカスタム実装が使用されているのに対し、他のすべての問合せでJAZN XMLベース・プロバイダが使用されています。CustomAuthenticationServiceクラスはBPMAuthenticationServiceインタフェースを実装する必要があります。

SOA_Oracle_Home¥bpel¥system¥services¥config¥is_config.xmlファイルでIDサービスのproviderTypeとしてCUSTOMが指定されている場合、BPMIdentityServiceインタフェースを実装する必要があります。

<?xml version = '1.0' encoding = 'UTF-8'?>
<ISConfiguration xmlns="http://www.oracle.com/pcbpel/identityservice/isconfig">
   <configurations>
      <configuration realmName="jazn.com">
         <provider providerType="CUSTOM"
                   name="CustomPlugIn" service="Identity"
                   class=Ópackage.name.CustomIdentityServiceÓ>
         <property name=ÓcustomPropertyÓ value=ÓcustomValueÓ />
      </configuration>
   </configurations>
</ISConfiguration>

BPMIdentityServiceBPMAuthenticationServiceまたはBPMAuthorizationインタフェースを実装する3つのサービス・クラスはすべて、oracle.tip.pc.services.identity.BPMServiceBaseクラスを拡張して基本サービス機能を活用できます。

3.1.3 サービス・ファクトリ・メソッドの指定

すべてのカスタム・サービス・クラスには、サービス・プロバイダのインスタンスを作成するために、静的ファクトリgetInstance()メソッドが必要です。

public static Service getInstance(String realmName)  throws ServiceException;

realmNameはビジネス・プロセスのコンテキストです。realmNamenullである場合、デフォルトのレルムが使用されるものとみなされます。構成サービスAPIを使用して、デフォルトのレルム名を取得できます。

BPMIdentityConfigService cfgService =
 ServiceFactory.getIdentityConfigServiceInstance();
String defaultRealmName = cfgService.getDefaultRealmName();

サービス・ファクトリoracle.tip.pc.service.common.ServiceFactoryのクラスは、次の静的パブリック・メソッドを定義します。

 BPMIdentityService         getIdentityServiceInstance(String realmName);
 BPMAutorizationService     getAuthorizationServiceInstance(String  realmName);
 BPMAuthenticationService   getAuthenticationServiceInstance(String realmName);
 BPMIdentityService         getIdentityServiceInstance();
 BPMAutorizationService     getAutorizationServiceInstance();
 BPMAuthenticationService   getAuthenticationServiceInstance();

これらのメソッドは、Javaクライアントが対応するサービス・プロバイダのインスタンスを受け取る際に使用されます。サービスに対してプロバイダ・タイプCUSTOMが指定されている場合、サービス・ファクトリ・メソッドでは実行時にカスタム・サービス・インスタンスが作成されます。これらのメソッドにより、カスタム・サービスgetInstance(String realmName) APIが呼び出されます。

サービス・プロバイダ・クラスによりoracle.tip.pc.services.BPMServiceBaseクラスが拡張された場合、サービス・ファクトリ・メソッドは、指定された構成に対してプロパティを定義するProviderCfgクラスのインスタンスを取得する必要があります。続いてサービスを作成できます。

CustomIdentityService service = new CustomIdentityService(providerCfg);

3.1.4 プロバイダ構成の指定

BPMIdentityConfigServiceインスタンスでは、指定されたrealmNameによりConfigurationオブジェクトにアクセスできます。

Configuration conf = cfgService.getConfigurationInstance(realmName);

続いて、特定のプロバイダ構成をフェッチできます。

ProviderCfg providerCfg = conf.getProviderCfg(serviceName);

ここで、serviceNameは次のいずれかの値となります。

  • ProviderCfg.IDENTITY_SERVICE — IDサービス・プロバイダの場合

  • ProviderCfg.AUTHENTICATION_SERVICE — 認証サービス・プロバイダの場合

  • ProviderCfg.AUTHORIZATION_SERVICE — 認可サービス・プロバイダの場合


関連項目:

次のディレクトリにあるIDサービス構成Javadoc
SOA_Oracle_Home\bpel\docs\workflow

3.1.5 BPMProviderインタフェースの実装

カスタム・プラグイン用の認証および認可サービスを記述する最も簡単な方法は、カスタム・リポジトリ用のBPMProviderインタフェースを実装する方法です。BPMProviderインタフェースは、必須となる操作の最小セットを定義します。この最小セットは、IDサービスが正しく機能するためにカスタム・リポジトリに対して定義する必要があります。実装オブジェクトのすべてのインスタンスは、リポジトリ固有のコールの処理を受け持つプロバイダにコールを委譲できます。

たとえば、BPMServiceBaseクラスはサービス・プロバイダが拡張できる抽象クラスです。拡張した場合、カスタム・サービス・クラスはinit()メソッドを実装する必要があります。

public void init() throws BPMIdentityException {
       m_provider = CustomerProvider.getInstance(m_providerCfg);
       m_status = new ServiceStatus(true, "Service is available", -1,
}

ここで、m_providerBPMProviderオブジェクトを参照するためのBPMServiceBaseの保護メンバーです。CustomerProviderは、BPMProviderインタフェースを実装するクラスです。オプションで、プロバイダ・クラスを動的にロードできます。is_config.xmlファイルからCUSTOM providerTypeのプロバイダ・クラス名を取得します。そのために、プロバイダ要素のname属性が予約されます。m_statusメンバーは、BPMServiceBaseクラスの保護メンバーです。このメンバーにはServiceStatusオブジェクトが格納されます。

3.1.6 IDサービス・プラグインのデプロイ

ワークフロー・サービスでプラグインをインスタンス化して呼び出すためには、Oracle BPEL Process Managerのライブラリ・パス内のディレクトリにデプロイする必要があります。

プラグイン・コードをコンパイルし、クラスをまとめてJARファイルを作成し(isplugin.jarなど)、さらにJARファイルをSOA_Oracle_Home¥services¥libディレクトリにデプロイする必要があります。

また、ライブラリ・パスがデプロイされたJARファイルをポイントする必要があります。たとえば、SOA_Oracle_Home¥j2ee¥home¥configディレクトリにあるapplication.xmlファイルに次の行を追加して、ライブラリ・パスにisplugin.jarを追加する必要があります。

 <library path="SOA_Oracle_Home\bpel\system\services\lib\isplugin.jar"/>

プロバイダのJARファイル名など小さな変更を含むカスタム・プラグインに対し、同一のデプロイメント・スキームを使用できます。

3.1.7 カスタム・プラグイン用のIDサービスの登録および構成

IDサービス構成はis_config.xmlファイルで定義されます。このファイルは、Oracle BPEL Process Managerのクラスパス内のディレクトリに格納されている必要があります。デフォルトでは、このファイルはSOA_Oracle_Home¥bpel¥system¥services¥configに格納されています。

次の構成ファイルのサンプルでは、IDサービスのカスタム・プロバイダとして実装されているデータベース・プラグインについて記述しています。

<?xml version = '1.0' encoding = 'UTF-8'?>
<ISConfiguration mlns="http://www.oracle.com/pcbpel/identityservice/isconfig">
    <configurations>
       <configuration realmName="realm">
          <provider providerType="CUSTOM" service="Identity"
                    name="package.name.CustomerProvider"
                    class=Ópackage.name.CustomIdentityServiceÓ>
              <property name="dataSource" value="jdbc/BPELSamplesDataSource"/>
          </provider>
    </configuration>
  </configurations>
</ISConfiguration>

provider要素のname属性はBPMProviderクラスをロードできます。class属性は、BPMIdentityServiceの実装クラスを定義します。dataSourceという名前のcustomプロパティは、JDBC接続のデータソース名を取得します。


関連項目:

IDサービスの構成手順については、「IDサービスの構成」を参照してください。

3.1.8 ユーザーおよびグループの作成

IDサービスは、ユーザーとロールの作成またはユーザーに対するロールの付与を含め、どのような管理APIも定義しません。このタスクを実行するには、ユーザー・リポジトリに固有のツールを使用する必要があります。


関連項目:

ユーザー、ロールおよびグループの詳細は、付録A「デモ・ユーザー・コミュニティ」を参照してください。

3.2 まとめ

この章では、カスタムIDサービス・プラグインを作成して特定のサードパーティ・リポジトリに統合する方法を説明しています。すべてのクラスをまとめてカスタム・プラグインJARファイルを作成する方法、JARファイルをデプロイする方法、JARファイルをOracle BPEL Process Managerクラスパスに含める方法、is_config.xmlファイルを構成する方法、およびシステム・ユーザーとグループを作成する方法について、詳細を説明します。