この章では、Identity Manager 8.1 のドキュメントセットが発行されたあとに必要となった、新しい情報と修正情報を記載しています。
この情報は、次のように構成されています。
ここでは、『Sun Identity Manager 8.1 Business Administrator’s Guide』についての新しい情報と修正事項を説明します。
「Security」の章に次の情報が追加されます。
Identity Manager では、パスワードを忘れた場合に秘密の質問に回答するログイン認証の代替方法として、ログインの復元による認証が提供されます。Login Recovery 認証はメッセージの難読化オプションを実装し、すべてのエラーと成功を同じ汎用のメッセージで表示することで、アカウントが不正に取得されるのを防止します。機能上、このログインの復元方法は、ユーザー ID を忘れた場合のユーザー ID の問い合わせ方法と同じシステムを使用し、両者とも同じ設定属性を共有します。ただし、ログインの復元による認証ではユーザーのパスワードもリセットし、ユーザー ID とパスワードの両方をユーザーに電子メールで送信することです。(ID-18052)
「パスワードをお忘れですか?」ボタンをクリックしたときに、秘密の質問に基づくログインを行う代わりに、ログインの復元による認証を実行するように設定できます。また、ログインページで新たに「ログイン情報を復元しますか?」のリンクを有効にすることもできます。システム構成ファイルを変更して、両方の方法を設定できます。
「パスワードをお忘れですか?」ボタンをクリックしたときにログインの復元を実行するには、次のように設定します。
ui.web.user.questionLogin.forceLoginRecovery = true ui.web.admin.questionLogin.forceLoginRecovery = true |
ユーザー ID の問い合わせや秘密の質問に基づくログインの代わりに、ログインの復元を使用するには、次のように設定します。
ui.web.user.disableLoginRecovery = false ui.web.admin.disableLoginRecovery = false ui.web.user.disableForgotPassword = true ui.web.admin.disableForgotPassword = true ui.web.user.disableForgotUserId = true ui.web.admin.disableForgotUserId = true |
ログインの復元システムでアカウントの不正取得を防止する難読化メッセージオプションは、デフォルトで loginRecovery.jsp ファイルで有効になっています。同じオプションを lookupUserId.jsp ファイルでも設定できます。
ここでは、『Sun Identity Manager 8.1 System Administrator’s Guide』についての新しい情報と修正事項を説明します。
次の情報が含まれています。
次のタスクは、Identity Manager version 8.0 で、アダプタからタスクパッケージに移動されました。これらのタスクでトレースを有効にしている場合、またはこれらのパッケージを参照するカスタマイズしたタスク定義がある場合は、パスを更新する必要があります。
古いパッケージ名 |
新しいパッケージ名 |
---|---|
com.waveset.adapter.ADSyncFailoverTask |
com.waveset.task.ADSyncFailoverTask |
com.waveset.adapter.ADSyncRecoveryCollectorTask |
com.waveset.task.ADSyncRecoveryCollectorTask |
com.waveset.adapter.SARunner |
com.waveset.task.SARunner |
com.waveset.adapter.SourceAdapterTask |
com.waveset.task.SourceAdapterTask |
ここでは、『Sun Identity Manager Deployment Guide』についての新しい情報と修正事項を説明します。
『Sun Identity Manager Deployment Guide』の「Adding Localization Support for the WIC」では、エクスポートスキーマ文字列を、データエクスポータの「タイプの設定」ページに別の言語で表示する方法を説明しています。ただし、これらの手順を実行する必要があるのは公式にサポートされた言語を使用していない顧客だけであることが、この説明には記載されていません。公式にサポートされた言語は、簡体字中国語、繁体字中国語、韓国語、日本語、ドイツ語、スペイン語、フランス語、イタリア語、およびポルトガル語 (ブラジル) です。(ID-19264)
ローカライズ版の jar ファイルは、ローカライズされた WICMessages.properties ファイルを含み、Identity Manager 8.1 と一緒にパッケージされています。ローカライズされた Identity Manager システムを使用している場合は、ローカライズされた WICMessages.properties メッセージを表示できます。たとえばブラウザで、Identity Manager 管理者インタフェースの URL に lang=ja を指定してアクセスできます。
また、この節で使用されている例は適切ではありません。ドイツ語はサポートされた言語なので、ドイツ語の顧客はこの節の手順を実行する必要はありません。
このドキュメントには、ログインエラーコードに関する次の説明がありません。(ID-5657)
Identity Manager では、カスタムコードがログイン状態を判断できるように、次のエラーコードが提供されています。実際の文字列値は、括弧内の数値です (たとえば、101 または 102)。Constants.java ファイルに、これらのエラーコードが含まれています。
LIGHTHOUSE_USER_NOT_FOUND = 101; LIGHTHOUSE_AUTHN_FAILED = 102; RESOURCE_AUTHN_SUCCESSFUL = 104; RESOURCE_AUTHN_FAILED = 108; X509_CERT_NOT_FOUND = 110; END_USER_ATTEMPTED_LOGIN_TO_ADMIN_APP = 120; LIGHTHOUSE_USER_DISABLED = 140; LIGHTHOUSE_USER_LOCKED = 180;
System Configuration オブジェクトの説明に、次の属性に関する情報が含まれていません。
ProvisioningDisabledUserShouldThrow – true に設定すると、リソースに対する無効なユーザーのプロビジョニングが防止され、エラーが生成されます。属性が true に設定されていない場合、プロビジョニングは防止されますが、エラーは生成されません。(ID-20064)
security.delegation.historyLength – 記録される以前の委任の数を管理します。(ID-13331)
runPasswordLoginOnSuccess – true に設定すると、ユーザーが認証の質問に回答してログインに成功したときに、Identity Manager は Password Login ワークフローを実行します。デフォルトでは、このプロパティーの値は false です。(ID-10030)
PasswordSyncThreshold - Identity Manager もパスワードの変更を開始できるリソースでパスワード同期が有効な場合は、この設定を使用して、ふたたび同じパスワードに変更されるのを防止できます。(ID-7887) Identity Manager からパスワードの変更を開始する場合は、リソースでパスワードを設定し、PasswordSync ライブラリが Identity Manager に変更を通知します。Identity Manager は、ユーザーオブジェクトの lastPasswordDate を現在の時刻と比較します。この差が PasswordSyncThreshold よりも小さい場合、Identity Manager はパスワードの変更を無視します。このように、不要なパスワードの変更は適切に無視されます。
PasswordSyncResourceExcludeList – 常に同期から除外するリソースの名前を一覧で指定します。(ID-3275)
process.handleNativeChangeToAccountAttributes – true に設定すると、属性値の監査が有効になります。デフォルトでは、このプロパティーは無効です。このプロパティーは、調整処理とプロビジョニングツールの両方に対して、属性値の監査を有効にします。(ID-3275)
sources.subject – ソースアダプタタスクの所有者として指定されている管理者のログイン名を指定します。(ID-19694)
sources.host – ソースアダプタタスクを実行するサーバーを指定します。
security.saveNoValidateAllowedFormsAndWorkflows – SaveNoValidate アクションとして処理される、フォームとワークフローの ID を一覧で示します。ほかのフォームとワークフローはすべて、Save アクションとして処理されます。このリストが設定されていない場合、すべてのフォームとワークフローでこれまでと同じ動作になります (すべてのフォームとワークフローは、SaveNoValidate として処理されます)。(ID-19474)
データエクスポータは、Identity Manager で管理または処理されたデータを、追加処理できるように DBMS テーブルのセットに定期的にエクスポートする機能を提供します。エクスポート処理はカスタマイズ可能で、一部の処理では適切な動作のために手動の操作が必要です。データエクスポータに関する Identity Manager の設定オブジェクトは、適切に保存および更新されます。ただし、Web アプリケーション内のファイルに対して行われる一部のエクスポータのカスタマイズでは、特別な処理が必要です。
アップグレード処理中に、Identity Manager は $WSHOME および $WSHOME/exporter ディレクトリにある、変更されていないすべてのデータエクスポータファイルを上書きします。データエクスポータファイルに変更を行なっている場合、アップグレード処理は変更されたバージョンのファイルをそのまま残し、新しいバージョンのファイルを $WSHOME/patches/Identity_Manager_8_1_0_0_ Date/filesNotInstalled にインストールします。新しい機能をカスタマイズに組み込む場合は、手動で行う必要があります。
$WSHOME にある次のファイルはカスタマイズされていることが多いので注意してください。
model-export.dtd model-export.xml model-export.xsl exporter/exporter.jar exporter/create_warehouse.* exporter/drop_warehouse.* exporter/hbm/*.hbm.xml
必要なアップグレード手順は、8.0 でデータエクスポータをカスタマイズしたかどうか、および 8.1 でのデータエクスポータの使用計画によって異なります。
8.0 でデータエクスポータをカスタマイズしていて、8.1 の機能を実装する場合は、次の手順に従います。
ウェアハウススキーマを削除します。
Identity Manager をアップグレードします。
$WSHOME/exporter ディレクトリの新しい DDL で、スキーマを作成し直します。
データを維持したままスキーマを変更できるスキーマアップグレードスクリプトはありません。したがって、データを保存する必要がある場合は、データをエクスポートしたあとでインポートする必要があります。8.1 のウェアハウススキーマは、以前のバージョンとテーブルとフィールドの互換性が維持されています。ただし 8.1 では、新しいテーブルと、既存のテーブルに新しいフィールドが追加されました。フィールドの順序も変更されました。したがって、エクスポート操作では DDL とデータのエクスポートではなく、データのみのエクスポートが必要となります。
カスタマイズを新しい 8.1 エクスポータファイルに組み込みます。model-export.xml をカスタマイズしている場合は、exporter.jar ファイルを再構築します。
新しいウェアハウススキーマを読み込みます。
8.0 でデータエクスポータをカスタマイズしていて、8.1 の機能を実装しない場合は、次の手順に従います。
追加の手順を必要とせずに、8.1 にアップグレードできます。ただし、8.1 のエクスポータにアップグレードして、ウェアハウス DDL をアップグレードしない場合は、EXT_ADMINGROUP テーブルがないことを示すエラーメッセージが「ウェアハウスの設定」ページに表示されます。これは、新しい 8.1 オブジェクトが存在しているのに、古い 8.0 ウェアハウス DDL が読み込まれていることを示しています。
8.0 でデータエクスポータをカスタマイズしていなくて、8.1 の機能を実装しない場合は、次の手順に従います。
ウェアハウススキーマを削除します。
Identity Manager をアップグレードします。
新しいウェアハウススキーマを読み込みます。
ウェアハウスのデータはそのまま残ります。model-export.xml をカスタマイズしている場合は、DDL を変更する必要はありません。model-export.xml をカスタマイズしていない場合は、新しい DDL を読み込む必要があります。
8.1 をインストールしたあと、8.1 バージョンの model-export.xml が存在する場合は、http://server:port/idm/model-export.xml のスキーマファイルで、新しいデータ型と属性を確認することができます。新しいデータ型と属性には、8.1 のリリース番号でフラグが設定されます。
ここでは、『Sun Identity Manager Deployment Reference』についての新しい情報と修正事項を説明します。
フォームへのパスワード確認要求の追加に関する次の説明が、この章にありません。(ID-7604)
RequiresChallenge フォームプロパティーを使用して、選択フォームにパスワード確認要求を追加できます。この機能が有効な場合、Identity Manager は要求を処理する前に、現在ログインしている管理者に対してパスワードの入力を要求します。このオプションは次のフォームでサポートされます。
userForm (Tabbed User フォーム、Wizard User フォーム、Default User フォーム)
changePassword (デフォルトでは Change User Password フォーム)
resetPassword (デフォルトでは Reset User Password フォーム)
プロパティーはフォームごとに指定されます。
ユーザーフォームにパスワード確認要求を追加するには、次のように RequiredElement を追加します (この例では、password、email、および fullname)。
<Property name='RequiredChallenge'> <List> <String>password</String> <String>email</String> <String>fullname</String> </List> </Property> |
プロパティーの値は、User ビュー属性名 (applications、adminRoles、assignedLhPolicy、capabilities、controlledOrganizations、email、firstname、fullname、lastname、organization、password、resources、roles) の 1 つ以上のリストです。
changePassword または resetPassword フォームにパスワード確認要求を追加するには、次のように <RequiresChallenge> 要素を追加して、password、email、および fullname を指定します。
<Property name='RequiresChallenge' value='true'/>
設定できるプロパティーの値は true または false です。
フォームでプロパティーを true に設定すると、Identity Manager は変更を要求している現在の管理者に、Lighthouse にログインするときに使用したパスワードを入力するように要求します。確認が成功しない (現在の管理者のパスワードが入力されない) 場合、Identity Manager は変更を許可しません。確認が成功すると、Identity Manager は変更要求の処理を許可します。どちらのパスワード管理フォームも、RequiresChallenge フォームプロパティーの使用をサポートします。このプロパティーを true に設定すると、ユーザーは新しいパスワードを指定したあとに、以前のパスワードを入力するよう要求されます。
ユーザーがヘルプボタンにカーソルを移動したときに、Identity Manager がバージョン情報を表示しないようにする、2 つのカスタムメッセージカタログキーを作成できます。UI_END_USER_VERSION キーは、エンドユーザーインタフェースでバージョン情報を非表示にします。また、UI_VERSION キーは管理者インタフェースで使用されます。
キーの値を空の文字列に設定すると、バージョン情報が表示されなくなります。
次の例は、両方のインタフェースでバージョン情報を無効にしています。
<Waveset> <Configuration name="sampleCustomCatalog"> <Extension> <CustomCatalog id="defaultCustomCatalog" enabled="true"> <MessageSet language="en" country="US"> <Msg id="UI_END_USER_VERSION"></Msg> <Msg id="UI_VERSION"></Msg> </MessageSet> </CustomCatalog> </Extension> </Configuration> </Waveset>
「Forms」の章に次の説明がありません。(ID-18869)
デフォルトでは、2 つのパスワードの変更フォームの実装があります。
End User Password Change フォームは、デフォルトのパスワード変更フォームです。ユーザーがパスワードを変更できる、シンプルなフィールドのセットが表示されます。ユーザーに割り当てられたすべてのリソースのパスワードポリシーが集約および要約され、Identity Manager は割り当てられたすべてのリソースにパスワードの変更を適用します。
Basic Change Password フォームは、管理者インタフェースとユーザーインタフェースの両方に用意されています。ユーザーに割り当てられたリソースについての情報が表示され、Identity Manager でパスワードを変更するリソースを、ユーザーが個別に選択することができます。
どちらのパスワード管理フォームも、RequiresChallenge フォームプロパティーの使用をサポートします。このプロパティーを true に設定すると、ユーザーは新しいパスワードを指定したあとに、以前のパスワードを入力するよう要求されます。
このドキュメントの「Forms」と「Workflow」の章に、<Variable> 要素への有効範囲の割り当てに関する説明がありません。(ID-14915)
要素が宣言されたときに、Identity Manager はすべての <Variable> 要素に有効範囲を割り当てます。値に有効範囲属性を割り当てない場合、Identity Manager はローカルの値を割り当てます。これは、変数は宣言されている XPRESS セクション内のみにアクセスできることを意味します。
有効範囲を定義するその他の Variable 属性は次のとおりです。
input -- <Variable> 要素がローカルの有効範囲を持ち、呼び出し側が値を初期化できることを宣言します。
output -- <Variable> 要素がローカルの有効範囲を持つが、呼び出し側に返せることを宣言します。
external -- ローカルでない有効範囲を持つ <Variable> を宣言します。つまり、この変数への割り当ては、最初に宣言された有効範囲内での割り当てとなります。
この章に、Identity Manager のホワイトリスト機能に関する次の説明がありません。(ID-19474)
Identity Manager のホワイトリスト機能により、SaveNoValidate アクションを使用するフォームとワークフローを、ID またはフォーム名のリストに対してチェックできるようになります。Identity Manager は、フォーム名またはフォームの所有者 ID のいずれかについて、ホワイトリストをチェックします。ID のリスト (saveNoValidateAllowedFormsAndWorkflows) は、System Configuration オブジェクトのセキュリティー属性に格納されます。フォーム名または所有者の ID がホワイトリストに指定されている場合、フォームまたはワークフローで SaveNoValidate アクションを使用できます。フォーム名または所有者 ID がリストにない場合、フォームまたはワークフローは Save アクションを使用して処理されます。リストが設定されていない場合、すべてのフォームとワークフローは SaveNoValidate として処理できます。
この機能を配備に実装するには、SaveNoValidate を使用するフォームまたはワークフローを、System Configuration オブジェクトの saveNoValidateAllowedFormsAndWorkflows リストに追加する必要があります。追加する必要がある ID またはフォームを確認するには、syslog を確認するか、com.waveset.ui.util.GenericEditForm のトレースレベルを 4 にして、SaveNoValidate を使用するカスタムフォームまたはワークフローを送信します。ID を含む警告がログに記録されます。syslog に「null」のフォーム名が記録される場合は、実行された TaskDefinition のフォームに name 属性があることを確認してください。
「Workflow」の章に、handleNativeChangeToAccountAttributes ワークフローに関する次の説明がありません。(ID-3275)
Identity Manager は、リソースアカウントの監査可能な属性値に対するネイティブな変更 (Identity Manager 以外で実行された変更) を検出するごとに、この System Configuration オブジェクト属性に関連付けられた、handleNativeChangeToAccountAttributes ワークフローを実行することで応答します。
<Attribute name='process'> <Object> <Attribute name='handleNativeChangeToAccountAttributes' value='Audit Native Change To Account Attributes'/> </Object> </Attribute>
Changes Outside Lighthouse 監査フィルタを有効にしている場合、このワークフローはネイティブな変更イベントをイベントログに記録します。それ以外の場合、Identity Manager はイベントを無視します。警告: デフォルトワークフローを置換するワークフローから、どのメソッドを呼び出すかに注意してください。
Identity Manager は、リソースアカウントのフェッチがネイティブの変更を示すたびにこのワークフローを起動するため、同じリソースアカウントで別のフェッチをトリガーするメソッドまたはワークフローを呼び出さないようにする必要があります。たとえば、ユーザービューを構築する WorkflowServices メソッド getView(User)、checkoutView(User)、および checkinView(User) を呼び出すと、無限ループが発生します。
Identity Manager はワークフローを実行してネイティブな変更を処理するため、ネイティブ変更イベントをフックして、デフォルトのネイティブ変更ワークフローを置換するか、このワークフローに追加することで、ネイティブ変更を自由に処理できます。たとえば、管理者またはユーザーに電子メールを送信するように選択して、イベントをデータベースに記録したり、ネイティブな変更を取り消す更新を照会したり、そのネイティブな変更を取り出してほかのリソースにプッシュバックしたりすることもできます。
このドキュメントの「Workflow」の章に、ソースアダプタタスクの件名または管理者の指定方法に関する説明がありません。(ID-19694)
システム設定オブジェクトの次の属性を編集することで、Source アダプタタスクに件名または管理者を割り当てて、実行するサーバーを指定することができます。source.subject は、このタスクの所有者として指定された管理者のログイン名を指定します。sources.host は、タスクを実行するサーバーを指定します。設定オブジェクトの新しい値は、デフォルトで次のとおりです。
<Attribute name='sources'> <Object> <Attribute name='hosts'/> <!-- any host is the default --> <Attribute name='subject' value='Configurator'/> </Object> </Attribute>
ここでは、『Sun Identity Manager 8.1 Resources Reference』についての新しい情報と修正事項を説明します。
アイデンティティーコネクタの説明に、ConnectorAdapter が run() メソッドを実装する方法に関する情報がありません。runResourceAction サービスに渡される引数は、直接スクリプト変数として (ResourceAction で定義された) スクリプトに渡されます。(ID-19856)
ここでは、『Sun Identity Manager Service Provider 8.1 Deployment』についての新しい情報と修正事項を説明します。
ResourceAttribute 要素は ValidationPolicy 要素を含むことがあります。検証ポリシーは、ユーザーが「リソースパラメータ」ページで指定した値が、別のポリシーオブジェクトで定義された要件を満たしていることを保証します。
次のサンプルでは、アダプタは Port ポリシーを使用して、指定した値が有効であることを保証します。デフォルトの Port ポリシーは、値が 1 ~ 65536 の整数であることを確認します。
<ResourceAttribute name=.Port. value=.123.> <ValidationPolicy> <ObjectRef type=.Policy. id=.#ID#PortPolicy. name=.Port Policy./> </ValidationPolicy> </ResourceAttribute>
この FAQ では、Identity Manager IDE の使用に関してよくある質問に回答します。
この情報は、次のカテゴリに分類されています。
どのバージョンの Netbeans を使用すべきですか。
回答:使用している Netbeans プラグインのバージョン向けに提供されている、Identity Manager 製品のドキュメントに記載されている Netbeans のバージョンを使用してください。
パッチリリースでさえも主要機能に障害を発生させる可能性があるため、必ず記載どおりのバージョンを使用してください。
Netbeans プラグインは動作していましたが、何らかの操作を行なったため、動作しなくなりました。この問題の原因は何でしょうか。
回答:この問題は通常、.netbeans ディレクトリのファイルが壊れているために発生します。一般に、.netbeans ディレクトリを削除し、NetBeans プラグインを再インストールすることで問題は解決します。.netbeans ディレクトリを削除すると、NetBeans プラグインが実質的にアンインストールされます。ユーザー設定はすべて失われますが、プロジェクトの内容は保持されます。
手順は次のとおりです。
NetBeans をシャットダウンします。
.netbeans ディレクトリを削除します。
NetBeans を起動します。
NetBeans プラグインをインストールします。
NetBeans を再起動します。
プロジェクトのビルドと実行に非常に長い時間がかかります。Identity Manager IDE が多数のファイルをコピーしているようです。この問題の原因は何でしょうか。
回答:この問題は、次の理由で発生する可能性があります。
Identity Manager IDE 7.0 または 7.1 プラグインを使用している。
Identity Manager IDE 8.0 プラグインを使用してください。パフォーマンスを向上させるために、Identity Manager IDE 8.0 の設定ビルド環境 (CBE) にはいくつかの調整が加えられました。
Clean コマンドを不必要に使用している。
Clean Project または Clean And Build Project を使用すると、Identity Manager IDE は image ディレクトリ全体を削除します。このディレクトリには大量のファイルが含まれています。Identity Manager IDE は、次のビルドの間に、これらのすべてのファイルを idm-staging からコピーする必要があります。
Identity Manager IDE を効率的に使用するには、どのような場合に Clean コマンドを使用するべきかを理解する必要があります。詳細は、Identity Manager IDE README.txt ファイルの「When to Use Clean」の節を参照してください。
Identity Manager プロジェクトを作成しました。どのファイルをソース管理にチェックインすべきでしょうか。
回答:詳細は、Identity Manager IDE README.txt の「CVS Best Practices」の節を参照してください。
質問:CVS でのプロジェクト管理の最適な使用方法はどのようなものですか。
回答:詳細は、Identity Manager IDE README.txt の「CVS Best Practices」の節を参照してください。
質問:オブジェクトがリポジトリにインポートされるのはどのような場合ですか。
回答:詳細は、「リポジトリの操作」を参照してください。
質問:プロジェクトに新しい JAR を追加する方法を教えてください。
回答:Identity Manager IDE README.txt の「How to add a new JAR dependency」の節を参照してください。
サンドボックスリポジトリとしてどのリポジトリを使用すべきでしょうか。
回答:組み込みリポジトリをサンドボックスとして使用してください。特に、Identity Manager 7.1 以降を使用する場合は HsSQL リポジトリを利用可能ですが、組み込みリポジトリを使用してください。組み込みリポジトリを使用しないと、機能が失われます。
詳細は、Identity Manager IDE README.txt の「Working with the Repository」の節を参照してください。
質問:オブジェクトが自動的にインポートされるのはどのような場合ですか。
回答:オブジェクトを自動的にインポートするように、Identity Manager IDE を設定する必要があります。
手順は次のとおりです。
「IDM」メニューから「Repository」>「Manage Embedded Repository」を選択します。
「Manage Embedded Repository」ダイアログで「Automatically Publish Identity Manager Objects」オプションを有効にします。
このオプションは、Identity ManagerProject (Remote) の場合や独自のリポジトリを指定する場合は使用できません。
「Projects」>「プロジェクトを実行」または「Projects」>「プロジェクトをデバッグ」を選択します。
Identity Manager IDE は、プロジェクトが最後に実行された時点以降に変更されたすべてのオブジェクトを、自動的にインポートします。
Identity Manager オブジェクトを自動的にパブリッシュすると、サーバーの起動にかかる時間が長くなります。サーバーの起動時間を最小化するには、このオプションを無効にし、オブジェクトをリポジトリに明示的にアップロードしてください。
オブジェクトをアップロードするにはどのような方法がもっとも効果的ですか。
回答:次の方法のいずれかを使用して、変更されたオブジェクトをアップロードします。
編集したオブジェクトを 1 つ以上プロジェクトツリーで右クリックし、ポップアップメニューから「Upload Object」を選択します。
複数のオブジェクトをアップロードする場合は、Control キーを押しながらリストからオブジェクトを選択します。
編集したオブジェクトを 1 つ以上選択し、「IDM」メニューから「Repository」>「Upload Object」を選択します。ダイアログが表示されるので、アップロードするオブジェクトを選択できます。
どちらの方法でも、オブジェクトはサーバーに直接アップロードされるため、キャッシュ待ち時間の問題がなく、「プロジェクトを実行」や「プロジェクトをデバッグ」を使用するよりはるかに高速です。「Upload Object」機能は、使用しているリポジトリにかかわらず利用できます。
次のプロジェクト操作のいずれかを実行するたびに、NetBeans の組み込みアプリケーションサーバーは自動的にシャットダウンされます。
プロジェクトのクリーンアップ
差分ディストリビューションの作成
Jar の作成
プロジェクトのデバッグ
組み込みリポジトリの管理
プロジェクトをプロファイル
プロジェクトの実行
Identity Manager IDE Debugger の動作が遅いです。この問題の原因は何でしょうか。
回答:Debugger のパフォーマンスを向上させるには、次の操作を行います。
次の手順で、Tomcat の HTTP モニターを常に無効にします。
Identity Manager IDE の「実行時」タブを選択します。
「サーバー」ノードを展開し、「バンドル版 Tomcat」を右クリックしたあと、「プロパティー」を選択します。
「HTTP Monitor を有効化」オプションを無効にし、ダイアログを閉じます。
次回の Tomcat の起動時に、HTTP モニターは無効になります。
Java のデバッグを行わない場合は、「プロジェクト」>「プロジェクトを実行」を選択したあと、「デバッガを接続」>「Identity Manager XML Object Debugger」を選択して、XPRESS デバッガだけを使用します。
リモートでない Identity Manager IDE プロジェクトに対して「プロジェクト」>「プロジェクトをデバッグ」を選択すると、XPRESS デバッガおよび Java デバッガの両方が起動され、Java デバッガによってオーバーヘッドが大きく増加します。
デバッガでブレークポイントを設定できません。この問題の原因は何でしょうか。
回答:次の状況では、ブレークポイントを設定できないことがあります。
NBM をインストールしたが、Netbeans を再起動していない。
XML に <Waveset> ラッパー要素が含まれている。
Identity Manager IDE では基本的に、<Waveset> ラッパー要素で始まるファイルはすべて無視されます。これは、Identity Manager IDE がこの要素をマルチオブジェクトファイルとして解析するためです。
マルチオブジェクトファイルでは、次の機能は動作しません。
デバッガ
規則テスター
フォームプレビューア
すべてのエディタ
インポートファイルジェネレータ
オブジェクトのアップロード
オブジェクトの比較
基本的に、マルチオブジェクトファイルに対して可能な操作は、ファイルのインポートだけです。<Waveset> ラッパー要素は、プロジェクトのトップレベルのインポートファイルだけに含めるようにしてください。
デバッガでブレークポイントを設定しましたが、ブレークポイントでデバッガが停止しません。この問題の原因は何でしょうか。
回答:次の 2 点を確認してください。
オブジェクト名に CBE 置換文字列 (%%) が含まれていないことを確認します。オブジェクト名に CBE 置換文字列を含めることはできません。
実行されていると思われるコードが、実際に実行されていることを確認します。トレースを追加して、何らかの出力があるかどうかを確認してみます。
Netbeans で規則を開発する際に、規則ライブラリにデザインモードを使用できないのはなぜですか。
回答:デザインモードの機能は、「Projects」ビューのエクスプローラツリーから使用できます。次の手順を使用します。
ライブラリノードを展開し、規則を右クリックします。
ポップアップメニューが表示されたら、「プロパティー」を選択してから、「本体」をクリックします。
これまで、Identity Manager ではリソースオブジェクトと関数をローカライズしていません。この主な理由は、リソースオブジェクトや関数の大半が Identity Manager の初期化の間に (init.xml を通じて) ロードされるサンプルであることと、オブジェクトタイプの属性はカスタマイズのレベルに応じて実際の顧客の配備で異なる可能性があることです。英語で表示される可能性がある要素のリストを次に示します (ID-16349)。
デフォルトのユーザーフォームおよびプロセスマッピング
例: 「ユーザーの編集」>「セキュリティー」>「ユーザーフォーム」プルダウンメニュー
例: 「設定」>「フォームおよびプロセスマッピング」
設定オブジェクトの属性名
例: 「設定」>「ユーザーインタフェース」の、displayPasswordExpirationWarning のような連結された名前
デフォルトのタスク
タスクテンプレート
例: 「サーバータスク」>「タスクの設定」の、テーブル内の使用可能なタスクテンプレート名
タスクタイプのラベル
例: 「サーバータスク」>「タスクの実行」の、「利用可能なタスク」テーブルの 2 列目の項目
タスク定義
例: 「サーバータスク」>「タスクの検索」の、タスク定義を選択するための 2 番目のプルダウンメニュー
デフォルトのレポート名
例: 「レポート」>「レポートの実行」の「レポート」テーブルに表示されるレポート名
デフォルトのポリシー名
例: 「コンプライアンス」>「ポリシーの管理」の、監査ポリシーの名前および説明
デフォルトの機能名
例: 「ユーザーの編集」>「セキュリティー」>「利用可能な機能」
デフォルトのレポートおよびグラフの名前
プロセス/ワークフローダイアグラムのアプレット
Identity Manager ではプロファイラユーティリティーが提供され、配備におけるフォーム、Java、規則、ワークフロー、および XPRESS に関連するパフォーマンスの問題のトラブルシューティングに利用できます。
フォーム、Java、規則、ワークフロー、および XPRESS はどれも、パフォーマンスやスケールの問題の原因となる場合があります。プロファイラは、これらのさまざまな領域で消費される時間のプロファイルを作成することにより、これらのフォーム、Java、規則、ワークフロー、または XPRESS オブジェクトがパフォーマンスやスケールの問題の原因となっているかどうか、また、その場合はこれらのオブジェクトのどの部分が問題の原因となっているかを判断できるようにします。
ここでは、Identity Manager のプロファイラの使用方法を説明し、配備におけるパフォーマンス問題のトラブルシューティング方法の学習に役立つチュートリアルを提供します。
これらの情報は、次のトピックで構成されています。
Identity Manager プロファイラは version 7.1 Update 1 以降でのみサポートされています。
ここでは、Identity Manager のプロファイラ機能の概要を説明します。説明する内容は次のとおりです。
プロファイラユーティリティーを使用すると、次のことが可能です。
プロファイリングデータのスナップショットを作成する。
「スナップショット」は、収集されたすべてのプロファイリング結果を最後にリセットした時点から累積された、プロファイリングの結果です。
スナップショット結果を、4 つの異なるデータビューで表示する。
「Call Tree」ビューでは、システム全体での呼び出し時間と呼び出し回数が、ツリーテーブルに表示されます。
「Hotspots」ビューでは、親にかかわらず集計された呼び出し時間が、フラット化されたノードリストに表示されます。
「Back Traces」ビューでは、そのノード (「ルートノード」と呼ばれる) が呼び出されたすべての呼び出しチェーンを、逆向きの呼び出しスタックとして表示します。
「Callees」ビューでは、親チェーンにかかわらず集められた、ルートノードの呼び出しツリーが表示されます。
スナップショットに含める情報の種類を指定する。
フォーム、ワークフロー、および XPRESS のすべての要素を含めることも、特定の要素セットだけを含めることもできます。
特定の Java メソッドやコンストラクタを選択して、計測に含めたり計測から除外したりできます。Identity Manager クラスとカスタムクラスの計測がサポートされています。
プロジェクトのスナップショットを次のように管理する。
プロジェクトの nbproject/private/idm-profiler ディレクトリまたはプロジェクト外部の任意の場所に、スナップショットを保存します。
「IDM Profiler」ビューの「Saved Snapshot」セクションで、保存されているスナップショットの一覧を表示できます。
プロジェクトからスナップショットを開くか、プロジェクト外部の任意の場所からスナップショットを読み込みます。
スナップショットを削除します。
特定のノードを名前で検索する。
ここでは、プロファイラが次の Identity Manager オブジェクトのソースをどのように検索して管理するかを説明します。
「Call Tree」ビューと「Hotspots」ビューでは、Java メソッド、ワークフロー、フォーム、規則、または XPRESS に対応する任意のノードをダブルクリックすると、そのノードのソースを表示できます。
プロファイラでスナップショットが作成されるとき、サーバーはすべてのプロファイリングデータを評価し、データがどのソースに依存しているかを調べます。次に、サーバーはこれらのソースすべてをリポジトリから取得して、スナップショットに含めます。したがって、スナップショットに表示される Identity Manager オブジェクトは、スナップショットが作成された時点の状態を正確に反映していることが保証されます。
この処理によってスナップショットのサイズは増加しますが、実際のソースのサイズは合計サイズに比べてわずかな部分にすぎません。したがって、Sun のカスタマサポートに送信するのはスナップショットのみで、ソースファイルを個別に送信する必要はありません。
Java ソースのスナップショットを作成するとき、クライアントはそのスナップショットをダウンロードし、プロジェクトより参照されるすべての Java ソースを取り込むためにスナップショットを検索します。スナップショットを保存するとき、クライアントはソースを圧縮して、スナップショットの末尾に追加します。
スナップショットを表示し Java ソースにアクセスするときは、クライアントは最初にスナップショットの内容を確認します。スナップショットに内容が見つからない場合、クライアントはプロジェクトの内容を確認します。この処理により、ユーザーのカスタム Java コードと Identity Manager コードの、両方のプロファイリングデータを含むスナップショットを送信できます。
Java ソースのスナップショットでは、ソースがサーバーで最新になっていること、または常に使用可能であることを前提としないでください。
次の節では、プロファイラから提供される結果を評価する際に考慮すべき情報について説明します。
ルートノードのセルフタイム統計を計算する場合、プロファイラは、ルートノードの合計時間からすべての子ノードの時間を減算します。
したがって、計測されていない子ノードの時間がルートノードのセルフタイムに反映されます。ルートノードのセルフタイムがかなり多い場合は、その理由を必ず調査するようにしてください。適切なメソッドで計測していないために、間違った場所を見ている可能性もあります。
たとえば、メソッド A がメソッド B を呼び出すとします。
メソッド A に合計 10 秒 (この合計時間には B の呼び出しも含まれる)、B の呼び出しに合計 10 秒がかかっています。
A と B の両方を計測していれば、呼び出しスタックにその情報が反映されます。A のセルフタイムは 0 秒、B のセルフタイムは 10 秒と表示されます (10 秒は実際に B で消費された時間)。これに対し、B を計測していない場合は、A の呼び出しに 10 秒かかり、A のセルフタイムは 10 秒であると表示されます。したがって、B ではなく A に直接問題があると考える可能性があります。
特に、最初のコンパイルで JSP のセルフタイムが多いことに気づく場合があります。収集された結果をリセットしてからページを再表示すると、セルフタイムの値はかなり少なくなります。
Java の計測方針には制限があるため、this() または super() の最初の呼び出しは、コンストラクタ呼び出しの子としてではなく兄弟として表示されます。次の例を参照してください。
class A { public A() { this(0); } public A(int i) { } } and: class B { public static void test() { new A(); } } The call tree will look like this: B.test() -A.<init>(int) -A.<init>() Rather than this: B.test() -A.<init>() -A.<init>(int) |
ReconTask.WorkerThread.run() や TaskThread.WorkerThread.run() など、Identity Manager のいくつかのデーモンスレッドで大量の時間が消費されたように見えますが、これに惑わされないでください。この時間の大部分は、イベントを待機しているスリープ中に消費されたものです。イベントの処理中に実際に消費された時間を確認するには、これらのトレースを調査する必要があります。
ここでは、プロファイラを起動する方法と、プロファイラのグラフィカルユーザーインタフェースの各種機能を使用する方法について説明します。この情報は、次のように構成されています。
プロファイラはメモリーを集中的に使用するため、サーバーと Netbeans Java 仮想マシン (JVM) 両方のためにメモリーをかなり増やす必要があります。
サーバーのメモリーを増やすには、次の手順に従います。
Netbeans ウィンドウを開き、「実行時」タブを選択します。
「サーバー」ノードを展開し、「バンドル版 Tomcat」を右クリックし、ポップアップメニュー から「プロパティー」を選択します。
「サーバーマネージャー」ダイアログが表示されたら、「接続」タブの「HTTP モニターを有効化」ボックスのチェックマークを外します。
「プラットフォーム」タブを選択し、VM オプションを -Xmx1024M に設定して「閉じる」をクリックします。
Netbeans JVM のメモリーを増やすには、次の手順を使用します。
netbeans-installation-dir\etc\netbeans.conff ファイルを開き、次の行を見つけます。
netbeans_default_options="-J-Xms32m -J-Xmx ...
-J-Xmx の値を -J-Xmx 1024M に変更します。
ファイルを保存してから閉じます。
完了したら、次の節の説明に従ってプロファイラを起動します。
次の方法のいずれかを使用して、Identity Manager IDE ウィンドウからプロファイラを起動できます。
メニューバーにある「Start Identity Manager Profiler on Main Project」アイコンをクリックします。
「Start Identity Manager Profiler on Main Project」アイコンは、Identity Manager メインプロジェクトのバージョンが 7.1 Update 1 以降の場合に使用可能になります。
メニューバーから「ウィンドウ」>「IDM Profiler」の順に選択します。
「Identity Manager Profiler」ウィンドウが Explorer に表示されます。このウィンドウで、「Current Project」ドロップダウンメニューから Identity Manager プロジェクトを選択し、「コントロール」セクションにある「Start Identity Manager Profiler」アイコンをクリックします。
「プロジェクト」ウィンドウでプロジェクトを右クリックし、ポップアップメニューから「Start Identity Manager Profiler」を選択します。
「プロジェクト」ウィンドウでプロジェクトを選択し、メニューバーから「IDM」>「Start Identity Manager Profiler」を選択します。
プロファイラを起動すると「Profiler Options」ダイアログが表示されるので、使用するプロファイリングオプションを指定できます。これらのオプションの設定方法については、「プロファイラオプションの指定」を参照してください。
この節では、プロファイラのグラフィカルユーザーインタフェースの機能と、これらの機能の使用方法について説明します。説明する内容は次のとおりです。
「Profiler Options」ダイアログは次のタブで構成されています。
これらのタブにあるオプションを使用して、どのオブジェクトのプロファイルを作成するか、およびどの要素をプロファイルに表示するかを指定します。
プロファイラのオプションを指定したら、「OK」をクリックしてプロファイラを起動します。プロジェクトの設定に応じて、プロファイラは 2 つの処理のどちらかを実行します。
通常の Identity Manager プロジェクトを「組み込み」の Identity Manager インスタンスで使用する場合、プロファイラは完全なビルドを実行して NetBeans アプリケーションサーバーに配備し、プロファイラを起動します。
通常の Identity Manager プロジェクトを「外部」の Identity Manager インスタンスで使用する場合、またはリモートの Identity Manager プロジェクトを使用する場合、プロファイラはそのプロジェクト用に設定されている Identity Manager インスタンスに接続します。
「IDM」>「Set Identity Manager Instance」を選択して、プロジェクトに対する Identity Manager インスタンスの動作を制御できます。
「Mode」タブには次のオプションがあります。
「IDM Objects Only」: フォーム、規則、ワークフロー、および XPRESS オブジェクトのプロファイルを作成する場合に選択します。Java オブジェクトはプロファイルから除外されます。
「Java and IDM Objects」: フォーム、Java、規則、ワークフロー、および XPRESS オブジェクトのプロファイルを作成する場合に選択します。
通常の Identity Manager プロジェクトを「外部」の Identity Manager インスタンスで使用する場合、またはリモートの Identity Manager プロジェクトを使用する場合、「Java and IDM Objects」オプションは使用できません。
プロファイラの実行中に「Mode」オプションを変更することはできません。オプションを変更するには、プロファイラを停止する必要があります。
「IDM Object Filters」タブには次のオプションがあります。
Show IDM Object details
Include Anonymous Sources
「匿名ソース」は、一時的に生成されるフォーム (またはフォームの一部) であり、Identity Manager リポジトリに常駐する持続的フォームとは対応しません。匿名ソースの例には、ログインフォームや MissingFields フォームがあります。
匿名ソースをスナップショットに含める場合は、このボックスを選択します。
匿名ソースをスナップショットから除外する場合は、このボックスの選択を解除します。
「Java Filters」タブは次の場合に選択します。
Java フィルタを含める、または除外する
新しいフィルタを作成する
既存のフィルタを削除する
デフォルトのフィルタを復元する
Java フィルタは、メソッドパターンの形で指定され、「正規メソッド名」に基づいて含めるか除外するかを示すパターンで表現されます。正規メソッド名は次のとおりです。
fully-qualified-class-name.method-name( parameter-type-1, parameter-type-2, ... )
コンストラクタの場合、method-name は <init> です。
次に、いくつかの例を示します。
すべてのコンストラクタを除外するには、「Exclude」ボックスを有効にし、次のフィルタを追加します。
*.<init>(*)
単一の org.w3c.dom.Element パラメータを持つすべてのコンストラクタを除外するには、「Exclude」ボックスを有効にし、次のフィルタを追加します。
*.<init>(org.w3c.dom.Element)
すべての Identity Manager クラスを除外するには、「Exclude」ボックスを有効にし、次のフィルタを追加します。
"com.waveset.*" "com.sun.idm.*"
カスタムコードだけを計測するには、「Exclude」ボックスを無効にし、最初の * include フィルタを削除してから、次のフィルタを追加します。
"com.yourcompany.*"
現在では、フィルタはカスタムクラスと Identity Manager クラスだけに適用されるため、最後の 2 つの例は等価です。
必要な場合は、build.xml の次の行を適切に編集すると、ほかの JAR を計測できます。次に例を示します。
<instrument todir="${lighthouse-dir-profiler}/WEB-INF" verbose="${instrumentor.verbose}" includeMethods="${profiler.includes}" excludeMethods="${profiler.excludes}"> <fileset dir="${lighthouse-dir}/WEB-INF"> <include name="lib/idm*.jar"/> <include name="classes/**/*.class"/> </fileset> </instrument> |
デフォルトの設定では、ユーザーのすべてのカスタムクラスとほとんどの Identity Manager クラスが含められます。いくつかの Identity Manager クラスは、有効にするとプロファイラで障害が発生するため、強制的に除外されています。
たとえば、ワークフロー、フォーム、および XPRESS の各エンジンのクラスは除外されています。そうしないと、プロファイラが Java および Identity Manager オブジェクトのプロファイルを作成する際に、理解不能なスナップショットが生成されます。
「Java Filters」では、「IDM Object Filters」よりはるかに詳細なフィルタリングが提供されます。Java 計測では、かなりのオーバーヘッドが実行時間に追加され、それによってプロファイリング結果が大幅に歪曲される可能性があります。Identity Manager オブジェクトはコンパイルされるのではなく解釈されるので、計測のオーバーヘッドは無視できるほどの大きさです。したがって、ワークフロー A を除外してワークフロー B を含めるなどには、基本的に理由がありません。
プロファイラの実行中に Java Filters を変更することはできません。Java Filters を変更する前に、プロファイラを停止する必要があります。
「Miscellaneous」タブには次のオプションがあります。
Prune snapshot nodes where execution time is 0:
実行時間がゼロのエンティティーも含め、実行されたすべてのエンティティーの呼び出し情報をスナップショットに含めるには、このオプションを無効にします (デフォルトで無効)。
実行時間が 0 のノードについても、呼び出し回数の情報が役立つことがあります。
このようなノードを削除するには、このオプションを有効にします。 この場合、もっとも関連のあるプロファイリングデータに焦点を当てることができます。また、このオプションを有効にすると、プロファイラのスナップショットサイズを大幅に節約できます。
Automatically Open Browser Upon Profiler Start:
プロファイラの起動時に、プロファイルを作成する Identity Manager インスタンスを指すブラウザを自動的に開くようにするにはこのオプションを有効にします (デフォルト)。
ブラウザを開かないようにするには、このオプションを無効にします。
Include Java Sources in Snapshot:
プロファイリングデータで参照されているすべての Java メソッドの Java ソースをスナップショットに含めるには、このオプションを有効にします (デフォルト)。フィールドでは常にこのスナップショットの設定を使用するようにしてください。カスタム Java は比較的小さく、その情報があるとサポートには大変役立ちます。
Identity Manager のプロファイルを作成する場合で、Identity Manager の完全なソースが利用可能なときだけ、このオプションを無効にします。
この場合、Identity Manager のソースを含めるとスナップショットがきわめて大きくなるので、それは望ましくありません。詳細は、「プロファイラがソースを見つけて管理するしくみ」を参照してください。
「IDM Profiler」ビューは次の領域で構成されています。
「Current Project」領域は、ユーザーの現在のプロジェクトを一覧表示するドロップダウンメニューで構成されています。このメニューを使用して、プロファイルを作成するプロジェクトを選択します。
「Controls」領域には、次の表で説明する 4 つのアイコンがあります。
アイコン |
名前 |
目的 |
---|---|---|
|
Start Identity Manager Profiler |
プロファイラを起動し、「Profiler Options」ダイアログを開きます。 |
|
Stop Identity Manager Profiler |
プロファイラを停止します。 |
|
Reset Collected Results |
この時点までに収集されたプロファイリング結果をすべてリセットします。 |
|
Modify Profiling |
「Profiler Options」ダイアログを再度開き、現在のプロファイリング結果を修正するために設定を変更できるようにします。 |
「Status」領域は、ホストに接続しているかどうかを報告し、プロファイラの起動時、実行中、および停止時にはステータス情報を表示します。
「Profiling Results」領域には、次の表で説明する 2 つのアイコンがあります。
アイコン |
名前 |
目的 |
---|---|---|
|
Start Identity Manager Profiler |
プロファイラを起動し、「Profiler Options」ダイアログを開きます。 |
|
Reset Collected Results |
この時点までに収集されたプロファイリング結果をすべてリセットします。 |
「Saved Snapshot」領域には、保存されているスナップショットの一覧が表示されます。
スナップショットを保存する手順については、「スナップショットの保存」を参照してください。
また、次のボタンを使用して、これらのスナップショットを管理することもできます。
Open: このボタンをクリックすると、保存されているスナップショットを「スナップショットビュー」ウィンドウで開くことができます。
「Saved Snapshot」リストでスナップショットをダブルクリックして、そのスナップショットを開くこともできます。
Delete: 「Saved Snapshot」リストでスナップショットを選択してからこのボタンをクリックすると、選択したスナップショットを削除できます。
Save As: リストでスナップショットを選択してからこのボタンをクリックすると、外部の任意の場所にスナップショットを保存できます。
Load: このボタンをクリックすると、任意の場所にあるスナップショットを「スナップショットビュー」ウィンドウで開くことができます。
スナップショットを開くと、Identity Manager IDE の右上にある「スナップショットビュー」ウィンドウに結果が表示されます。
スナップショットにはいくつかのデータビューがあり、これらについて次の節で説明します。
「Call Tree」ビューは、システム全体での呼び出し時間と呼び出し回数を表示するツリーテーブルで構成されています。
このツリーテーブルには、次の 3 つの列があります。
「Call Tree」列: すべてのノードを一覧表示します。
トップレベルのノードは次のいずれかです。
システムの各種バックグラウンドスレッドに対応する Thread.run() メソッド。
たとえば、Java プロファイリングを有効にした場合は、ReconTask.WorkerThread.run() メソッドが表示されます。
要求時間
たとえば、idm/login.jsp という URL を表示した場合は、idm/login.jsp に対応するトップレベルエントリが表示されます。このエントリに関して、「Time」列に表示されるデータはその要求の合計時間を表します。「Invocations」列に表示されるデータは、そのページに対する呼び出しの合計回数を表します。次に、そのデータをさらに詳細に調べて、どの呼び出しに時間がかかったかを確認できます。
「Call Tree」には「Self Time」ノードもあります。「Self Time」の値は、そのノード自体で消費された時間を表します。詳細は、「統計の警告」を参照してください。
「Time」列: 各ノードが親から呼び出されたときにそのノードで消費された時間を表示します。パーセント値は、親の時間に対する相対値です。
「Invocations」列: 各ノードが親から呼び出された回数を表示します。
「Hotspots」ビューでは、親にかかわらず集計された呼び出し時間が、フラット化されたノードリストに表示されます。
このビューには、次の列があります。
Self Time: 各ノードで消費された合計時間を表示します。
Invocations: 各ノードが親から呼び出された合計回数を表示します。
Time: 各ノードおよびそのすべての子で消費された合計時間を表示します。
「Back Traces」ビューでは、各ノードが呼び出されたすべての呼び出しチェーンが、逆転した呼び出しスタックに表示されます。
これらの統計を使用すると、そのノードから特定の呼び出しチェーンを削除した場合に、どれだけの時間が節約されるかがわかります。
「Back Traces」ビューにアクセスするには、ほかのスナップショットビューのいずれかでノード (「ルートノード」と呼ばれる) を右クリックし、ポップアップメニューから「Show Back Traces」を選択します。
「Back Traces」ビューの「Time」および「Invocations」のデータ値は少し意味が異なります。
Time: この列の値は、ルートノードが特定の呼び出しチェーンから呼び出されたときにそのノードで消費された時間を表します。
Invocations: この列の値は、ルートノードが特定の呼び出しチェーンから呼び出された回数を表します。
「Callees」ビューでは、親チェーンにかかわらず集められた、ノード (「ルートノード」と呼ばれる) の呼び出しツリーが表示されます。
これらの統計は、問題のある領域がマスター呼び出しツリー全体のさまざまな部分から呼び出されている場合に、そのノードの全体的なプロファイルを確認するのに役立ちます。
「Callees」ビューにアクセスするには、ほかのスナップショットビューのいずれかでノード (「ルートノード」と呼ばれる) を右クリックし、ポップアップメニューから「Show Callees」を選択します。
「Callees」ビューで使用される「Time」および「Invocations」のデータ値の意味は、「Call Tree」ビューで使用されるものと同じです。
「Call Tree」ビューまたは「Hotspots」ビューで任意のノードを右クリックすると、次の表に示すオプションがポップアップメニューに表示されます。
メニューオプション |
説明 |
---|---|
GoTo Source |
Java メソッド、ワークフロー、フォーム、規則、または XPRESS に対応するノードの XML ソースを表示する場合は、このオプションを選択します。このビューの詳細は、「プロファイラがソースを見つけて管理するしくみ」を参照してください。 |
Show Back Traces |
「Back Traces」ビューにアクセスする場合は、このオプションを選択します。このビューの詳細は、「「Back Traces」ビュー」を参照してください。 |
Show Callees |
「Callees」ビューにアクセスする場合は、このオプションを選択します。このビューの詳細は、「「Callees」ビュー」を参照してください。 |
Find In Hotspots |
「Hotspots」ビューでノードを検索する場合は、このオプションを選択します。このビューの詳細は、「「Hotspots」ビュー」を参照してください。 |
オプションを表示 > ソート > |
このオプションには次のいずれかを選択します。
|
オプションを表示 > 表示項目を変更 |
Call Tree または Hotspots のリストに表示される列を変更する場合は、このオプションを選択します。 「表示項目を変更」ダイアログが表示されたら、次のオプションを 1 つ以上選択できます。
|
「スナップショットビュー」ウィンドウの上部にある「検索」アイコン を使用すると、「Call Tree」ビューまたは「Hotspots」ツリーからノードを名前で検索できます。
あるいは、「Call Tree」ビューまたは「Hotspots」ビューで任意のノードを右クリックし、ポップアップメニューからそれぞれ「Find in Call Tree」または「Find in Hotspots」を選択すると、ノードを検索できます。
プロファイラには、スナップショットを保存するためのオプションがいくつか用意されています。これらのオプションについては、次の表を参照してください。
アイコン |
名前 |
目的 |
---|---|---|
|
「Save the Snapshot in the Project」アイコン (「スナップショットビュー」ウィンドウの上部にある) |
プロジェクトの nbproject/private/idm-profiler ディレクトリにスナップショットを保存します。プロジェクトに保存されているスナップショットは、「Profiler」ビューの「Saved Snapshot」セクションに一覧表示されます。 |
|
「Save the Snapshot Externally」アイコン (「スナップショットビュー」ウィンドウの上部にある) |
外部の任意の場所にスナップショットを保存します。 |
|
「Save As」ボタン (「Saved Snapshot」領域にある) |
外部の任意の場所にスナップショットを保存します。 |
Identity Manager ではチュートリアル (profiler-tutorial.zip) が用意されており、プロファイラを使用してフォーム、Java 規則、ワークフロー、および XPRESS のトラブルシューティングを行う方法の学習に利用できます。
チュートリアルを完了するには、次の手順を使用します。
「ファイル」>「新規プロジェクト」の順に選択します。
新規プロジェクトウィザードが表示されたら、次のように設定し、「次へ」をクリックします。
「Name and Location」パネルで次のフィールドに入力し、「次へ」をクリックします。
Project Name: プロジェクト名として Idm80 と入力します。
Project Location?: デフォルトの場所を使用するか、別の場所を指定します。
Project Folder?: デフォルトのフォルダを使用するか、別のフォルダを指定します。
「Identity Manager WAR File Location」パネルが表示されたら、Identity Manager 8.1 の war ファイルの場所を入力します。通常、このファイルを解凍すると、同じディレクトリに idm.war ファイルが作成されます。
「次へ」をクリックして「Repository Setup」パネルに進みます。
このパネルではデフォルト設定を変更する必要はないので、そのまま「完了」をクリックします。Identity Manager の出力ウィンドウに「BUILD SUCCESSFUL」というメッセージが表示されたら、プロファイラのチュートリアルファイルを抽出できます。手順については、「手順 2: プロファイラチュートリアルの解凍」を参照してください。
profiler-tutorial.zip をプロジェクトルートに解凍します。抽出されるファイルには次のものがあります。
<project root>/custom/WEB-INF/config/ProfilerTutorial1.xml <project root>/custom/WEB-INF/config/ProfilerTutorial2.xml <project root>/src/org/example/ProfilerTutorialExample.java <project root>/PROFILER_TUTORIAL_README.txt
プロファイラを起動します。「手順 3: プロファイラの起動」に進みます。
「開始する前に」で説明されている手順を使用して、サーバーおよび Netbeans JVM のメモリーを増設します。
「概要」で説明されているいずれかの方法で、プロファイラを起動します。
「Profiler Options」ダイアログが表示されたら、プロファイリングオプションを指定できます。
「手順 4: プロファイラオプションの設定」に進みます。
その他のプロファイラオプションの詳細は、「プロファイラオプションの指定」を参照してください。
このチュートリアル用には、次のプロファイラオプションを指定します。
「Mode」タブで「Java and IDM Objects」を選択して、フォーム、Java、規則、ワークフロー、および XPRESS オブジェクトのプロファイルを作成することを指定します。
「Java Filters」タブを選択します。
次の手順を使用して、カスタム Java クラス (ここでは org.example.ProfilerTutorialExample) を除くすべての Identity Manager Java クラスを無効にします。
「了解」をクリックしてプロファイラを実行します。
プロジェクトではじめてプロファイラを実行する場合や、プロジェクトのクリーンアップ操作を最近実行した場合は、プロファイラの処理の完了に数分かかります。
処理が完了すると、ログインを求めるプロンプトが表示されます。
パスワード configurator を入力し、「Remember Password」ボックスを選択してから、「了解」をクリックして続行します。
Identity Manager ウィンドウが表示されたらログインします。
通常は、再度 configurator としてログインするのではなく、別のユーザーで Identity Manager にログインするようにしてください。Identity Manager セッションプールで使用できるのは 1 ユーザーにつき 1 つのエントリだけですが、すでに Configurator としてプロファイラにログインしています。複数のエントリを使用すると、セッションプールの表示が壊れ、パフォーマンスの問題をより詳細に調査するためのプロファイリング結果が歪曲される可能性があります。
ただし、この単純な例では、セッションプールは重要でないので、configurator/configurator としてログインしてかまいません。
Identity Manager で、「サーバータスク」>「タスクの実行」を選択し、ProfilerTutorialWorkflow1 をクリックします。
チュートリアルが応答するまでに少し時間がかかることがあります。
この時点でスナップショットを作成することもできますが、ここでは結果をリセットし、プロファイラを実行し、プロファイラを再度実行してから、スナップショットを作成します。
スナップショットを作成する前に、すべてのキャッシュの準備が完了したこと、すべての JSP がコンパイルされていることなどを確実にするために、プロファイラを数回実行することが最良の方法です。
プロファイラを数回実行することで、実際のパフォーマンスの問題に焦点を当てることができます。この方法が推奨されないのは、キャッシュ自体の生成に問題がある場合だけです。
Identity Manager IDE で 「IDM Profiler」ビューに戻ります。「Profiling Results」セクション (または「Controls」セクション) の「Reset Collected Results」アイコン をクリックして、この時点までに収集された結果をすべてリセットします。
Identity Manager で、「サーバータスク」>「タスクの実行」を再度選択し、ProfilerTutorialWorkflow1 をクリックします。
処理ダイアグラムが表示されたら、Identity Manager IDE に戻り、「Profiling Results」セクションの「Take Snapshot」をクリックします。
Identity Manager IDE でユーザーのスナップショットがダウンロードされ、結果がウィンドウの右側に表示されます。
この領域が「Call Tree」ビューです。呼び出しツリーの最上部に /idm/task/taskLaunch.jsp が表示され、「Time」列に時間が表示されます。その時間は、要求全体に 6 秒強かかったことを示しています。
/idm/task/taskLaunch.jsp ノードを展開すると、ProfilerTutorialWorkflow1 に 6 秒かかったことがわかります。
ProfilerTutorialWorkflow1 ノードを展開します。activity2 に 4 秒、activity1 に 2 秒かかっています。
activity2 を展開します。
action1 に 2 秒、action2 に 2 秒かかっています。
action1 を展開すると、<invoke> にも 2 秒かかったことがわかります。
<invoke> をダブルクリックすると、ProfilerTutorialWorkflow1.xml が開き、次の行が強調表示されます。
<invoke name=’example’ class=’org.example.ProfilerTutorialExample’/> |
ProfilerTutorialExample メソッドの呼び出しに 2 秒かかったことがわかります。
実際には、プロジェクト内のソースではなく、スナップショットに取り込まれた XML ソースを参照しています。スナップショットには必要なものがすべて含まれています。詳細は、「プロファイラがソースを見つけて管理するしくみ」を参照してください。
「CPU:<date><time>」タブを選択して、スナップショットに戻ります。
<invoke> ノードを展開すると、プロファイラが ProfilerTutorialExample.example() Java メソッドで 2 秒消費したことがわかります。
メソッド名をダブルクリックすると、ProfilerTutorialExample.java ソースが開き、次の行が強調表示されます。
Thread.sleep(2000); |
ここに問題があります。このメソッドには 2 秒のスレッドスリープが含まれています。
Call Tree に戻ると、2 秒のパスはすべてこのメソッドにつながっていることがわかります。3 つのパスがあり、合計 6 秒になっています。
「Call Tree」領域の下部にある「Hotspots」タブを選択して、「Hotspots」ビューを開きます。ProfilerTutorialExample.example() の合計セルフタイムは 6 秒になっています。
「Hotspots」の詳細は、「「スナップショットビュー」の操作」を参照してください。
ProfilerTutorialExample.example() を右クリックし、ポップアップメニューから「Show Back Traces」を選択します。
領域の下部に、新しい「Back Traces」タブが表示されます。
「Back Traces」タブで ProfilerTutorialExample.example() ノードを展開すると、このメソッドが 3 箇所から呼び出されたことと、各箇所からの呼び出しに 2 秒かかったことがわかります。
「Back Traces」の詳細は、「「スナップショットビュー」の操作」を参照してください。
「Save the snapshot in the project」アイコンをクリックして、スナップショットを保存して閉じます。
「IDM Profiler」タブの「Saved Snapshot」セクションを確認すると、このスナップショットが表示されるはずです。場合によっては、スクロールダウンする必要があります。
保存したスナップショットを選択し、「Open」をクリックして再度開きます。
「Save As」ボタンを使用するとスナップショットを外部に保存でき、「Load」ボタンを使用するとプロジェクト外部からスナップショットを読み込むことができます。
スナップショットをふたたび閉じます。
このチュートリアルの次の部分では、ワークフロー ManualAction のプロファイルを作成する方法を示します。
Identity Manager で、「サーバータスク」>「タスクの実行」を選択し、ProfilerTutorialWorkflow2 をクリックします。
しばらくすると、空のフォームが表示されます。
「保存」をクリックすると、処理ダイアグラムが表示されます。
「サーバータスク」>「タスクの実行」を再度選択します。
Identity Manager IDE の「IDM Profiler」ビューに戻り、「Profiling Results」セクションの「Reset Collected Results」アイコンをクリックします。
Identity Manager で ProfilerTutorialWorkflow2 をクリックします。
空のフォームが再度表示されたら、「保存」をクリックします。
「IDM Profiler」ビューで、「Take Snapshot」をクリックします。
数秒後、「Call Tree」領域にスナップショットが表示されます。/idm/task/workItemEdit.jsp に 6 秒強かかったことがわかります。この結果は、ワークフローでの手動操作に対応します。
/idm/task/workItemEdit.jsp ノードを展開すると、ManualAction フォーム内のすべての Derivations の実行に合計 6 秒かかったことがわかります。
Derivation、displayNameForm、variables.dummy、および <block> ノードを展開します。
<block> に 6 秒かかったことと、その時間のうちで ProfilerTutorialExample.example() メソッドの 3 回の呼び出しにそれぞれ 2 秒かかったことがわかります。
<block> をダブルクリックすると、ソースを表示できます。
ここでは、オンラインヘルプの記述の修正事項を記載しています。
英語版の『Configure Reports』ヘルプページに次の記述が含まれていますが、これは無視してください。
Fonts should also be added to the JVM in order for graphs to display properly.
この記述は誤りです。PDF レポートでテキストを正しく描画するために、JVM にフォントを追加する必要はありません。