複数の CIMClient API 呼び出しを単一のリモート呼び出しとしてバッチ処理することにより、複数のリモートメッセージ交換による遅延を軽減できます。BatchCIMClient クラスのインスタンスを使用して、バッチ要求内で実行する操作のリストを作成できます。次に、CIMClient クラスの performBatchOperations メソッドを使用して、CIM オブジェクトマネージャに操作のリストを送信します。
バッチ操作は、単一のトランザクションを意味するわけではありません。バッチ内の個々の操作間に依存関係はありません。前の操作の成功または失敗が、後続の操作に影響を及ぼすことはありません。
BatchCIMClient クラスには、非バッチモードと同じ CIM 操作を実行できるメソッドが含まれます。これらのメソッドは、CIMClient メソッドとよく似ています。ただし、BatchCIMClient メソッドによって返される型は、CIMClient クラス内の同等のメソッドが返す型とは異なります。これは、バッチ操作の完了後に、リストとして値が返されるからです。このメソッドは、整数の操作 ID を返します。この ID を使用して、操作の結果をあとで取得できます。BatchCIMClient のメソッドが呼び出されると、BatchCIMClient オブジェクトは、後で実行される CIMOperation オブジェクトのリストを作成します。
クライアントは、CIMClient の performBatchOperations メソッドを呼び出すことにより、バッチ操作を実行します。バッチ操作の結果は、BatchResult オブジェクト内に返されます。次に、クライアントは、操作 ID を BatchResult クラスの getResult メソッドに渡して、操作の結果を取得します。リスト内の操作により例外が発生すると、BatchResult オブジェクトに例外オブジェクトが埋め込まれます。失敗した操作 ID を使用する getResult メソッドを起動すると、getResult メソッドにより例外がスローされます。
次の例は、バッチ処理 API を使用して、1 つのリモート呼び出し内で複数の操作を実行する方法を示します。3 つの操作を単一のバッチ操作として実行します。3 つの操作の内容は、enumerateInstanceNames、getClass、enumerateInstances です。
import java.util.Enumeration; import java.util.ArrayList; import java.util.Vector; import java.lang.String; import javax.wbem.cim.*; import javax.wbem.client.*; import javax.wbem.client.UserPrincipal; import javax.wbem.client.PasswordCredential; public class TestBatch { public static void main(String args[]) throws CIMException { CIMClient cc = null; CIMObjectPath cop = null; String protocol = CIMClient.CIM_RMI; if (args.length < 4) { System.out.println("Usage: TestBatch host user passwd classname " + "[rmi|http]"); System.exit(1); } try { CIMNameSpace cns = new CIMNameSpace(args[0]); UserPrincipal up = new UserPrincipal(args[1]); PasswordCredential pc = new PasswordCredential(args[2]); if (args.length == 5 && args[4].equalsIgnoreCase("http")) { protocol = CIMClient.CIM_XML; } cc = new CIMClient(cns, up, pc, protocol); CIMObjectPath op = new CIMObjectPath(args[3]); BatchCIMClient bc = new BatchCIMClient(); int[] ids = new int[3]; ids[0] = bc.enumerateInstanceNames(op); ids[1] = bc.getClass(op, false, true, true, null); ids[2] = bc.enumerateInstances(op, true, false, false, false, null); BatchResult br = cc.performBatchOperations(bc); Enumeration instanceNames = (Enumeration)br.getResult (ids[0]); CIMClass cl = (CIMClass)br.getResult(ids[1]); Enumeration instances = (Enumeration)br.getResult(ids[2]); while (instanceNames.hasMoreElements()) { System.out.println((CIMObjectPath)instanceNames. nextElement()); } System.out.println(cl.toMOF()); while (instances.hasMoreElements()) { System.out.println((CIMInstance)instances. nextElement()); } } catch (Exception e) { e.printStackTrace(); System.out.println("Exception: "+e); } // セッションの終了 if (cc != null) { cc.close(); } } }