2.3. KIE Server Java クライアント API を使用した要求の例
以下は、KIE Server と基本的な対話を行うための KIE Server Java クライアント API 要求の例です。利用可能な KIE Server Java クライアントの完全一覧については、Red Hat カスタマーポータル から Red Hat Decision Manager 7.7.0 Source Distribution をダウンロードして、~/rhdm-7.7.0-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を設定解除します。