Repository: camel Updated Branches: refs/heads/master 77cb04072 -> 731328618
CAMEL-11820: Upgrade optaplanner to version 7.3.0.Final Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/73132861 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/73132861 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/73132861 Branch: refs/heads/master Commit: 7313286185ae3feac25253fa8c58f50d90fbe094 Parents: 77cb040 Author: Dmitry Volodin <dmvo...@gmail.com> Authored: Thu Oct 5 11:22:21 2017 +0300 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Oct 5 16:03:40 2017 +0200 ---------------------------------------------------------------------- .../optaplanner/OptaPlannerComponent.java | 8 ++---- .../optaplanner/OptaPlannerConstants.java | 1 + .../optaplanner/OptaPlannerConsumer.java | 15 +++++----- .../optaplanner/OptaPlannerEndpoint.java | 14 ++++----- .../optaplanner/OptaPlannerProducer.java | 30 ++++++++++++-------- .../OptaPlannerDaemonSolverTest.java | 10 +++---- .../optaplanner/daemonSolverConfig.xml | 5 ++-- .../component/optaplanner/solverConfig.xml | 5 ++-- parent/pom.xml | 7 +++-- .../features/src/main/resources/features.xml | 1 + 10 files changed, 51 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerComponent.java b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerComponent.java index b188d39..2d0a720 100644 --- a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerComponent.java +++ b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerComponent.java @@ -19,16 +19,12 @@ package org.apache.camel.component.optaplanner; import java.util.Map; import org.apache.camel.Endpoint; -import org.apache.camel.impl.UriEndpointComponent; +import org.apache.camel.impl.DefaultComponent; /** * OptaPlanner component for Camel */ -public class OptaPlannerComponent extends UriEndpointComponent { - - public OptaPlannerComponent() { - super(OptaPlannerEndpoint.class); - } +public class OptaPlannerComponent extends DefaultComponent { protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { OptaPlannerConfiguration configuration = new OptaPlannerConfiguration(); http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConstants.java ---------------------------------------------------------------------- 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 4a0a899..7b7700e 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 @@ -25,4 +25,5 @@ public interface OptaPlannerConstants { String IS_SOLVING = "CamelOptaPlannerIsSolving"; String IS_TERMINATE_EARLY = "CamelOptaPlannerIsTerminateEarly"; String IS_EVERY_PROBLEM_FACT_CHANGE_PROCESSED = "CamelOptaPlannerIsEveryProblemFactChangeProcessed"; + long IS_EVERY_PROBLEM_FACT_CHANGE_DELAY = 100; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConsumer.java b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConsumer.java index 0e10a79..78888c8 100644 --- a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConsumer.java +++ b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerConsumer.java @@ -32,23 +32,23 @@ public class OptaPlannerConsumer extends DefaultConsumer { private static final transient Logger LOGGER = LoggerFactory.getLogger(OptaPlannerConsumer.class); private final OptaPlannerEndpoint endpoint; private final OptaPlannerConfiguration configuration; - private final SolverEventListener listener; + private final SolverEventListener<Object> listener; public OptaPlannerConsumer(OptaPlannerEndpoint endpoint, Processor processor, OptaPlannerConfiguration configuration) { super(endpoint, processor); this.endpoint = endpoint; this.configuration = configuration; - listener = new SolverEventListener() { + listener = new SolverEventListener<Object>() { @Override - public void bestSolutionChanged(BestSolutionChangedEvent event) { - if (event.isEveryProblemFactChangeProcessed() && event.isNewBestSolutionInitialized()) { + public void bestSolutionChanged(BestSolutionChangedEvent<Object> event) { + if (event.isEveryProblemFactChangeProcessed() && event.getNewBestScore().isSolutionInitialized()) { processEvent(event); } } }; } - public void processEvent(BestSolutionChangedEvent event) { + public void processEvent(BestSolutionChangedEvent<Object> event) { Exchange exchange = getEndpoint().createExchange(); exchange.getOut().setHeader(OptaPlannerConstants.BEST_SOLUTION, event.getNewBestSolution()); try { @@ -60,16 +60,15 @@ public class OptaPlannerConsumer extends DefaultConsumer { @Override protected void doStart() throws Exception { - Solver solver = endpoint.getOrCreateSolver(configuration.getSolverId()); + Solver<Object> solver = endpoint.getOrCreateSolver(configuration.getSolverId()); solver.addEventListener(listener); super.doStart(); } @Override protected void doStop() throws Exception { - Solver solver = endpoint.getOrCreateSolver(configuration.getSolverId()); + Solver<Object> solver = endpoint.getOrCreateSolver(configuration.getSolverId()); solver.removeEventListener(listener); super.doStop(); } } - http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerEndpoint.java b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerEndpoint.java index ff6cf2f..4676006 100644 --- a/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerEndpoint.java +++ b/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerEndpoint.java @@ -34,11 +34,11 @@ import org.optaplanner.core.api.solver.SolverFactory; */ @UriEndpoint(firstVersion = "2.13.0", scheme = "optaplanner", title = "OptaPlanner", syntax = "optaplanner:configFile", label = "engine,planning") public class OptaPlannerEndpoint extends DefaultEndpoint { - private static final Map<String, Solver> SOLVERS = new HashMap<String, Solver>(); + private static final Map<String, Solver<Object>> SOLVERS = new HashMap<String, Solver<Object>>(); @UriParam private OptaPlannerConfiguration configuration; - private SolverFactory solverFactory; + private SolverFactory<Object> solverFactory; public OptaPlannerEndpoint() { } @@ -50,9 +50,9 @@ public class OptaPlannerEndpoint extends DefaultEndpoint { solverFactory = SolverFactory.createFromXmlResource(configuration.getConfigFile(), classLoader); } - protected Solver getOrCreateSolver(String solverId) throws Exception { + protected Solver<Object> getOrCreateSolver(String solverId) throws Exception { synchronized (SOLVERS) { - Solver solver = SOLVERS.get(solverId); + Solver<Object> solver = SOLVERS.get(solverId); if (solver == null) { solver = createSolver(); SOLVERS.put(solverId, solver); @@ -61,11 +61,11 @@ public class OptaPlannerEndpoint extends DefaultEndpoint { } } - protected Solver createSolver() { + protected Solver<Object> createSolver() { return solverFactory.buildSolver(); } - protected Solver getSolver(String solverId) { + protected Solver<Object> getSolver(String solverId) { synchronized (SOLVERS) { return SOLVERS.get(solverId); } @@ -89,7 +89,7 @@ public class OptaPlannerEndpoint extends DefaultEndpoint { @Override protected void doStop() throws Exception { synchronized (SOLVERS) { - for (Solver solver : SOLVERS.values()) { + for (Solver<Object> solver : SOLVERS.values()) { solver.terminateEarly(); SOLVERS.remove(solver); } http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/components/camel-optaplanner/src/main/java/org/apache/camel/component/optaplanner/OptaPlannerProducer.java ---------------------------------------------------------------------- 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 5a8556d..c993aee 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 @@ -20,6 +20,7 @@ import java.util.concurrent.ExecutorService; import org.apache.camel.Exchange; import org.apache.camel.impl.DefaultProducer; +import org.optaplanner.core.api.domain.solution.PlanningSolution; import org.optaplanner.core.api.domain.solution.Solution; import org.optaplanner.core.api.solver.Solver; import org.optaplanner.core.impl.solver.ProblemFactChange; @@ -43,8 +44,7 @@ public class OptaPlannerProducer extends DefaultProducer { @Override protected void doStart() throws Exception { if (configuration.isAsync()) { - executor = endpoint.getCamelContext().getExecutorServiceManager().newFixedThreadPool( - this, endpoint.getEndpointUri(), configuration.getThreadPoolSize()); + executor = endpoint.getCamelContext().getExecutorServiceManager().newFixedThreadPool(this, endpoint.getEndpointUri(), configuration.getThreadPoolSize()); } super.doStart(); } @@ -58,20 +58,26 @@ public class OptaPlannerProducer extends DefaultProducer { super.doStop(); } + @SuppressWarnings("unchecked") @Override public synchronized void process(Exchange exchange) throws Exception { final Object body = exchange.getIn().getMandatoryBody(); final String solverId = getSolverId(exchange); - if (body instanceof Solution) { + /* + * 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 (isAsync(exchange)) { LOGGER.debug("Asynchronously solving problem: [{}] with id [{}]", body, solverId); - final Solver solver = endpoint.getOrCreateSolver(solverId); + final Solver<Object> solver = endpoint.getOrCreateSolver(solverId); executor.submit(new Runnable() { @Override public void run() { try { - solver.solve((Solution) body); + solver.solve(body); } catch (Throwable e) { LOGGER.error("Asynchronously solving failed for solverId ({})", solverId, e); } @@ -79,26 +85,26 @@ public class OptaPlannerProducer extends DefaultProducer { }); } else { LOGGER.debug("Synchronously solving problem: [{}] with id [{}]", body, solverId); - Solver solver = endpoint.getSolver(solverId); + Solver<Object> solver = endpoint.getSolver(solverId); if (solver == null) { solver = endpoint.createSolver(); } - solver.solve((Solution) body); + solver.solve(body); populateResult(exchange, solver); } } else if (body instanceof ProblemFactChange) { LOGGER.debug("Adding ProblemFactChange to solver: [{}] with id [{}]", body, solverId); - Solver solver = endpoint.getOrCreateSolver(solverId); - solver.addProblemFactChange((ProblemFactChange)body); + Solver<Object> solver = endpoint.getOrCreateSolver(solverId); + solver.addProblemFactChange((ProblemFactChange<Object>)body); if (!isAsync(exchange)) { while (!solver.isEveryProblemFactChangeProcessed()) { - Thread.sleep(100); + Thread.sleep(OptaPlannerConstants.IS_EVERY_PROBLEM_FACT_CHANGE_DELAY); } } populateResult(exchange, solver); } else { LOGGER.debug("Retrieving best score for solver: [{}]", solverId); - Solver solver = endpoint.getSolver(solverId); + Solver<Object> solver = endpoint.getSolver(solverId); if (solver == null) { throw new RuntimeException("Solver not found: " + solverId); } @@ -106,7 +112,7 @@ public class OptaPlannerProducer extends DefaultProducer { } } - private void populateResult(Exchange exchange, Solver solver) { + private void populateResult(Exchange exchange, Solver<Object> solver) { exchange.getIn().setBody(solver.getBestSolution()); exchange.getIn().setHeader(OptaPlannerConstants.TIME_SPENT, solver.getTimeMillisSpent()); exchange.getIn().setHeader(OptaPlannerConstants.IS_EVERY_PROBLEM_FACT_CHANGE_PROCESSED, solver.isEveryProblemFactChangeProcessed()); http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/components/camel-optaplanner/src/test/java/org/apache/camel/component/optaplanner/OptaPlannerDaemonSolverTest.java ---------------------------------------------------------------------- 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 48e9e23..c35ad0b 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 @@ -18,11 +18,11 @@ package org.apache.camel.component.optaplanner; import java.util.ArrayList; import java.util.Iterator; +import java.util.Objects; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; -import org.apache.commons.lang3.ObjectUtils; import org.junit.Test; import org.optaplanner.core.impl.score.director.ScoreDirector; import org.optaplanner.core.impl.solver.ProblemFactChange; @@ -72,7 +72,7 @@ public class OptaPlannerDaemonSolverTest extends CamelTestSupport { }; } - private static class RemoveComputerChange implements ProblemFactChange { + private static class RemoveComputerChange implements ProblemFactChange<Object> { private final CloudComputer removingComputer; @@ -81,10 +81,10 @@ public class OptaPlannerDaemonSolverTest extends CamelTestSupport { } @Override - public void doChange(ScoreDirector scoreDirector) { + public void doChange(ScoreDirector<Object> scoreDirector) { CloudBalance cloudBalance = (CloudBalance) scoreDirector.getWorkingSolution(); for (CloudProcess process : cloudBalance.getProcessList()) { - if (ObjectUtils.equals(process.getComputer(), removingComputer)) { + if (Objects.equals(process.getComputer(), removingComputer)) { scoreDirector.beforeVariableChanged(process, "computer"); process.setComputer(null); scoreDirector.afterVariableChanged(process, "computer"); @@ -93,7 +93,7 @@ public class OptaPlannerDaemonSolverTest extends CamelTestSupport { cloudBalance.setComputerList(new ArrayList<CloudComputer>(cloudBalance.getComputerList())); for (Iterator<CloudComputer> it = cloudBalance.getComputerList().iterator(); it.hasNext();) { CloudComputer workingComputer = it.next(); - if (ObjectUtils.equals(workingComputer, removingComputer)) { + if (Objects.equals(workingComputer, removingComputer)) { scoreDirector.beforeProblemFactRemoved(workingComputer); it.remove(); // remove from list scoreDirector.beforeProblemFactRemoved(workingComputer); http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/daemonSolverConfig.xml ---------------------------------------------------------------------- diff --git a/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/daemonSolverConfig.xml b/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/daemonSolverConfig.xml index 0e1de00..0505362 100644 --- a/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/daemonSolverConfig.xml +++ b/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/daemonSolverConfig.xml @@ -22,7 +22,9 @@ <!-- Run in daemon mode --> <daemon>true</daemon> - <!--<environmentMode>FAST_ASSERT</environmentMode>--> + <!-- + <environmentMode>FAST_ASSERT</environmentMode> + --> <!-- Domain model configuration --> <solutionClass>org.optaplanner.examples.cloudbalancing.domain.CloudBalance</solutionClass> @@ -30,7 +32,6 @@ <!-- Score configuration --> <scoreDirectorFactory> - <scoreDefinitionType>HARD_SOFT</scoreDefinitionType> <scoreDrl>org/optaplanner/examples/cloudbalancing/solver/cloudBalancingScoreRules.drl</scoreDrl> </scoreDirectorFactory> http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/solverConfig.xml ---------------------------------------------------------------------- diff --git a/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/solverConfig.xml b/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/solverConfig.xml index 39e0bef..0daf103 100644 --- a/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/solverConfig.xml +++ b/components/camel-optaplanner/src/test/resources/org/apache/camel/component/optaplanner/solverConfig.xml @@ -18,7 +18,9 @@ --> <solver> - <!--<environmentMode>FAST_ASSERT</environmentMode>--> + <!-- + <environmentMode>FAST_ASSERT</environmentMode> + --> <!-- Domain model configuration --> <solutionClass>org.optaplanner.examples.cloudbalancing.domain.CloudBalance</solutionClass> @@ -26,7 +28,6 @@ <!-- Score configuration --> <scoreDirectorFactory> - <scoreDefinitionType>HARD_SOFT</scoreDefinitionType> <scoreDrl>org/optaplanner/examples/cloudbalancing/solver/cloudBalancingScoreRules.drl</scoreDrl> </scoreDirectorFactory> http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 7afdcdd..781f8f0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -188,7 +188,7 @@ <docker-maven-plugin-version>0.22.1</docker-maven-plugin-version> <dom4j-bundle-version>1.6.1_5</dom4j-bundle-version> <dozer-version>6.1.0</dozer-version> - <drools-version>6.5.0.Final</drools-version> + <drools-version>7.3.0.Final</drools-version> <dropbox-version>1.8.2</dropbox-version> <easymock-version>3.4</easymock-version> <eclipse-equinox-common-version>3.3.0-v20070426</eclipse-equinox-common-version> @@ -436,7 +436,7 @@ <kafka-bundle-version>0.11.0.0_1</kafka-bundle-version> <karaf2-version>2.4.4</karaf2-version> <karaf4-version>4.1.2</karaf4-version> - <kie-version>6.5.0.Final</kie-version> + <kie-version>7.3.0.Final</kie-version> <krati-version>0.4.9</krati-version> <kubernetes-client-version>2.6.3</kubernetes-client-version> <kubernetes-model-version>1.1.4</kubernetes-model-version> @@ -543,7 +543,7 @@ <opentracing-version>0.30.0</opentracing-version> <opentracing-tracerresolver-version>0.1.0</opentracing-tracerresolver-version> <ops4j-base-version>1.5.0</ops4j-base-version> - <optaplanner-version>6.5.0.Final</optaplanner-version> + <optaplanner-version>7.3.0.Final</optaplanner-version> <oro-bundle-version>2.0.8_6</oro-bundle-version> <os-maven-plugin-version>1.4.1.Final</os-maven-plugin-version> <oscache-bundle-version>2.4_5</oscache-bundle-version> @@ -689,6 +689,7 @@ <twilio-version>7.9.1</twilio-version> <twitter4j-bundle-version>4.0.6_1</twitter4j-bundle-version> <twitter4j-version>4.0.6</twitter4j-version> + <uberfire-maven-support-version>1.3.0.Final</uberfire-maven-support-version> <undertow-version>1.4.20.Final</undertow-version> <univocity-parsers-version>2.3.1</univocity-parsers-version> <unix-socket-factory-version>2015-01-27T15-02-14</unix-socket-factory-version> http://git-wip-us.apache.org/repos/asf/camel/blob/73132861/platforms/karaf/features/src/main/resources/features.xml ---------------------------------------------------------------------- diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml index 2305675..1257bbd 100644 --- a/platforms/karaf/features/src/main/resources/features.xml +++ b/platforms/karaf/features/src/main/resources/features.xml @@ -1612,6 +1612,7 @@ <bundle dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle> <bundle dependency='true'>mvn:commons-collections/commons-collections/${commons-collections-version}</bundle> <bundle dependency='true'>mvn:org.optaplanner/optaplanner-core/${optaplanner-version}</bundle> + <bundle dependency='true'>mvn:org.uberfire/uberfire-maven-support/${uberfire-maven-support-version}</bundle> <bundle dependency='true'>mvn:org.kie/kie-api/${kie-version}</bundle> <bundle dependency='true'>mvn:org.kie/kie-internal/${kie-version}</bundle> <bundle dependency='true'>mvn:org.drools/drools-core/${drools-version}</bundle>