アイデンティティ・ディレクトリAPIを使用すると、アプリケーションは、統一的で移植可能な方法でアイデンティティ情報(ユーザーやその他のエンティティ)にアクセスすることができます。ユーザーおよびロールAPIを使用するアプリケーションの場合は、それを移行してアイデンティティ・ディレクトリAPIを使用できます。
アイデンティティ・ディレクトリAPIは、jps-configファイルからLDAPベースのアイデンティティ・ストアの確認を取得します。したがって、ユーザーおよびロールAPIからアイデンティティ・ディレクトリAPIにアプリケーションを移行する際、jps-configファイルの構成を変更する必要はありません。
ユーザーおよびロールAPIをプログラム的な構成で初期化するアプリケーションは、類似のメソッドを使用して、アイデンティティ・ディレクトリAPIを初期化できます。詳細は、メモリー内アイデンティティ・ディレクトリ・ハンドルの初期化と取得を参照してください。
ユーザーおよびロールAPIからアイデンティティ・ディレクトリAPIにアプリケーションを移行するときは、一部のコード変更を実行する必要があります。
次の各トピックで、移行時に必要なコード変更について説明します。
アイデンティティ・ディレクトリ・ハンドルを取得するには、すべてのアプリケーションでAPIを初期化する必要があります。プログラムでは、初期化を1回だけ実行する必要があります。APIを初期化するには、次のサンプル・コードを使用します。
初期化のプロセスは、IdentityStoreService.GetIdmStore()を使用してoracle.security.idm.IdentityStoreハンドルを取得する方法に類似しています。アイデンティティ・ディレクトリ・サービスは、IdentityStoreService.getIdentityStore()を使用してIdentityDirectoryハンドルを取得します。次に例を示します。
import oracle.igf.ids.IdentityDirectory; import oracle.igf.ids.IDSException; import oracle.security.jps.JpsContext; import oracle.security.jps.JpsContextFactory; import oracle.security.jps.service.idstore.IdentityStoreService; // Get IdentityDirectory from JpsContext JpsContext context = JpsContextFactory.getContextFactory().getContext(); IdentityStoreService idstore = (IdentityStoreService) context.getServiceInstance(IdentityStoreService.class); Identity Directory ids = idstore.getIdentityStore();
ユーザー・インスタンスに対するすべての操作はユーザー・マネージャによって処理され、グループに対するすべての操作はグループ・マネージャによって処理されます。サンプル・コードを使用して、ユーザーおよびグループの各インスタンスに対してCRUD操作を実行します。
ユーザー関連のCRUD操作はoracle.igf.ids.UserManagerを使用して、ロール関連のCRUD操作はoracle.igf.ids.GroupManagerを使用して実行できます。UserManagerおよびGroupManagerのハンドルは、IdentityDirectoryオブジェクトから取得できます。次に例を示します。
import oracle.igf.ids.UserManager;
import oracle.igf.ids.GroupManager;
// Get UserManager and GroupManager handles
UserManager uMgr = ids.getUserManager();
GroupManager gMgr = ids.getGroupManager();
アイデンティティ・リポジトリを検索するときは、単純な検索フィルタも複雑な検索フィルタも作成できます。サンプル・コードを使用すると、様々な検索操作を容易に実行できます。
oracle.igf.ids.SearchFilterを使用して、簡易検索フィルタまたは複雑な検索フィルタを作成できます。次に例を示します。
import oracle.igf.ids.SearchFilter;
// Simple search filter for (firstname equals "john")
SearchFilter filter1 = new SearchFilter("firstname",
SearchFilter.Operator.EQUALS, "john");
// Complex search filter for
((title contains "manager") and (org equals "amer")) or
((title contains "senior manager") and (org equals "apac"))
SearchFilter filter = new SearchFilter(
SearchFilter.LogicalOp.OR,
new SearchFilter(SearchFilter.LogicalOp.AND,
new SearchFilter("manager", SearchFilter.Operator.CONTAINS,
"manager"),
new SearchFilter("org", SearchFilter.Operator.EQUALS, "amer")),
new SearchFilter(SearchFilter.LogicalOp.AND,
new SearchFilter("manager", SearchFilter.Operator.CONTAINS,
"senior manager"),
new SearchFilter("org", SearchFilter.Operator.EQUALS, "apac")));
ユーザー、グループ、組織のエンティティおよび汎用エンティティに対する作成/読取り/更新/削除(CRUD)操作を実行できます。このため、アプリケーションで使用するCRUD APIを実装する必要があります。
次の各トピックで、これらのCRUD操作について説明します。
ユーザーの検索に使用されるAPIを次に示します。
指定されたprincipal識別子のユーザーを取得します。次に例を示します。
User getUser(Principal principal, ReadOptions opts)
ユーザーを一意に識別する、指定されたid属性値と一致するユーザーを検索します。次に例を示します。
User searchUser(String id, ReadOptions opts)
指定された属性の名前および値と一致するユーザーを検索します。次に例を示します。
User searchUser(String attrName, String attrVal, ReadOptions opts)
ユーザーを一意に識別する、指定されたGUID値と一致するユーザーを検索します。次に例を示します。
searchUserByGuid(String guid, ReadOptions opts)
ユーザーを検索するAPIの例を次に示します。
ResultSet<User> searchUsers(SearchFilter filter, SearchOptions opts)
APIを使用してユーザーを作成できます。
ユーザーを作成するAPIの例を次に示します。
Principal createUser(List<Attribute> attrVals, CreateOptions opts)
APIを使用してユーザーを削除できます。
ユーザーを削除するAPIの例を次に示します。
指定されたprincipal識別子のユーザーを削除します。
void deleteUser(Principal principal, DeleteOptions opts)
指定されたid属性値のユーザーを削除します。
void deleteUser(String id, DeleteOptions opts)
APIによるユーザー認証は、一般的なメカニズムです。
ユーザーを認証するAPIの例を次に示します。
指定されたid属性値と一致するユーザーを認証します。
User authenticateUser(String id, char[] password, ReadOptions opts)
指定されたprincipal識別子のユーザーを認証します。
boolean authenticateUser(Principal principal, char[] password)
ユーザー属性を変更するAPIおよびその関連エンティティを取得するAPIは、UserManagerではなくUserオブジェクトにあります。
ユーザーの変更
ユーザーを変更するAPIの例を次に示します。
ユーザーの属性を変更します。
void User.modify(List<ModAttribute> attrVals, ModifyOptions opts)
ユーザーの属性値を設定します。
void User.setAttributeValue(String attrName, String attrVal, ModifyOptions opts)
関連エンティティの管理
エンティティを管理するAPIの例を次に示します。
管理チェーンを取得します。
ResultSet<User> getManagementChain(int nLevels, SearchOptions opts)
指定されたユーザーがこのユーザーの管理者であるかどうかを確認します。
boolean isManager(User user, boolean direct, ReadOptions opts)
指定されたユーザーがこのユーザーの管理者であるかどうかを確認します。
boolean isManager(User user, boolean direct, ReadOptions opts)
指定されたユーザーをこのユーザーの管理者として設定します。
void setManager(User user, ModifyOptions opts)
このユーザーのReporteeをすべて取得します。
ResultSet<User> getReportees(int nLevels, SearchFilter targetFilter, SearchOptions opts)
このユーザーがメンバーとして属している、指定されたフィルタ基準と一致するグループをすべて取得します。
ResultSet<Group> getMemberOfGroups(int nLevels, SearchFilter targetFilter, SearchOptions opts)
このユーザーが指定されたグループのメンバーであるかどうかを確認します。
boolean isMemberOf(Group group, boolean direct, ReadOptions opts)
指定されたグループのメンバーとしてこのユーザーを追加します。
void addMemberOf(Group group, ModifyOptions opts)
指定されたグループのメンバーからこのユーザーを削除します。
void deleteMemberOf(Group group, ModifyOptions opts)
変更をアプリケーションで実装する前に、ユーザーおよびロールAPIと、アイデンティティ・ディレクトリAPIとの間の対応を理解することが不可欠です。
次の各トピックで、これらの違いについて説明します。
ユーザーAPIのエンドポイントと、アイデンティティ・ディレクトリAPIのエンドポイントの間の対応を理解する必要があります。
次の表に、ユーザー関連APIのメソッドと、それに対応するアイデンティティ・ディレクトリAPIのメソッドとの対応を示します。
| 機能 | ユーザー/ロールAPIのメソッド | Identity Directory Serviceのメソッド |
|---|---|---|
ユーザーの作成 |
User UserManager.createUser(String name, char[] password) User UserManager.createUser(String name, char[] password, PropertySet pset) |
Principal UserManager.createUser(List<Attribute> attrVals, CreateOptions opts) |
ユーザーの削除 |
void UserManager.dropUser(UserProfile user) void UserManager.dropUser(User user); |
void UserManager.deleteUser(Principal principal, DeleteOptions opts) void UserManager.deleteUser(String id, DeleteOptions opts) |
ユーザーの認証 |
User UserManager.authenticateUser(String user_id, char[] passwd) User UserManager.authenticateUser(User user, char[] passwd) User UserManager.authenticateUser(String user_id, String authProperty, char[] passwd) |
User UserManager.authenticateUser(String id, char[] password, ReadOptions opts) boolean UserManager.authenticateUser(Principal principal, char[] password) |
ユーザーの作成がサポートされているかどうかのチェック |
boolean UserManager.isCreateUserSupported() |
boolean UserManager.getCapabilities().isCreateCapable() |
ユーザーの変更がサポートされているかどうかのチェック |
boolean UserManager.isModifyUserSupported() |
boolean UserManager.getCapabilities().isUpdateCapable() |
ユーザーの削除がサポートされているかどうかのチェック |
boolean UserManager.isDropUserSupported() |
boolean UserManager.getCapabilities().isDeleteCapable() |
指定された検索基準によるユーザーの検索 |
SearchResponse IdentityStore.searchUsers(SearchParameters params) |
ResultSet<User> UserManager.searchUsers(SearchFilter filter, SearchOptions opts) |
名前/一意の名前/guidによるユーザーの検索 |
User IdentityStore.searchUser(String name) |
User UserManager.searchUser(String id, ReadOptions opts) User UserManager.searchUser(String attrName, String attrVal, ReadOptions opts) |
特定のユーザー・オブジェクトのリポジトリにユーザーが存在するかどうかのチェック |
boolean IdentityStore.exists (User user) |
User.getPrincipal() 次のメソッドがnullを返す場合、ユーザーは存在しません。それ以外の場合は存在します。 User getUser(Principal principal, ReadOptions opts) |
単純な検索フィルタ(1つの名前、タイプおよび値に基づいた検索) |
SimpleSearchFilter |
SearchFilter(String propertyName, Operator op, String propertyVal) |
複雑な検索フィルタ(フィルタ条件とネストしたフィルタを使用した複数の属性に基づいた検索) |
ComplextSearchFilter |
SearchFilter(LogicalOp op, SearchFilter... searchFilters) |
指定されたプロパティ名に対するプロパティ値の取得 |
String User.getPropertyVal(String propName) ユーザー・ロールAPIはキャッシュから属性値をフェッチします。キャッシュにない場合、リポジトリからフェッチします。 |
String User.getAttributeValue(String attrName) 制限: リポジトリからすでにフェッチされているユーザー・オブジェクトから属性値を返します。 |
指定されたプロパティ名に対するユーザー・プロパティの取得 |
Property User.getProperty(String propName) |
Attribute User.getAttribute(String attrName) |
指定されたプロパティ名のセットに対するユーザー・プロパティの取得 |
Map User.getProperties() |
Map<String, Attribute> User.getAllAttributes() |
ユーザーのリポジトリからユーザー・プロパティをすべて取得します。 |
PropertySet User.getAllUserProperties() |
Map<String, Attribute> User.getAllAttributes() |
すべてのユーザー・プロパティ名のスキーマからの取得 |
List IdentityStore.getUserPropertyNames() スキーマ内にあるすべてのプロパティの名前を返します。 |
List<String> UserManager.getEntityAttributes() |
ユーザーのリポジトリ内の属性値の変更 |
void User.setProperty(ModProperty mprop) |
void User.setAttributeValue(String attrName, String attrVal, ModifyOptions opts) |
ユーザーのリポジトリ内の属性値のセットの変更 |
void User.setProperties(ModProperty[] modPropObjs) void User.setProperties(LdapContext ctx, ModProperty[] modPropObjs) |
void User.modify(List<ModAttribute> attrVals, ModifyOptions opts) |
ユーザーの直接または間接のすべてのReporteeを取得します。 |
SearchResponse User.getReportees(boolean direct) |
ResultSet<User> User.getReportees(int nLevels, SearchFilter targetFilter, SearchOptions opts) |
ユーザーの管理チェーンの取得 |
List User.getManagementChain(int max, String upToManagerName, String upToTitle) |
ResultSet<User> User.getManagementChain(int nLevels, SearchOptions opts) List<User> User.getManagementChain(int nLevels, String manager, String title, SearchOptions opts) |
バイナリ属性の取得/設定 |
使用可能 ユーザー/ロールAPIのプロパティでは、バイナリ属性がサポートされます。 byte[] user.getJPEGPhoto() void user.setJPEGPhoto(String imgpath) |
Base64でエンコードした値を返します。 値を設定する際、ModAttributeを作成するには、Base64でエンコードした値またはbyte[]を使用できます。 |
レルムの選択 |
使用可能 env.put(OIDIdentityStoreFactory.RT_SUBSCRIBER_NAME, "<realm dn>"); IdentityStoreFactory.getIdentityStoreInstance(env); |
これは、IDSオペレーション構成の一部です。APIレベルでは、searchbaseおよびcreatebaseは同様に指定できます。 |
ユーザー/ロールAPIのエンドポイントと、アイデンティティ・ディレクトリAPIのエンドポイントの間の対応を理解する必要があります。
次の表に、ロール関連APIのメソッドと、それに対応するアイデンティティ・ディレクトリAPIのメソッドとの対応を示します。
| 機能 | ユーザー/ロールAPIのメソッド | Identity Directory Serviceのメソッド |
|---|---|---|
ロールの作成 |
Role RoleManager.createRole(String name, int scope) Role RoleManager.createRole(String name) |
Principal GroupManager.createGroup(List<Attribute> attrVals, CreateOptions opts) |
ロールの削除 |
void RoleManager.dropRole(RoleProfile role) void RoleManager.dropRole(Role role) |
void GroupManager.deleteGroup(Principal principal, DeleteOptions opts) |
ロールの作成がサポートされているかどうかのチェック |
boolean RoleManager.isCreateRoleSupported() |
boolean GroupManager.getCapabilities().isCreateCapable() |
ロールの変更がサポートされているかどうかのチェック |
boolean RoleManager.isModifyRoleSupported() |
boolean GroupManager.getCapabilities().isUpdateCapable() |
ロールの削除がサポートされているかどうかのチェック |
boolean RoleManager.isDropRoleSupported() |
boolean GroupManager.getCapabilities().isDeleteCapable() |
グループがユーザーによって所有されているか |
boolean RoleManager.isGranted(Role parent, Principal principal) |
boolean Group.isMember(User user, boolean direct, ReadOptions opts) boolean User.isMemberOf(Group group, boolean direct, ReadOptions opts) |
グループがユーザーによって所有されているか |
boolean RoleManager.isOwnedBy(Role parent, Principal principal) |
boolean User.isOwnerOf(Group group, boolean direct, ReadOptions opts) |
グループがユーザーによって管理されているか |
boolean RoleManager.isManagedBy(Role parent, Principal principal) |
サポートされていません |
ロールの直接または間接のすべてのメンバーの取得 |
SearchResponse Role.getGrantees(SearchFilter filter, boolean direct) |
ResultSet<User> Group.getMembers(int nLevels, SearchFilter targetFilter, SearchOptions opts) |
ユーザーをメンバーとしてロールに追加します。 |
void RoleManager.grantRole(Role parent, Principal principal) |
void Group.addMember(User user, ModifyOptions opts) |
ロールのメンバーからユーザーを削除 |
void RoleManager.revokeRole(Role parent, Principal principal) |
void Group.deleteMember(User user, ModifyOptions opts) |
特定のロールの直接または間接のすべての所有者の取得 |
SearchResponse Role.getOwners(SearchFilter filter, boolean direct) SearchResponse Role.getOwners(SearchFilter filter) |
ResultSet<User> Group.getOwners(int nLevels, SearchFilter targetFilter, SearchOptions opts) |
ユーザーを所有者としてロールに追加 |
void Role.addOwner(Principal principal) |
void Group.addOwner(User user, ModifyOptions opts) |
ロールの所有者からユーザーを削除 |
void Role.removeOwner(Principal principal) |
void Group.deleteOwner(User user, ModifyOptions opts) |
ロールの直接または間接のすべての管理者の取得 |
SearchResponse Role.getManagers(SearchFilter filter, boolean direct) SearchResponse Role.getManagers(SearchFilter filter) |
サポートされていません |
ユーザーをロールの管理者として追加します。 |
void Role.addManager(Principal principal) |
サポートされていません |
ロールの管理者からユーザーを削除します。 |
void Role.removeManager(Principal principal) |
サポートされていません |
ロールのプロパティの取得 |
Property Role.getProperty(String propName) 注意: ユーザー・ロールAPIはキャッシュからこれらの属性値をフェッチします。キャッシュにない場合、リポジトリからフェッチします。 |
Attribute Group.getAttribute(String attrName) |
ロール・タイプの確認 |
Role.isApplicationRole Role.isEnterpriseRole Role.isSeeded |
サポートされていません |
指定された検索基準に対するロールの検索 |
SearchResponse IdentityStore.searchRoles(int scope, SearchParameters params) |
ResultSet<Group> GroupManager.searchGroups(SearchFilter filter, SearchOptions opts) |
名前/一意の名前/guidによるロールの検索 |
Role IdentityStore.searchRole(int searchType, String value) |
Group searchGroup(String id, ReadOptions opts) Group searchGroup(String attrName, String attrVal, ReadOptions opts) |
指定されたフィルタに対するユーザーとロールの検索 |
SearchResponse IdentityStore.search(SearchParameters params) |
次の異なるメソッドを使用できます。 UserManager.searchUsers GroupManager.searchGroups |
ユーザー/グループに割り当てられたすべてのロールを取得します。 |
SearchResponse getGrantedRoles(Principal principal, boolean direct) |
ResultSet<Group> User.getMemberOfGroups(int nLevels, SearchFilter targetFilter, SearchOptions opts) ResultSet<Group> Group.getMemberOfGroups(int nLevels, SearchFilter targetFilter, SearchOptions opts) |
ユーザー/グループが所有しているすべてのロールを取得します。 |
SearchResponse getOwnedRoles(Principal principal, boolean direct) |
ResultSet<Group> User.getOwnedGroups(int nLevels, SearchFilter targetFilter, SearchOptions opts) ResultSet<Group> Group.getOwnedGroups(int nLevels, SearchFilter targetFilter, SearchOptions opts) |
ユーザー/グループが管理しているすべてのロールを取得します。 |
SearchResponse getManagedRoles(Principal principal, boolean direct) |
サポートされていません |
ある環境から別の環境への移行、特にテスト環境から本番環境への移行では、アプリケーションをテスト環境で柔軟にテストしてから本番環境にロール・アウトできます。
次の各トピックで、テスト環境から本番環境への移行中に変更する必要があるIdentity Directory Service/libOVDのプロパティについて説明します。
Identity Directory Service/libOVDを新しい環境に、またはテストから本番環境に移動できます。Identity Directory Service/libOVDインストールを移動することによって、元の環境で行ったすべてのカスタマイズおよび構成変更を別の環境に再適用するために必要な作業量が削減されます。
テスト環境で、Identity Directory Service/libOVDのインストール、構成、カスタマイズおよび検証を実行できます。システムが安定し、必要に応じて機能するようになったら、本番環境を作成しますが、このとき、テスト環境に取り込んだすべての変更内容を再実行するかわりに、サーバーとその構成のコピーをテスト環境から移行することで本番環境を作成できます。
移動計画には、ソース環境の構成設定が含まれます。Oracle Fusion Middlewareエンティティおよびコンポーネントについて、移動計画の設定をカスタマイズできます。
環境間で移行する場合、extractMovePlanスクリプトを実行して、移動するエンティティの移動計画を作成します。extractMovePlanスクリプトは、構成情報をアーカイブから移動計画に抽出します。また、必要な構成計画もすべて抽出します。アーカイブをターゲットに適用する前に、ターゲット環境の値を反映するように、移動計画を編集する必要があります。
READ_WRITEのスコープのプロパティを変更できます。READ_ONLYのスコープのプロパティは変更しないでください。環境間の移行に関する包括的な説明および準拠する手順については、Oracle Fusion Middlewareの管理で、ターゲット環境への移動の一般手順を参照してください。
この項では、次の項目について説明します。
移動計画には、通常、複数のconfigGroup要素が含まれます。特定のconfigGroup要素に関連付けられるプロパティについて、一覧表にconfigGroup要素ごとのプロパティがまとめています。
生成された移動計画でIdentity Directory Service/libOVD ConfigGroupの場所を特定するには、<type>LIBOVD_ADAPTERS</type>を検索する必要があります。このタグによって、状況により更新する必要のあるlibOVDアダプタ・プロパティの包括的な情報が提供されます。プロパティは、特定のconfigGroup要素に関連付けられます。
各アダプタは、次の形式のconfigProperty IDタグによって表されます。
"LDAP:<context_name>:<adapter_name>"
"LDAP:ids:myOID"という例について検討します。
表4-1は、libOVDの移動計画のプロパティを示しています。
次の例は、LIBOVD_ADAPTERS configGroup要素の一部が含まれた、Identity Directory Service/libOVDの移動計画のセクションを示しています。
<configGroup>
<type>LIBOVD_ADAPTERS</type>
<configProperty id="LDAP:ids:myOID">
<configProperty>
<name>Context Name</name>
<value>ids</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_ONLY</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Adapter Name</name>
<value>myOID</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_ONLY</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>LDAP URL</name>
<value>ldap://hostname:1389</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>LDAP Host Read Only</name>
<value>false</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>LDAP Host Percentage</name>
<value>100</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>DN</name>
<value>cn=orcladmin</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Password File</name>
<value/>
<itemMetadata>
<dataType>STRING</dataType>
<password>true</password>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
</configProperty>
</configGroup>
移動計画のプロパティをカスタマイズできます。
表4-1では、Identity Directory Service/libOVDアダプタに関してカスタマイズできる移動計画のプロパティについて説明します。
表4-1 libOVDの移動計画のプロパティ
| プロパティ | 説明 | サンプル値 |
|---|---|---|
コンテキスト名 |
アダプタに関連付けられた、使用するlibOVDコンテキスト。 これは読取り専用プロパティです。 |
|
アダプタ名 |
アダプタの名前です。これは読取り専用プロパティです。 |
|
LDAP URL |
ldap://host:portという形式のアダプタのLDAP URL値。これは読取り/書込みプロパティです。 |
|
DN |
バックエンドLDAPに接続するユーザーのDN。これは読取り/書込みプロパティです。 |
|
パスワード・ファイル |
ユーザーのパスワードが含まれるセキュア・ファイルの絶対パス。これは読取り/書込みプロパティです。 |
|
LDAPホスト読取り専用 |
特定のホストが読取り専用かどうかを示すフラグ。デフォルト値は |
|
LDAPホストの割合 |
特定のLADAPホストの負荷割合の値を指定します。デフォルト値は |
|
チューニングは、特定のデプロイメント要件を満たすためのパラメータの調整または変更です。デフォルトIDS構成は、デプロイメント・シナリオ用にチューニングされている必要があります。
この項に記載されている要件と推奨事項を十分に確認する必要があります。
この項では、次の項目について説明します。
構成パラメータを使用してパフォーマンスをチューニングし、リアルタイム・デプロイメントのシナリオに必要なメモリー要件のバランスをとることができます。要件に基づいてこれらのパラメータをチューニングすると、アプリケーションのスケーラビリティ特性が大きく向上します。
表4-2に、IDSの実デプロイメント・シナリオでチューニングを必要とする構成パラメータをリストします。
表4-2 IDSの構成パラメータ
| パラメータ | 説明 |
|---|---|
|
LDAP接続プールが設定されているときに作成されるLDAP接続の初期数。 |
|
LDAP接続プールで使用できるLDAP接続の最大数。 注意: デプロイメントが多くのコンカレント・リクエストを受信し続けている場合、接続が不足したり操作中に接続を待機したりすることを防ぐために、この値を適切に設定する必要があります。 |
|
これらのパラメータは、接続プール内のすべてのLDAP接続が使用中の場合にLDAP接続が空くまでの待ち時間を決定します。IDSは、まず空き接続が使用可能になるまで |
|
これは、LDAP接続プール・クリーンアップ・タイマーによって使用されるタイマー間隔(秒)です。LDAP接続プール・クリーンアップ・タイマーはこのタイマー間隔を使用して動作し、プール・クリーンアップ・タスク(必要に応じてアイドル接続に基づいた接続プールを縮小するなど)を実行します。 |
|
これは、LDAP接続の最大アイドル時間を指定します。指定された時間アイドルになっているLDAP接続では、次のLDAP接続プール・クリーンアップ・タイマーが実行されるとクローズされます。 |
|
LDAPリクエストがLDAPリモート・ホストによって承認されるのをIDSが待機する時間(ミリ秒単位)。 |
|
これは、LDAP接続のタイムアウト期間をミリ秒数で指定します。この期間内に接続を確立できない場合は、接続の試行が中断されます。 |
|
これは、バックエンドLDAPが使用できるかを確認する間隔(秒)です。 |
|
このパラメータは、LDAP接続で基盤になるJNDIソケットの |
|
これは、プールが接続を閉じて削除するまでに接続を再利用できる最大回数を指定します。値は秒数で指定します。 |
|
これは、流用された接続が使用されない場合に自動的にプールに戻されるまでの期間(秒数)を指定します。 |
|
これは、IDSでサポートされているプロトコル・バージョンを指定します。 |
構成情報はXMLファイルに格納されます。ファイルベース構成を使用してパラメータをチューニングするには、WebLogic Scripting Tool (WLST)を使用する必要があります。
チューニング・パラメータを構成するには、次のWLSTコマンドを使用します。
注意:
この項のすべてのWLSTコマンド例で、ADAPTER_NAMEはIDSリポジトリの名前を参照します。たとえば、libOVDアダプタ名です。
InitialPoolSizeの場合:
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='InitialPoolSize', value=10, contextName='ids')
MaxPoolSizeの場合:
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='MaxPoolSize', value=100, contextName='ids')
MaxPoolWaitおよびMaxPoolCheckの場合:
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='MaxPoolWait', value=1000, contextName='ids') modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='MaxPoolChecks', value=10, contextName='ids')
PoolCleanupIntervalの場合:
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='PoolCleanupInterval', value=300, contextName='ids')
MaxPoolConnectionIdleTimeの場合:
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='MaxPoolConnectionIdleTime', value=3600, contextName='ids')
OperationTimeoutの場合:
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='OperationTimeout', value=120000, contextName='ids')
ConnectTimeoutの場合
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='ConnectTimeout', value=10000, contextName='ids')
HeartbeatIntervalの場合:
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='HeartBeatInterval', value=60, contextName='ids')
SocketOptionの場合:
modifySocketOptions(adapterName='ADAPTER_NAME', reuseAddress=false, keepAlive=false, tcpNoDelay=true, readTimeout=1800, contextName='ids')
MaxPoolConnectionReuseTimeの場合
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='MaxPoolConnectionReuseTime', value=3600, contextName='ids')
PoolConnectionReclaimTimeの場合
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='PoolConnectionReclaimTime', value=180, contextName='ids')
Protocolsの場合
modifyLDAPAdapter(adapterName='ADAPTER_NAME', attribute='Protocols', value='TLSv1.2', contextName='ids')
注意:
構成変更を反映するには、activateLibOVDConfigChanges('ids') WLSTコマンドを実行するか、WebLogicサーバーを再起動する必要があります。
インメモリー構成を使用してチューニング・パラメータを構成するには、WLSTコマンドを使用します。
構成情報はIDSコンシューマによって格納され、IdentityStoreConfigクラスを起動することで、実行時にIDSに渡されます。クラスとそのプロパティの使用に関する詳細は、Oracle Fusion Middleware Identity Governance Framework Identity Directory Java APIリファレンスを参照してください。
Java APIクラスを使用して、次の構成パラメータを変更できます。
表4-3 構成パラメータのフィールド名
| パラメータ | 変更するフィールド名 |
|---|---|
InitialPoolSize |
|
MaxPoolSize |
|
MaxPoolWait MaxPoolChecks |
|
PoolCleanupInterval |
|
MaxPoolConnectionIdleTime |
|
OperationTimeout |
|
ConnectTimeout |
|
HeartbeatInterval |
|
SocketOptions |
|
MaxPoolConnectionReuseTime |
|
PoolConnectionReclaimTime |
|
通信プロセスを改善するには、ファイアウォールとロード・バランサに対するタイムアウトの設定が不可欠です。これは、分散システム内の問題を検出するのに役立ちます。
SocketOptions設定は、リモート・サーバー障害が原因の孤立したソケット接続を検出して安全に閉じることを助けます。TCPは、リモート・サーバーからのレスポンスを構成された時間待ってからソケットを閉じます。ただし、libOVDとバックエンドLDAPとの間にファイアウォールまたはロード・バランサがある場合、タイムアウト・エラーが発生しないようにSocketOptions内のreadTimeout値を適切に設定する必要があります。この値はファイアウォールまたはロード・バランサのタイムアウトより小さい値に設定する必要があります。