2.3. Process Server Java クライアント API を使ったリクエストの例


以下は、Process Server との基本的な対話のための Process Server Java クライアント API 要求の例です。利用可能な Process Server Java クライアントの完全一覧については、Red Hat カスタマーポータル から Red Hat Process Automation Manager 7.2.0 Source Distribution をダウンロードして 、~/rhpam-7.2.0-sources/src/droolsjbpm-integration-$VERSION/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client に移動してください。

Process Server の機能一覧

org.kie.server.api.model.KieServerInfo オブジェクトを使用すると、サーバー機能を特定できます。KieServicesClient クライアントが適切にサービスクライアントを生成するには、サーバー機能の情報が必要です。機能は KieServicesConfiguration でグローバルに指定することができます。指定しない場合は、Process Server から自動的に取得されます。

Process 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();
}
Copy to Clipboard Toggle word wrap

Process Server での KIE コンテナーの一覧

KIE コンテナーは org.kie.server.api.model.KieContainerResource オブジェクトで表されます。リソース一覧は、org.kie.server.api.model.KieContainerResourceList オブジェクトで表されます。

Process 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() + ")");
    }
}
Copy to Clipboard Toggle word wrap

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() + ")");
    }
}
Copy to Clipboard Toggle word wrap

Process Server での KIE コンテナーの作成および破棄

KieServicesClientcreateContainer メソッドおよび disposeContainer メソッドを使用すると、KIE コンテナーの作成と破棄ができます。この例では、コンテナーを破棄すると、ServiceResponseVoid 応答を返します。コンテナーを作成すると、ServiceResponseKieContainerResource オブジェクトを返します。

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!");
}
Copy to Clipboard Toggle word wrap

Process Server でのランタイムコマンドの実行

Red Hat Process Automation Manager はランタイムコマンドをサポートしています。サポートされるランタイムコマンドの全一覧は、Red Hat Process Automation 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());
  }
}
Copy to Clipboard Toggle word wrap

注記

クライアントとクラスター環境内の特定の Process Server コンテナーとの対話は、一意の conversationID で安全が確保れています。conversationIDX-KIE-ConversationId REST ヘッダーを使用して送信されます。コンテナーを更新する場合は、以前の conversationID の設定を解除します。KieServiesClient.completeConversation() を使用して Java API の conversationID を設定解除します。

KIE コンテナーで利用可能なビジネスプロセスの一覧

QueryServicesClient クライアントを使用すると、利用可能なプロセス定義を一覧表示できます。QueryServicesClient メソッドはページネーションを使用するため、実行するクエリーの他に現在のページと 1 ページごとの結果数を提供する必要があります。この例では、クエリーはページ 0 から始まり、最初の 1000 件の結果を表示します。

Process Server でのビジネスプロセス一覧リクエストの例

public void listProcesses() {
    System.out.println("== Listing Business Processes ==");
    QueryServicesClient queryClient = kieServicesClient.getServicesClient(QueryServicesClient.class);
    List<ProcessDefinition> findProcessesByContainerId = queryClient.findProcessesByContainerId("rewards", 0, 1000);
    for (ProcessDefinition def : findProcessesByContainerId) {
        System.out.println(def.getName() + " - " + def.getId() + " v" + def.getVersion());
    }
}
Copy to Clipboard Toggle word wrap

KIE コンテナーでのビジネスプロセスの開始

ProcessServicesClient クライアントを使用してビジネスプロセスを開始します。プロセスに必要なカスタムクラスは addExtraClasses() メソッドを使用してKieServicesConfiguration オブジェクトに追加してください。

ビジネスプロセスを開始する要求の例

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.client.KieServicesClient;
import org.kie.server.client.KieServicesConfiguration;
import org.kie.server.client.KieServicesFactory;
import org.kie.server.client.ProcessServicesClient;
...

public static void startProcess() {

  //Client configuration setup
  KieServicesConfiguration config = KieServicesFactory.newRestConfiguration(SERVER_URL, LOGIN, PASSWORD);

  //Add custom classes, such as Obj.class, to the configuration
  Set<Class<?>> extraClassList = new HashSet<Class<?>>();
  extraClassList.add(Obj.class);
  config.addExtraClasses(extraClassList);
  config.setMarshallingFormat(MarshallingFormat.JSON);

  // ProcessServicesClient setup
  KieServicesClient client = KieServicesFactory.newKieServicesClient(config);
  ProcessServicesClient processServicesClient = client.getServicesClient(ProcessServicesClient.class);

  // Create an instance of the custom class
  Obj obj = new Obj();
  obj.setOk("ok");

  Map<String, Object> variables = new HashMap<String, Object>();
  variables.put("test", obj);

  // Start the process with custom class
  processServicesClient.startProcess(CONTAINER, processId, variables);
}
Copy to Clipboard Toggle word wrap

カスタムクエリーの実行

QueryServicesClient クライアントの QueryDefinition オブジェクトを使用して、Process Server でカスタムクエリーを登録、実行します。

Process Server でのカスタムクエリー登録、実行リクエストの例

// Client setup
KieServicesConfiguration conf = KieServicesFactory.newRestConfiguration(SERVER_URL, LOGIN, PASSWORD);
KieServicesClient client = KieServicesFactory.newKieServicesClient(conf);

// Get the QueryServicesClient
QueryServicesClient queryClient = client.getServicesClient(QueryServicesClient.class);

// Build the query
QueryDefinition queryDefinition = QueryDefinition.builder().name(QUERY_NAME)
        .expression("select * from Task t")
        .source("java:jboss/datasources/ExampleDS")
        .target("TASK").build();

// Specify that two queries cannot have the same name
queryClient.unregisterQuery(QUERY_NAME);

// Register the query
queryClient.registerQuery(queryDefinition);

// Execute the query with parameters: query name, mapping type (to map the fields to an object), page number, page size, and return type
List<TaskInstance> query = queryClient.query(QUERY_NAME, QueryServicesClient.QUERY_MAP_TASK, 0, 100, TaskInstance.class);

// Read the result
for (TaskInstance taskInstance : query) {
    System.out.println(taskInstance);
}
Copy to Clipboard Toggle word wrap

この例では、target がクエリーサービスにデフォルトフィルターを適用するように指示しています。別の方法では、フィルターのパラメーターを手動で設定することもできます。Target クラスは以下の値をサポートしています。

public enum Target {
    PROCESS,
    TASK,
    BA_TASK,
    PO_TASK,
    JOBS,
    CUSTOM;
}
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat