22.3. KIE Server Java クライアント API を使用した要求の例
以下は、KIE Server と基本的な対話を行うための KIE Server Java クライアント API 要求の例です。利用可能な KIE Server Java クライアントの完全一覧については、Red Hat カスタマーポータル から Red Hat Process Automation Manager 7.13.4 Source Distribution をダウンロードして、~/rhpam-7.13.4-sources/src/droolsjbpm-integration-$VERSION/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client に移動してください。
- KIE Server の機能リスト
org.kie.server.api.model.KieServerInfoオブジェクトを使用すると、サーバー機能を特定できます。KieServicesClientクライアントが適切にサービスクライアントを生成するには、サーバー機能の情報が必要です。このケーパビリティーはKieServicesConfigurationでグローバルに指定することができます。指定しない場合は、KIE Server から自動的に取得します。KIE Server ケーパビリティーを返す要求の例
public void listCapabilities() { KieServerInfo serverInfo = kieServicesClient.getServerInfo().getResult(); System.out.print("Server capabilities:"); for (String capability : serverInfo.getCapabilities()) { System.out.print(" " + capability); } System.out.println(); }- KIE Server での KIE コンテナーのリスト
KIE コンテナーは
org.kie.server.api.model.KieContainerResourceオブジェクトで表されます。リソースリストは、org.kie.server.api.model.KieContainerResourceListオブジェクトで表されます。KIE Server から KIE コンテナーを返す要求の例
public void listContainers() { KieContainerResourceList containersList = kieServicesClient.listContainers().getResult(); List<KieContainerResource> kieContainers = containersList.getContainers(); System.out.println("Available containers: "); for (KieContainerResource container : kieContainers) { System.out.println("\t" + container.getContainerId() + " (" + container.getReleaseId() + ")"); } }org.kie.server.api.model.KieContainerResourceFilterクラスのインスタンスを使用して KIE コンテナーの結果をフィルタリングすることもできます。これはorg.kie.server.client.KieServicesClient.listContainers()メソッドに渡されます。リリース ID とステータスごとの KIE コンテナーを返す要求の例
public void listContainersWithFilter() { // Filter containers by releaseId "org.example:container:1.0.0.Final" and status FAILED KieContainerResourceFilter filter = new KieContainerResourceFilter.Builder() .releaseId("org.example", "container", "1.0.0.Final") .status(KieContainerStatus.FAILED) .build(); // Using previously created KieServicesClient KieContainerResourceList containersList = kieServicesClient.listContainers(filter).getResult(); List<KieContainerResource> kieContainers = containersList.getContainers(); System.out.println("Available containers: "); for (KieContainerResource container : kieContainers) { System.out.println("\t" + container.getContainerId() + " (" + container.getReleaseId() + ")"); } }- KIE Server での KIE コンテナーの作成および破棄
KieServicesClientでcreateContainerメソッドおよびdisposeContainerメソッドを使用すると、KIE コンテナーの作成と破棄ができます。この例では、コンテナーを破棄すると、ServiceResponseがVoid応答を返します。コンテナーを作成すると、ServiceResponseがKieContainerResourceオブジェクトを返します。KIE コンテナーを破棄して再作成する要求の例
public void disposeAndCreateContainer() { System.out.println("== Disposing and creating containers =="); // Retrieve list of KIE containers List<KieContainerResource> kieContainers = kieServicesClient.listContainers().getResult().getContainers(); if (kieContainers.size() == 0) { System.out.println("No containers available..."); return; } // Dispose KIE container KieContainerResource container = kieContainers.get(0); String containerId = container.getContainerId(); ServiceResponse<Void> responseDispose = kieServicesClient.disposeContainer(containerId); if (responseDispose.getType() == ResponseType.FAILURE) { System.out.println("Error disposing " + containerId + ". Message: "); System.out.println(responseDispose.getMsg()); return; } System.out.println("Success Disposing container " + containerId); System.out.println("Trying to recreate the container..."); // Re-create KIE container ServiceResponse<KieContainerResource> createResponse = kieServicesClient.createContainer(containerId, container); if(createResponse.getType() == ResponseType.FAILURE) { System.out.println("Error creating " + containerId + ". Message: "); System.out.println(responseDispose.getMsg()); return; } System.out.println("Container recreated with success!"); }- KIE Server でのランタイムコマンドの実行
Red Hat Decision Manager はランタイムコマンドをサポートしています。これは、KIE セッションでオブジェクトを挿入したり取り消したり、全ルールを実行するなどのアセット関連の操作のために KIE Server に送信するものです。サポートされるランタイムコマンドのリストは、Red Hat Decision Manager インスタンスの
org.drools.core.command.runtimeパッケージにあります。コマンドの挿入には
org.kie.api.command.KieCommandsクラスを使用し、KieCommandsクラスのインスタンス化にはorg.kie.api.KieServices.get().getCommands()を使用することもできます。複数のコマンドを追加するには、BatchExecutionCommandラッパーを使用します。オブジェクトの挿入および全ルール実行の要求の例
import org.kie.api.command.Command; import org.kie.api.command.KieCommands; import org.kie.server.api.model.ServiceResponse; import org.kie.server.client.RuleServicesClient; import org.kie.server.client.KieServicesClient; import org.kie.api.KieServices; import java.util.Arrays; ... public void executeCommands() { String containerId = "hello"; System.out.println("== Sending commands to the server =="); RuleServicesClient rulesClient = kieServicesClient.getServicesClient(RuleServicesClient.class); KieCommands commandsFactory = KieServices.Factory.get().getCommands(); Command<?> insert = commandsFactory.newInsert("Some String OBJ"); Command<?> fireAllRules = commandsFactory.newFireAllRules(); Command<?> batchCommand = commandsFactory.newBatchExecution(Arrays.asList(insert, fireAllRules)); ServiceResponse<String> executeResponse = rulesClient.executeCommands(containerId, batchCommand); if(executeResponse.getType() == ResponseType.SUCCESS) { System.out.println("Commands executed with success! Response: "); System.out.println(executeResponse.getResult()); } else { System.out.println("Error executing rules. Message: "); System.out.println(executeResponse.getMsg()); } }注記クライアントとクラスター環境内の特定の KIE Server コンテナーとの対話は、一意の
conversationIDでセキュリティーが保たれます。conversationIDはX-KIE-ConversationIdREST ヘッダーを使用して送信されます。コンテナーを更新する場合は、以前のconversationIDの設定を解除します。KieServiesClient.completeConversation()を使用して Java API のconversationIDを設定解除します。