Windchill キューによるカスタマイズ
Windchill キューを使用すると、バックグラウンドで実行可能な優先度の低い作業をスケジューリングできます。多くの OOTB Windchill サービスは、優先度の低い作業アクティビティのためにキューを作成して使用します。これらの機能は、ユーザーカスタマイズでも使用できます。
Windchill のセキュリティや堅牢性をさらに向上させるための取り組みの一環として、すべてのパブリックキュー API にアクセス制御チェックが追加されました。このため、(キューを使用する) 将来的なすべてのカスタマイズでは、キューサービスに対するすべての呼び出しで、まず管理者を設定するか、またはアクセス制御を使用しないようにする必要があります。そのように設定されていない場合は、権限なしの例外が生成されます。
サンプルコード
管理者を設定する場合には、次のコードパターンに従う必要があります。
SessionContext previous = SessionContext.newContext();
try {
SessionHelper.manager.setAdministrator();
// make calls to Queue Service
}
finally {
SessionContext.setContext(previous);
}
アクセス制御を使用しないようにする場合には、次のコードパターンに従う必要があります。
boolean previous = SessionServerHelper.manager.setAccessEnforce(false);
try {
// make calls to Queue Service
}
finally {
SessionServerHelper.manager.setAccessEnforced(previous);
}
大規模なシリアル化されたキュー引数によるパフォーマンスへの影響
Windchill のキューエントリ引数は、多くの場合、シリアル化された Java オブジェクトとしてデータベースに BLOB 型で保存されます。これらのオブジェクトが大きい場合、次のようにシステムパフォーマンスに悪影響を及ぼす可能性があります。
• キュー処理の速度低下 - 大規模な BLOB は逆シリアル化に時間がかかり、タスクの実行に遅延が生じます。
• メモリ使用量の増加 - 大規模なオブジェクトの逆シリアル化ではより多くのヒープ領域が消費されるため、頻繁なガベージコレクションや、潜在的なメモリの問題を引き起こします。
• UI およびシステムのパフォーマンス低下 - キュー処理の負荷が高くなると、UI のレンダリングやシステム全体の応答性が低下する可能性があります。
キューエントリ引数設定のベストプラクティス
• キュー引数を小さくする - ターゲットサイズが数メガバイト未満になるようにします。これにより、メモリのオーバーヘッドが削減され、処理効率が向上します。
• 大規模なデータを直接渡さないようにする - Map、List、またはカスタムオブジェクトなどの大規模なデータ構造をシリアル化して渡さないようにします。大規模なシリアル化されたオブジェクトは、パフォーマンスのボトルネックを引き起こす可能性があります。
• 進化可能で永続可能なオブジェクトを使用する - 複雑なデータや大規模なデータを、Windchill の進化可能で永続可能なオブジェクトとしてモデル化します。これらのオブジェクトはバージョン管理され、永続可能であり、互換性を損なうことなく進化するように設計されています。
• 完全なオブジェクトの代わりにオブジェクト参照を渡す - ObjectReference を使用して永続可能オブジェクトを参照します。これにより、キューエントリが軽量に保たれ、必要なときにのみデータを取得できるようになります。