How to maintain Application Role through BPM APIs

Oracle BPM 11g/12cでは、LDAPのグループだけでなく、組織単位やアプリケーション・ロールと呼ばれる、BPMローカルのグループを作成し、利用することができます。
アプリケーション・ロールは複数の認証プロバイダが混在する環境でも利用できるため、例えば外部LDAPで管理されたユーザーと、管理用途で利用する組み込みLDAPのユーザーを同一ロールに入れることもできます(実際にはそういう構成にすることはありませんが)。

通常、アプリケーション・ロールは設計時にはBPM Studio(JDeveloper)、実行時にはBPM WorkspaceもしくはEnterprise Manager Fusion Middleware Controlから保守運用するのですが、出来ればAPIを使ってメンテナンスの自動化をしたい(楽をしたい)と考えたくなるものです。
もっと言うと、ロールに含まれるLDAPユーザーやLDAPグループをデータベースで管理している場合、データベース表やレコードをLDAPのごとく操作できればなおよいのですが、その場合、Oracle製品だとOracle Virtual Directory (OVD) という製品が必要です。「確かFusion Middleware 11g PS4あたりからlibOVDという、OVDのサブセットが同梱されているから、それを使えばよいと聞いたような」という話も伺いますが、libOVDはLDAPの仮想化・統合のために提供されており、WebLogic ServerにおいてRDBMS認証プロバイダと呼ばれる、SQL Authenticatorの統合はサポート対象外ですので、ご注意を。

手順は以下の通りです。
まず、認証と必要なサービスインスタンスの取得から。

1. BPMOrganizationServiceを取得

BPMServiceClientFactory bpmServiceClientFactory = BPMServiceClientFactory.getInstance(conProp, null, null);

bpmSvcClient = bpmServiceClientFactory.getBPMServiceClient();
bpmOrgSvc = bpmSvcClient.getBPMOrganizationService();

2. BPMUserAuthenticationService、TaskQueryServiceによる認証

IWorkflowContext ctx = querySvc.authenticate(adminUser, adminPasswd.toCharArray(), null);
IBPMContext bpmCtx = bpmServiceClientFactory.getBPMUserAuthenticationService().authenticate( adminUser, adminPasswd.toCharArray(), null);

3. 組織単位、アプリケーション・ロールを取得

Organization bpmOrg = bpmOrgSvc.exportOrganization(bpmCtx);
ApplicationRoles appRoles = bpmOrg.getApplicationRoles();

ここまでが下準備です。続いて、アプリケーション・ロールの追加・削除です。

  1. アプリケーション・コンテキストの取得
  2. アプリケーション・ロールを設定するアプリケーション・ストライプを設定
  3. アプリケーション・ロールの作成、もしくは削除
ApplicationContext appCtx = new ApplicationContext();
// set ApplicationContextTypeEnum.ORACLE_BPM_PROCESS_ROLES_APP
appCtx.setApplicationType(ApplicationContextTypeEnum.ORACLE_BPM_PROCESS_ROLES_APP);

// In case of creating an application role
bpmOrgSvc.createAppRole(bpmCtx, appCtx, pAppRoleName, null, null);

// In case of removing an application role
// If set true to the 4th argument, forcibly remove application role even if members remain.
bpmOrgSvc.removeAppRole(bpmCtx, appCtx, pAppRoleName, true);

最後に、メンバーの追加・削除です。
アプリケーション・ロールが存在することが前提です。存在しないと例外が発生します。

  1. AppRefTypeを作成し、追加したいメンバーの種別を指定(ユーザー、グループ、アプリケーション・ロールなど)
  2. メンバーの名前を設定
  3. メンバーの追加・削除
AppRoleRefType appRoleRef = new AppRoleRefType();
// We can choose USER, GROUP, APPROLE, and USERATTRIBUTEROLE.
// USER is used in this sample.
appRoleRef.setType(ParticipantTypeEnum.USER);
appRoleRef.setName(pMember);
// In case of adding a member
bpmOrgSvc.grantAppRoleToPrincipal( bpmCtx, appCtx, pAppRoleName, new Participant(appRoleRef));
// In case of removing a member
bpmOrgSvc.revokeAppRoleFromPrincipal( bpmCtx, appCtx, pAppRoleName, new Participant(appRoleRef));

サンプルをGitHubにUpしておきます。
https://github.com/anishi1222/BPM/tree/master/Manipulate AppRole

anishi1222 について

とあるキャラクターの中の人です。
カテゴリー: Middleware タグ: パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中