複数の 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();
}
}
}