Optaplanner REST API solve issue

641 views Asked by At

We're using Optaplanner 7.0.0 Final work bench and KIE Server with the optacloud example on Wildfly 10.0.0.

So far we have deployed a container to a remote execution server and created a solver for that container using the RESTful API.

Solver details as provided by KIE Server are:

<org.kie.server.api.model.instance.SolverInstanceList>
    <solvers>
        <solver-instance>
            <container-id>test</container-id>
            <solver-id>testsolver</solver-id>
            <solver-config-file>optacloud/optacloud/cloudSolverConfig.solver.xml</solver-config-file>
            <status>NOT_SOLVING</status>
            <score />
         </solver-instance>
    </solvers>
</org.kie.server.api.model.instance.SolverInstanceList>

We are receiving a 405 Method Not Allowed response from wildfly with the following URL:

http://xxx.xxx.xxx.xxx:8080/kie-server-7.0.0.Final-ee7/services/rest/server/containers/test/solvers/testsolver/

Is this URL structure correct or are we missing anything else?

we are posting the following data:

<solver-instance>
  <status>SOLVING</status>
  <planning-problem class="optacloud.optacloud.CloudSolution">
    <computerList>
      <optacloud.optacloud.Computer>
        <cpuPower>10</cpuPower>
        <memory>4</memory>
        <networkBandwidth>100</networkBandwidth>
        <cost>1000</cost>
      </optacloud.optacloud.Computer>
      <optacloud.optacloud.Computer>
        <cpuPower>20</cpuPower>
        <memory>8</memory>
        <networkBandwidth>100</networkBandwidth>
        <cost>3000</cost>
      </optacloud.optacloud.Computer>
    </computerList>
    <processList>
      <optacloud.optacloud.Process>
        <requiredCpuPower>1</requiredCpuPower>
        <requiredMemory>7</requiredMemory>
        <requiredNetworkBandwidth>1</requiredNetworkBandwidth>
      </optacloud.optacloud.Process>
    </processList>
  </planning-problem>
</solver-instance>

with the following headers:

Content-Type: application/xml
X-KIE-ContentType: xstream
1

There are 1 answers

0
Matej Čimbora On BEST ANSWER

The KIE Server API has changed in 7 series and <solver-instance> wrapper is no longer required in the submit solution payload.

You need to send a POST to http://${kie-server}/services/rest/server/containers/${container_id}/solvers/${solver_id}/state/solving where the payload is just a planning problem (solution) object: <planning-problem class="optacloud.optacloud.CloudSolution">...</planning-problem>.

Please see the quickstart https://github.com/kiegroup/kie-docs/blob/master/docs/optaplanner-wb-es-docs/src/main/asciidoc/Workbench/Quickstart/Quickstart-section.adoc#submit-solution containing an example of submitting the planning problem in a new way.

The new API overview:

Register a solver: PUT http://${kie-server}/services/rest/server/containers/${container_id}/solvers/${solver_id}

Submit a solution: POST http://${kie-server}/services/rest/server/containers/${container_id}/solvers/${solver_id}/state/solving

Get the best solution: GET http://${kie-server}/services/rest/server/containers/${container_id}/solvers/${solver_id}/bestsolution

Terminate the solver: POST http://${kie-server}/services/rest/server/containers/${container_id}/solvers/${solver_id}/state/terminating-early

Dispose a solver: DELETE http://${kie-server}/services/rest/server/containers/${container_id}/solvers/${solver_id}