第13章 Red Hat Business Optimizer REST API の設定


Decision Server は、以下の Red Hat Business Optimizer REST API をサポートします。これらの API は、JMS および Java クライアント API から利用することもできます。

前提条件

Red Hat Decision Manager がインストールされ、kie-server ロールに HTTP 基本認証が設定されている。サーバーエンドポイントのベース URL が識別されている (例: http://SERVER:PORT/CONTEXT/services/rest/server/)。

  1. 特定のマーシャリングフォーマットが必要な場合は、以下のように、HTTP ヘッダー Content-Type と、任意で X-KIE-ContentType を HTTP リクエストに追加します。
Content-Type: application/xml
X-KIE-ContentType: xstream
Copy to Clipboard Toggle word wrap
注記

X-KIE-ContentType の値には、xstreamxmljson を設定することができます。

以下の例に示すリクエストおよび応答は、KIE コンテナーが Decision Central の従業員勤務表サンプルを使用してビルドされる前提です (/services/rest/server/containers/employee-rosteringPUT リクエストを呼び出すと、以下の応答が返されます)。

<kie-container container-id="employee-rostering">
  <release-id>
    <group-id>employeerostering</group-id>
    <artifact-id>employeerostering</artifact-id>
    <version>1.0.0-SNAPSHOT</version>
  </release-id>
</kie-container>
Copy to Clipboard Toggle word wrap

13.1. [GET] /containers

作成されたコンテナーの一覧を返します。

例13.1 サーバー応答の例 (XStream)

<response type="SUCCESS" msg="List of created containers">
  <result class="kie-containers">
    <kie-container>
      <container-id>employee-rostering</container-id>
        <release-id>
          <group-id>employeerostering</group-id>
          <artifact-id>employeerostering</artifact-id>
          <version>1.0.0-SNAPSHOT</version>
        </release-id>
        <resolved-release-id>
          <group-id>employeerostering</group-id>
          <artifact-id>employeerostering</artifact-id>
          <version>1.0.0-SNAPSHOT</version>
        </resolved-release-id>
        <status>STARTED</status>
        <scanner>
          <status>DISPOSED</status>
        </scanner>
    </kie-container>
  </result>
</response>
Copy to Clipboard Toggle word wrap

13.2. [PUT] /containers/{containerId}/solvers/{solverId}

コンテナー {containerId} に、指定の {solverId} で新しいソルバーを作成します。リクエストボディーはマーシャリングされた SolverInstance エンティティーになり、ソルバーの設定ファイルを指定する必要があります。

リクエストとそれに対応する応答の例を以下に示します。

例13.2 サーバーリクエストの例 (XStream)

<solver-instance>
  <solver-config-file>employeerostering/employeerostering/EmployeeRosteringSolverConfig.solver.xml</solver-config-file>
</solver-instance>
Copy to Clipboard Toggle word wrap

例13.3 サーバー応答の例 (XStream)

<solver-instance>
  <container-id>employee-rostering</container-id>
  <solver-id>solver1</solver-id>
  <solver-config-file>employeerostering/employeerostering/EmployeeRosteringSolverConfig.solver.xml</solver-config-file>
  <status>NOT_SOLVING</status>
  <score/>
</solver-instance>
Copy to Clipboard Toggle word wrap

13.3. [GET] /containers/{containerId}/solvers

コンテナーで作成したソルバーの一覧を返します。

例13.4 サーバー応答の例 (XStream)

<org.kie.server.api.model.instance.SolverInstanceList>
  <solvers>
    <solver-instance>
      <container-id>employee-rostering</container-id>
      <solver-id>solver1</solver-id>
      <solver-config-file>employeerostering/employeerostering/EmployeeRosteringSolverConfig.solver.xml</solver-config-file>
      <status>NOT_SOLVING</status>
      <score/>
    </solver-instance>
  </solvers>
</org.kie.server.api.model.instance.SolverInstanceList>
Copy to Clipboard Toggle word wrap

13.4. [GET] /containers/{containerId}/solvers/{solverId}

コンテナー {containerId} のソルバー {solverId} に関する現在の状態を返します。

例13.5 サーバー応答の例 (XStream)

<solver-instance>
  <container-id>employee-rostering</container-id>
  <solver-id>solver1</solver-id>
  <solver-config-file>employeerostering/employeerostering/EmployeeRosteringSolverConfig.solver.xml</solver-config-file>
  <status>NOT_SOLVING</status>
  <score/>
</solver-instance>
Copy to Clipboard Toggle word wrap

13.5. [POST] /containers/{containerId}/solvers/{solverId}/state/solving

コンテナー {containerId} のソルバー {solverId} がまだ実行中でなければ、そのソルバーを起動します。リクエストボディーは最適化する PlanningSolution をマーシャリングしたものです。

以下は、2 台のコンピューターと 6 つのプロセスに関する OptaCloud の問題を解決する例です。ソルバーは同期せずに実行されます。最善解を取得するために、bestsolution URL にリクエストを送信します。

例13.6 サーバーリクエストの例 (XStream)

<employeerostering.employeerostering.EmployeeRoster>
  <employeeList>
    <employeerostering.employeerostering.Employee>
      <name>John</name>
      <skills>
        <employeerostering.employeerostering.Skill>
          <name>reading</name>
        </employeerostering.employeerostering.Skill>
      </skills>
    </employeerostering.employeerostering.Employee>
    <employeerostering.employeerostering.Employee>
      <name>Mary</name>
      <skills>
        <employeerostering.employeerostering.Skill>
          <name>writing</name>
        </employeerostering.employeerostering.Skill>
      </skills>
    </employeerostering.employeerostering.Employee>
    <employeerostering.employeerostering.Employee>
      <name>Petr</name>
      <skills>
        <employeerostering.employeerostering.Skill>
          <name>speaking</name>
        </employeerostering.employeerostering.Skill>
      </skills>
    </employeerostering.employeerostering.Employee>
  </employeeList>
  <shiftList>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-01T00:00:00</startTime>
        <endTime>2017-01-01T01:00:00</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot reference="../../employeerostering.employeerostering.Shift/timeslot"/>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot reference="../../employeerostering.employeerostering.Shift/timeslot"/>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[2]/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
  </shiftList>
  <skillList>
    <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
    <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
    <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee[2]/skills/employeerostering.employeerostering.Skill"/>
  </skillList>
  <timeslotList>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift/timeslot"/>
  </timeslotList>
  <dayOffRequestList/>
  <shiftAssignmentList/>
</employeerostering.employeerostering.EmployeeRoster>
Copy to Clipboard Toggle word wrap

13.6. [POST] /containers/{containerId}/solvers/{solverId}/state/terminating-early

ソルバーが実行中の場合は、ソルバーに早期の終了をリクエストします。ソルバーは削除されないため、引き続き最善解を取得することができます。

13.7. [GET] /containers/{containerId}/solvers/{solverId}/bestsolution

リクエストの作成時に見つかった最善解を返します。ソルバーがまだ終了していない (つまり status フィールドは SOLVING のまま) 場合は、その時点での最善解を返しますが、後のコールでより良い解が返される可能性もあります。

例13.7 サーバー応答の例 (XStream)

<solver-instance>
  <container-id>employee-rostering</container-id>
  <solver-id>solver1</solver-id>
  <solver-config-file>employeerostering/employeerostering/EmployeeRosteringSolverConfig.solver.xml</solver-config-file>
  <status>NOT_SOLVING</status>
  <score scoreClass="org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore">0hard/0soft</score>
  <best-solution class="employeerostering.employeerostering.EmployeeRoster">
    <employeeList>
      <employeerostering.employeerostering.Employee>
        <name>John</name>
        <skills>
          <employeerostering.employeerostering.Skill>
            <name>reading</name>
          </employeerostering.employeerostering.Skill>
        </skills>
      </employeerostering.employeerostering.Employee>
      <employeerostering.employeerostering.Employee>
        <name>Mary</name>
        <skills>
          <employeerostering.employeerostering.Skill>
            <name>writing</name>
          </employeerostering.employeerostering.Skill>
        </skills>
      </employeerostering.employeerostering.Employee>
      <employeerostering.employeerostering.Employee>
        <name>Petr</name>
        <skills>
          <employeerostering.employeerostering.Skill>
            <name>speaking</name>
          </employeerostering.employeerostering.Skill>
        </skills>
      </employeerostering.employeerostering.Employee>
    </employeeList>
    <shiftList>
      <employeerostering.employeerostering.Shift>
        <timeslot>
          <startTime>2017-01-01T00:00:00</startTime>
          <endTime>2017-01-01T01:00:00</endTime>
        </timeslot>
        <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
      </employeerostering.employeerostering.Shift>
      <employeerostering.employeerostering.Shift>
        <timeslot reference="../../employeerostering.employeerostering.Shift/timeslot"/>
        <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
      </employeerostering.employeerostering.Shift>
      <employeerostering.employeerostering.Shift>
        <timeslot reference="../../employeerostering.employeerostering.Shift/timeslot"/>
        <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[2]/skills/employeerostering.employeerostering.Skill"/>
      </employeerostering.employeerostering.Shift>
    </shiftList>
    <skillList>
      <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
      <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
      <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee[2]/skills/employeerostering.employeerostering.Skill"/>
    </skillList>
    <timeslotList>
      <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift/timeslot"/>
    </timeslotList>
    <dayOffRequestList/>
    <shiftAssignmentList/>
    <score>0hard/0soft</score>
  </best-solution>
</solver-instance>
Copy to Clipboard Toggle word wrap

13.8. [POST] /containers/{containerId}/solvers/{solverId}/problemfactchanges

リアルタイムプランニング機能。1 つまたは複数の ProblemFactChanges を送信して、現在ソルバーが最適化中のデータセットを更新します。

13.9. [GET] /containers/{containerId}/solvers/{solverId}/problemfactchanges/processed

リアルタイムプランニング機能。ソルバーが送信されているすべての ProblemFactChanges を処理したら、true を返します。そうでない場合は、false を返します。

13.10. [DELETE] /containers/{containerId}/solvers/{solverId}

コンテナー {containerId} のソルバー {solverId} を破棄します。ソルバーがまだ終了していない場合は、終了してから破棄を行います。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る