This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 2a00a7f  CAMEL-16194- upgrade Optaplanner to 8.x (#5092)
2a00a7f is described below

commit 2a00a7f44605da805730ddd2c02fe4abae939a5d
Author: Zineb BENDHIBA <bendhiba.zi...@gmail.com>
AuthorDate: Tue Feb 16 06:03:22 2021 +0100

    CAMEL-16194- upgrade Optaplanner to 8.x (#5092)
---
 .../optaplanner/OptaPlannerConstants.java          |  1 -
 .../component/optaplanner/OptaPlannerProducer.java | 32 ++++++++--------------
 .../optaplanner/OptaPlannerAsyncSolverTest.java    |  8 ++++--
 .../optaplanner/OptaPlannerDaemonSolverTest.java   |  8 ++++--
 parent/pom.xml                                     |  2 +-
 5 files changed, 23 insertions(+), 28 deletions(-)

diff --git 
a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConstants.java
 
b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConstants.java
index 40ee6d4..fe1c6a3 100644
--- 
a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConstants.java
+++ 
b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConstants.java
@@ -21,7 +21,6 @@ public interface OptaPlannerConstants {
     String SOLVER_ID = "CamelOptaPlannerSolverId";
     String IS_ASYNC = "CamelOptaPlannerIsAsync";
     String BEST_SOLUTION = "CamelOptaPlannerBestSolution";
-    String TIME_SPENT = "CamelOptaPlannerTimeSpent";
     String IS_SOLVING = "CamelOptaPlannerIsSolving";
     String IS_TERMINATE_EARLY = "CamelOptaPlannerIsTerminateEarly";
     String IS_EVERY_PROBLEM_FACT_CHANGE_PROCESSED = 
"CamelOptaPlannerIsEveryProblemFactChangeProcessed";
diff --git 
a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerProducer.java
 
b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerProducer.java
index 14ef509..75507b0 100644
--- 
a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerProducer.java
+++ 
b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerProducer.java
@@ -23,11 +23,10 @@ import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.optaplanner.core.api.domain.solution.PlanningSolution;
-import org.optaplanner.core.api.domain.solution.Solution;
+import org.optaplanner.core.api.solver.ProblemFactChange;
 import org.optaplanner.core.api.solver.Solver;
 import org.optaplanner.core.api.solver.SolverJob;
 import org.optaplanner.core.api.solver.SolverManager;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -87,19 +86,13 @@ public class OptaPlannerProducer extends 
DefaultAsyncProducer {
     }
 
     /**
-     *
      * @param  exchange
      * @param  body
      * @throws Exception
      */
     private void processWithXmlFile(Exchange exchange, Object body) throws 
Exception {
         final String solverId = getSolverId(exchange);
-        /*
-         * Keep for backward compatibility untill optaplanner version 8.0.0 not
-         * released After that the code '|| body instanceof Solution' need to 
be
-         * removed
-         */
-        if (body.getClass().isAnnotationPresent(PlanningSolution.class) || 
body instanceof Solution) {
+        if (body.getClass().isAnnotationPresent(PlanningSolution.class)) {
             if (isAsync(exchange)) {
                 LOGGER.debug("Asynchronously solving problem: [{}] with id 
[{}]", body, solverId);
                 final Solver<Object> solver = 
endpoint.getOrCreateSolver(solverId);
@@ -119,8 +112,8 @@ public class OptaPlannerProducer extends 
DefaultAsyncProducer {
                 if (solver == null) {
                     solver = endpoint.createSolver();
                 }
-                solver.solve(body);
-                populateResult(exchange, solver);
+                Object solution = solver.solve(body);
+                populateResult(exchange, solver, solution);
             }
         } else if (body instanceof ProblemFactChange) {
             LOGGER.debug("Adding ProblemFactChange to solver: [{}] with id 
[{}]", body, solverId);
@@ -131,14 +124,12 @@ public class OptaPlannerProducer extends 
DefaultAsyncProducer {
                     
Thread.sleep(OptaPlannerConstants.IS_EVERY_PROBLEM_FACT_CHANGE_DELAY);
                 }
             }
-            populateResult(exchange, solver);
+            populateResult(exchange, solver, null);
         } else {
-            LOGGER.debug("Retrieving best score for solver: [{}]", solverId);
-            Solver<Object> solver = endpoint.getSolver(solverId);
-            if (solver == null) {
-                throw new RuntimeException("Solver not found: " + solverId);
-            }
-            populateResult(exchange, solver);
+            exchange.setException(new Exception(
+                    "Unsuported type. Body must be of Type PlanningSolution or 
ProblemFactChange. To get the Best Result from the async Solver,"
+                                                +
+                                                " use the camel optaplanner 
consumer"));
         }
     }
 
@@ -193,9 +184,8 @@ public class OptaPlannerProducer extends 
DefaultAsyncProducer {
         exchange.getIn().setHeader(OptaPlannerConstants.IS_SOLVING, false);
     }
 
-    private void populateResult(Exchange exchange, Solver<Object> solver) {
-        exchange.getIn().setBody(solver.getBestSolution());
-        exchange.getIn().setHeader(OptaPlannerConstants.TIME_SPENT, 
solver.getTimeMillisSpent());
+    private void populateResult(Exchange exchange, Solver<Object> solver, 
Object solution) {
+        exchange.getIn().setBody(solution);
         
exchange.getIn().setHeader(OptaPlannerConstants.IS_EVERY_PROBLEM_FACT_CHANGE_PROCESSED,
                 solver.isEveryProblemFactChangeProcessed());
         exchange.getIn().setHeader(OptaPlannerConstants.IS_TERMINATE_EARLY, 
solver.isTerminateEarly());
diff --git 
a/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerAsyncSolverTest.java
 
b/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerAsyncSolverTest.java
index dc3062e..ee46cbe 100644
--- 
a/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerAsyncSolverTest.java
+++ 
b/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerAsyncSolverTest.java
@@ -16,7 +16,9 @@
  */
 package org.apache.camel.component.optaplanner;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 import org.optaplanner.examples.cloudbalancing.domain.CloudBalance;
@@ -34,7 +36,8 @@ public class OptaPlannerAsyncSolverTest extends 
CamelTestSupport {
 
     @Test
     public void testAsynchronousProblemSolving() throws Exception {
-        getMockEndpoint("mock:result").setExpectedCount(1);
+        MockEndpoint mockEndpoint = getMockEndpoint("mock:result");
+        mockEndpoint.setExpectedCount(1);
         CloudBalancingGenerator generator = new CloudBalancingGenerator(true);
         final CloudBalance planningProblem = generator.createCloudBalance(4, 
12);
         assertNull(planningProblem.getScore());
@@ -43,7 +46,8 @@ public class OptaPlannerAsyncSolverTest extends 
CamelTestSupport {
         template.requestBody("direct:in", planningProblem);
         getMockEndpoint("mock:result").assertIsSatisfied();
 
-        CloudBalance bestSolution = (CloudBalance) 
template.requestBody("direct:in", "foo");
+        Exchange exchange = mockEndpoint.getReceivedExchanges().get(0);
+        CloudBalance bestSolution = 
exchange.getMessage().getHeader(OptaPlannerConstants.BEST_SOLUTION, 
CloudBalance.class);
 
         assertEquals(4, bestSolution.getComputerList().size());
         assertEquals(12, bestSolution.getProcessList().size());
diff --git 
a/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerDaemonSolverTest.java
 
b/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerDaemonSolverTest.java
index da3e253..25b09c4 100644
--- 
a/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerDaemonSolverTest.java
+++ 
b/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerDaemonSolverTest.java
@@ -20,12 +20,13 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Objects;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
+import org.optaplanner.core.api.score.director.ScoreDirector;
+import org.optaplanner.core.api.solver.ProblemFactChange;
 import org.optaplanner.examples.cloudbalancing.domain.CloudBalance;
 import org.optaplanner.examples.cloudbalancing.domain.CloudComputer;
 import org.optaplanner.examples.cloudbalancing.domain.CloudProcess;
@@ -59,7 +60,8 @@ public class OptaPlannerDaemonSolverTest extends 
CamelTestSupport {
         template.requestBody("direct:in", new 
RemoveComputerChange(firstComputer));
 
         mockEndpoint.assertIsSatisfied();
-        CloudBalance bestSolution = (CloudBalance) 
template.requestBody("direct:in", "foo");
+        Exchange exchange = mockEndpoint.getReceivedExchanges().get(0);
+        CloudBalance bestSolution = 
exchange.getMessage().getHeader(OptaPlannerConstants.BEST_SOLUTION, 
CloudBalance.class);
         assertEquals(3, bestSolution.getComputerList().size());
     }
 
diff --git a/parent/pom.xml b/parent/pom.xml
index 6234908..85466b1 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -445,7 +445,7 @@
         <!-- cannot upgrade opentracing until 
https://github.com/eclipse/microprofile-opentracing v2 is released -->
         <opentracing-version>0.31.0</opentracing-version>
         
<opentracing-tracerresolver-version>0.1.8</opentracing-tracerresolver-version>
-        <optaplanner-version>7.49.0.Final</optaplanner-version>
+        <optaplanner-version>8.2.0.Final</optaplanner-version>
         <os-maven-plugin-version>1.7.0</os-maven-plugin-version>
         <osgi-version>6.0.0</osgi-version>
         <paho-version>1.2.5</paho-version>

Reply via email to