第12章 短い例
CLI スクリプトは、イベントの特定のフローに従います。リソースやオブジェクトの検索、オペレーションの実行など、そのワークフロー内の各機能要素は、リモート API に独自のクラスを持ちます。
JBoss ON CLI スクリプトのほとんどのアクションは繰り返し可能です。プラットフォームの検索を実行するか、メトリックのライブデータを取得する部分は、CLI スクリプトで非常に似ています。
本セクションでは、1 つの特定の機能タスクを実行する基本的な例を紹介します。これらのスクリプトサンプルは、大規模なスクリプトワークフローで一貫して使用でき、タスク自動化の一部として使用できます。
12.1. 検索 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
すべてのオブジェクトマネージャーは、データ取得の操作を定義します。ほとんどのマネージャーはデータ取得の 基準ベース の操作を定義します。つまり、検索は JBoss ON オブジェクト内の属性を基にできます。
基準ベースの検索には、フォームにメソッドが含まれる
find
オブジェクトByCriteria
そのため、リソース find メソッドは以下のようになります。 findResourcesByCriteria
グループの検索方法は findResourceGroupsByCriteria
.
検索は、対応する JPA-QL クエリーに変換されます。
org.rhq.core.domain.criteria パッケージに存在する基準クラス。
12.1.1. 基本検索基準の設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
最も簡単な基準は、追加の検索パラメーターを使用せずに、リソースタイプなどのものに基づいて結果を定義することです。
たとえば、リソースタイプや ID で制限するフィルターがないため、これによりインベントリー内のコミットされたリソースがすべて取得されます。
Which
findResourcesByCriteria()
は、検索を実行するもの、 pretty.print
結果を表示するには、メソッドが必要です。
この基本基準検索は、以下の JPA-QL クエリーに変換されます。
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
SELECT r
FROM Resource r
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
12.1.2. ソートの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
基本的な検索基準を調整して、リソースの結果をプラグインでソートできるようにします。
ソートを追加するには、呼び出します。
criteria.addSortPluginName()
.ソート基準には、フォームにメソッドが含まれる AddSortXXX(PageOrdering order)
.
例:
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() rhqadmin@localhost:7080$ criteria.addSortPluginName(PageOrdering.ASC) // adds a sort order to the results rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria()
rhqadmin@localhost:7080$ criteria.addSortPluginName(PageOrdering.ASC) // adds a sort order to the results
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
この基準は以下の JPA-QL クエリーに変換されます。
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED ) ORDER BY r.resourceType.plugin ASC
SELECT r
FROM Resource r
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED )
ORDER BY r.resourceType.plugin ASC
12.1.3. フィルターの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
この例のリソース名など、追加の一致する基準を追加すると、検索結果をさらに絞り込むことができます。フィルタリングをすべての基準に追加するには、フォームのメソッドを使用します。
addFilterXXX()
.
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server') // a search filter rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria()
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server') // a search filter
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
結果として、JPA-QL クエリーは以下のようになります。
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
SELECT r
FROM Resource r
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
このコードはインベントリー内のすべての JBoss サーバーを取得します。1 つの検索で使用するフィルターが複数になる可能性があります。たとえば、特定のエージェントによって登録された JBoss サーバーを検索します。
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server') rhqadmin@localhost:7080$ criteria.addFilterAgentName('localhost.localdomain') rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria()
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ criteria.addFilterAgentName('localhost.localdomain')
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
これにより、以下の JPA-QL クエリーが生成されます。
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.agent.name ) like 'localhost.localdomain' ESCAPE '\\' )
SELECT r
FROM Resource r
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
AND LOWER( r.agent.name ) like 'localhost.localdomain' ESCAPE '\\' )
12.1.4. 関連付けの取得 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
関連付け は、親および子リソースの階層を示します。リソースを取得したら、特別な フェッチ メソッドを使用して、関連する親リソースまたは子リソースを表示できます。
指定のサーバーに子リソースがある場合でも、検索後に子の一覧を出力すると失敗します。
...8<... rhqadmin@localhost:7080$ resource = resources.get(0) rhqadmin@localhost:7080$ if (resource.childResources == null) print('no child resources')
...8<...
rhqadmin@localhost:7080$ resource = resources.get(0)
rhqadmin@localhost:7080$ if (resource.childResources == null) print('no child resources')
そのため、1 対多の関連において、レイジーロードがドメインレイヤー全体で使用されます。子リソースは遅延的にロードされるため、子のリストは検索基準でフェッチとして明示的に設定する必要があります。
例:
この出力は、その出力によって異なります。これらは JBoss ON サーバーの子リソースです。生成される JPA-QL クエリーは以下のようになります。
SELECT r FROM Resource r LEFT JOIN FETCH r.childResources WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
SELECT r
FROM Resource r
LEFT JOIN FETCH r.childResources
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
12.1.5. ページサイズの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ほとんどの検索では、ページ化された結果のリストが返されます。デフォルトでは、ページ化された結果は 200 エントリーに制限されます。たとえば、インベントリーのすべてのリソースを返そうとすると、最初の 200 リソースのみが返されますが、データベースを直接クエリーすると、複数のリソースが返される可能性があります。
The
条件
クラスは、検索結果のページサイズを制御するために使用できるメソッドを定義します。
例12.1 ページサイズの消去
200 を超える結果がある場合は、一致するすべてのリソースを 1 つの結果セットに含める必要がある場合は、ページ制限を以下で消去することができます。
clearPaging
var criteria = new ResourceCriteria() criteria.clearPaging() var resources = ResourceManager.findResourcesByCriteria(criteria)
var criteria = new ResourceCriteria()
criteria.clearPaging()
var resources = ResourceManager.findResourcesByCriteria(criteria)
例12.2 ページサイズの設定
異なるページ制限を使用する必要がある場合がありますが、明確さや制御のために、ページングを有効にする必要があります。
The
setPaging
method は、指定の検索のページ数とページサイズを設定します。通常、ページは 1 つのみであるため、ページ番号は 0 に設定され、必要に応じてページサイズをリセットできます。