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>