You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/03/22 16:40:59 UTC
[1/2] syncope git commit: Upgrading Camel
Repository: syncope
Updated Branches:
refs/heads/2_0_X 1df9af4dc -> 3af78b5aa
refs/heads/master a9ac69e98 -> b20cdc502
Upgrading Camel
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/b20cdc50
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/b20cdc50
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/b20cdc50
Branch: refs/heads/master
Commit: b20cdc5024cff013de4f759043acd9d52ed457e2
Parents: a9ac69e
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Mar 22 17:24:37 2018 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Mar 22 17:24:37 2018 +0100
----------------------------------------------------------------------
.../syncope/core/logic/CamelRouteLogic.java | 2 +-
.../camel/AbstractCamelProvisioningManager.java | 17 ++---
.../provisioning/camel/SyncopeCamelContext.java | 76 ++++++--------------
.../main/resources/provisioningCamelContext.xml | 7 +-
pom.xml | 6 +-
5 files changed, 39 insertions(+), 69 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/b20cdc50/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
----------------------------------------------------------------------
diff --git a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
index bb3d20b..67a0ae7 100644
--- a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
+++ b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
@@ -122,7 +122,7 @@ public class CamelRouteLogic extends AbstractTransactionalLogic<CamelRouteTO> {
public CamelMetrics metrics() {
CamelMetrics metrics = new CamelMetrics();
- MetricsRegistryService registryService = context.getContext().hasService(MetricsRegistryService.class);
+ MetricsRegistryService registryService = context.getCamelContext().hasService(MetricsRegistryService.class);
if (registryService == null) {
LOG.warn("Camel metrics not available");
} else {
http://git-wip-us.apache.org/repos/asf/syncope/blob/b20cdc50/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java
index 61be149..c8eaf2f 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java
@@ -29,7 +29,6 @@ import org.apache.camel.ProducerTemplate;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.impl.DefaultMessage;
import org.apache.camel.model.RoutesDefinition;
-import org.apache.camel.spring.SpringCamelContext;
import org.apache.syncope.core.persistence.api.dao.CamelRouteDAO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,8 +44,6 @@ abstract class AbstractCamelProvisioningManager {
@Autowired
protected SyncopeCamelContext contextFactory;
- protected SpringCamelContext camelContext;
-
protected RoutesDefinition routes;
protected final Map<String, PollingConsumer> consumerMap = new HashMap<>();
@@ -54,35 +51,35 @@ abstract class AbstractCamelProvisioningManager {
protected final List<String> knownURIs = new ArrayList<>();
protected void sendMessage(final String uri, final Object obj) {
- Exchange exchange = new DefaultExchange(contextFactory.getContext());
+ Exchange exchange = new DefaultExchange(contextFactory.getCamelContext());
- DefaultMessage message = new DefaultMessage(camelContext);
+ DefaultMessage message = new DefaultMessage(contextFactory.getCamelContext());
message.setBody(obj);
exchange.setIn(message);
- ProducerTemplate template = contextFactory.getContext().createProducerTemplate();
+ ProducerTemplate template = contextFactory.getCamelContext().createProducerTemplate();
template.send(uri, exchange);
}
protected void sendMessage(final String uri, final Object body, final Map<String, Object> properties) {
- Exchange exchange = new DefaultExchange(contextFactory.getContext());
+ Exchange exchange = new DefaultExchange(contextFactory.getCamelContext());
for (Map.Entry<String, Object> property : properties.entrySet()) {
exchange.setProperty(property.getKey(), property.getValue());
LOG.debug("Added property {}", property.getKey());
}
- DefaultMessage message = new DefaultMessage(camelContext);
+ DefaultMessage message = new DefaultMessage(contextFactory.getCamelContext());
message.setBody(body);
exchange.setIn(message);
- ProducerTemplate template = contextFactory.getContext().createProducerTemplate();
+ ProducerTemplate template = contextFactory.getCamelContext().createProducerTemplate();
template.send(uri, exchange);
}
protected PollingConsumer getConsumer(final String uri) {
if (!knownURIs.contains(uri)) {
knownURIs.add(uri);
- Endpoint endpoint = contextFactory.getContext().getEndpoint(uri);
+ Endpoint endpoint = contextFactory.getCamelContext().getEndpoint(uri);
PollingConsumer pollingConsumer = null;
try {
pollingConsumer = endpoint.createPollingConsumer();
http://git-wip-us.apache.org/repos/asf/syncope/blob/b20cdc50/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
index ff3aae0..740c4a0 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
@@ -18,34 +18,25 @@
*/
package org.apache.syncope.core.provisioning.camel;
-import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
+import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
+import org.apache.camel.CamelContext;
import org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory;
-import org.apache.camel.model.Constants;
-import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.spring.SpringCamelContext;
import org.apache.commons.io.IOUtils;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.core.persistence.api.dao.CamelRouteDAO;
import org.apache.syncope.core.persistence.api.entity.CamelRoute;
+import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
-import org.w3c.dom.Node;
-import org.w3c.dom.bootstrap.DOMImplementationRegistry;
-import org.w3c.dom.ls.DOMImplementationLS;
-import org.w3c.dom.ls.LSInput;
-import org.w3c.dom.ls.LSParser;
@Component
public class SyncopeCamelContext {
@@ -57,72 +48,49 @@ public class SyncopeCamelContext {
private SpringCamelContext camelContext;
- public SpringCamelContext getContext() {
+ public CamelContext getCamelContext() {
synchronized (this) {
if (camelContext == null) {
- camelContext = new SpringCamelContext(ApplicationContextProvider.getApplicationContext());
- camelContext.setStreamCaching(false);
- camelContext.setAllowUseOriginalMessage(false);
+ camelContext = ApplicationContextProvider.getBeanFactory().getBean(SpringCamelContext.class);
camelContext.addRoutePolicyFactory(new MetricsRoutePolicyFactory());
}
- }
- if (camelContext.getRouteDefinitions().isEmpty()) {
- List<CamelRoute> routes = routeDAO.findAll();
- LOG.debug("{} route(s) are going to be loaded ", routes.size());
- loadContext(routes.stream().map(input -> input.getContent()).collect(Collectors.toList()));
- try {
- camelContext.start();
- } catch (Exception e) {
- LOG.error("While starting Camel context", e);
- throw new CamelException(e);
+ if (camelContext.getRoutes().isEmpty()) {
+ List<CamelRoute> routes = routeDAO.findAll();
+ LOG.debug("{} route(s) are going to be loaded ", routes.size());
+
+ loadRouteDefinitions(routes.stream().map(input -> input.getContent()).collect(Collectors.toList()));
}
}
return camelContext;
}
- private void loadContext(final Collection<String> routes) {
+ private void loadRouteDefinitions(final List<String> routes) {
try {
- DOMImplementationRegistry reg = DOMImplementationRegistry.newInstance();
- DOMImplementationLS domImpl = (DOMImplementationLS) reg.getDOMImplementation("LS");
- LSParser parser = domImpl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
-
- JAXBContext jaxbContext = JAXBContext.newInstance(Constants.JAXB_CONTEXT_PACKAGES);
- Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- List<RouteDefinition> routeDefs = new ArrayList<>();
- for (String route : routes) {
- try (InputStream input = IOUtils.toInputStream(route, StandardCharsets.UTF_8)) {
- LSInput lsinput = domImpl.createLSInput();
- lsinput.setByteStream(input);
-
- Node routeElement = parser.parse(lsinput).getDocumentElement();
- routeDefs.add(unmarshaller.unmarshal(routeElement, RouteDefinition.class).getValue());
- }
- }
- camelContext.addRouteDefinitions(routeDefs);
+ RoutesDefinition routeDefs = camelContext.loadRoutesDefinition(
+ IOUtils.toInputStream("<routes xmlns=\"http://camel.apache.org/schema/spring\">"
+ + StringUtils.join(routes)
+ + "</routes>", StandardCharsets.UTF_8));
+ camelContext.addRouteDefinitions(routeDefs.getRoutes());
} catch (Exception e) {
- LOG.error("While loading Camel context {}", e);
+ LOG.error("While adding route definitions into Camel Context {}", camelContext, e);
throw new CamelException(e);
}
}
@Transactional(propagation = Propagation.SUPPORTS)
public void updateContext(final String routeKey) {
- if (camelContext == null) {
- getContext();
- } else if (!camelContext.getRouteDefinitions().isEmpty()) {
+ if (!camelContext.getRouteDefinitions().isEmpty()) {
camelContext.getRouteDefinitions().remove(camelContext.getRouteDefinition(routeKey));
- loadContext(Collections.singletonList(routeDAO.find(routeKey).getContent()));
+ loadRouteDefinitions(Arrays.asList(routeDAO.find(routeKey).getContent()));
}
}
public void restoreRoute(final String routeKey, final String routeContent) {
try {
camelContext.getRouteDefinitions().remove(camelContext.getRouteDefinition(routeKey));
- loadContext(Collections.singletonList(routeContent));
-
- camelContext.start();
+ loadRouteDefinitions(Arrays.asList(routeContent));
} catch (Exception e) {
LOG.error("While restoring Camel route {}", routeKey, e);
throw new CamelException(e);
http://git-wip-us.apache.org/repos/asf/syncope/blob/b20cdc50/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml b/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml
index e0360c6..0037a74 100644
--- a/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml
+++ b/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml
@@ -20,11 +20,16 @@ under the License.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd">
+ http://www.springframework.org/schema/context/spring-context.xsd
+ http://camel.apache.org/schema/spring
+ http://camel.apache.org/schema/spring/camel-spring.xsd">
+ <camel:camelContext id="provisioningCamelContext" streamCache="false" allowUseOriginalMessage="false"/>
+
<bean id="userRoutes" class="org.apache.syncope.core.spring.ResourceWithFallbackLoader">
<property name="primary" value="file:${camel.directory}/userRoutes.xml"/>
<property name="fallback" value="classpath:userRoutes.xml"/>
http://git-wip-us.apache.org/repos/asf/syncope/blob/b20cdc50/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 6ae3c1d..2916b88 100644
--- a/pom.xml
+++ b/pom.xml
@@ -386,7 +386,7 @@ under the License.
<flowable.version>6.2.1</flowable.version>
- <camel.version>2.20.2</camel.version>
+ <camel.version>2.21.0</camel.version>
<slf4j.version>1.7.25</slf4j.version>
<opensaml.version>3.3.0</opensaml.version>
@@ -2209,8 +2209,8 @@ under the License.
<link>http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/</link>
<link>http://fasterxml.github.io/jackson-dataformat-yaml/javadoc/2.9.pr1/</link>
<link>http://fasterxml.github.io/jackson-datatype-joda/javadoc/2.9/</link>
- <link>http://www.javadoc.io/doc/org.apache.camel/camel-core/2.20.2/</link>
- <link>http://www.javadoc.io/doc/org.apache.camel/camel-spring/2.20.2/</link>
+ <link>http://www.javadoc.io/doc/org.apache.camel/camel-core/2.21.0/</link>
+ <link>http://www.javadoc.io/doc/org.apache.camel/camel-spring/2.21.0/</link>
<link>https://ci.apache.org/projects/wicket/apidocs/8.x/</link>
<link>https://commons.apache.org/proper/commons-lang/javadocs/api-release/</link>
<link>https://commons.apache.org/proper/commons-io/javadocs/api-2.6/</link>
[2/2] syncope git commit: Backporting Camel-style 'fixes' from b20cdc5
Posted by il...@apache.org.
Backporting Camel-style 'fixes' from b20cdc5
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/3af78b5a
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/3af78b5a
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/3af78b5a
Branch: refs/heads/2_0_X
Commit: 3af78b5aaf212cdd49d2fce9b43adbc52d75ece3
Parents: 1df9af4
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Mar 22 17:24:37 2018 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Mar 22 17:40:51 2018 +0100
----------------------------------------------------------------------
.../syncope/core/logic/CamelRouteLogic.java | 2 +-
.../camel/AbstractCamelProvisioningManager.java | 13 ++-
.../provisioning/camel/SyncopeCamelContext.java | 88 +++++++-------------
.../main/resources/provisioningCamelContext.xml | 7 +-
4 files changed, 40 insertions(+), 70 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/3af78b5a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
----------------------------------------------------------------------
diff --git a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
index 64a1914..d2586ea 100644
--- a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
+++ b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
@@ -125,7 +125,7 @@ public class CamelRouteLogic extends AbstractTransactionalLogic<CamelRouteTO> {
public CamelMetrics metrics() {
CamelMetrics metrics = new CamelMetrics();
- MetricsRegistryService registryService = context.getContext().hasService(MetricsRegistryService.class);
+ MetricsRegistryService registryService = context.getCamelContext().hasService(MetricsRegistryService.class);
if (registryService == null) {
LOG.warn("Camel metrics not available");
} else {
http://git-wip-us.apache.org/repos/asf/syncope/blob/3af78b5a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java
index 30ae2b3..8caf411 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/AbstractCamelProvisioningManager.java
@@ -29,7 +29,6 @@ import org.apache.camel.ProducerTemplate;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.impl.DefaultMessage;
import org.apache.camel.model.RoutesDefinition;
-import org.apache.camel.spring.SpringCamelContext;
import org.apache.syncope.core.persistence.api.dao.CamelRouteDAO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,8 +44,6 @@ abstract class AbstractCamelProvisioningManager {
@Autowired
protected SyncopeCamelContext contextFactory;
- protected SpringCamelContext camelContext;
-
protected RoutesDefinition routes;
protected final Map<String, PollingConsumer> consumerMap = new HashMap<>();
@@ -54,18 +51,18 @@ abstract class AbstractCamelProvisioningManager {
protected final List<String> knownURIs = new ArrayList<>();
protected void sendMessage(final String uri, final Object obj) {
- Exchange exchange = new DefaultExchange(contextFactory.getContext());
+ Exchange exchange = new DefaultExchange(contextFactory.getCamelContext());
DefaultMessage message = new DefaultMessage();
message.setBody(obj);
exchange.setIn(message);
- ProducerTemplate template = contextFactory.getContext().createProducerTemplate();
+ ProducerTemplate template = contextFactory.getCamelContext().createProducerTemplate();
template.send(uri, exchange);
}
protected void sendMessage(final String uri, final Object body, final Map<String, Object> properties) {
- Exchange exchange = new DefaultExchange(contextFactory.getContext());
+ Exchange exchange = new DefaultExchange(contextFactory.getCamelContext());
for (Map.Entry<String, Object> property : properties.entrySet()) {
exchange.setProperty(property.getKey(), property.getValue());
@@ -75,14 +72,14 @@ abstract class AbstractCamelProvisioningManager {
DefaultMessage message = new DefaultMessage();
message.setBody(body);
exchange.setIn(message);
- ProducerTemplate template = contextFactory.getContext().createProducerTemplate();
+ ProducerTemplate template = contextFactory.getCamelContext().createProducerTemplate();
template.send(uri, exchange);
}
protected PollingConsumer getConsumer(final String uri) {
if (!knownURIs.contains(uri)) {
knownURIs.add(uri);
- Endpoint endpoint = contextFactory.getContext().getEndpoint(uri);
+ Endpoint endpoint = contextFactory.getCamelContext().getEndpoint(uri);
PollingConsumer pollingConsumer = null;
try {
pollingConsumer = endpoint.createPollingConsumer();
http://git-wip-us.apache.org/repos/asf/syncope/blob/3af78b5a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
index 95c65a6..1740862 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
@@ -18,35 +18,27 @@
*/
package org.apache.syncope.core.provisioning.camel;
-import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
+import org.apache.camel.CamelContext;
import org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory;
-import org.apache.camel.model.Constants;
-import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.spring.SpringCamelContext;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.io.IOUtils;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.core.persistence.api.dao.CamelRouteDAO;
import org.apache.syncope.core.persistence.api.entity.CamelRoute;
+import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
-import org.w3c.dom.Node;
-import org.w3c.dom.bootstrap.DOMImplementationRegistry;
-import org.w3c.dom.ls.DOMImplementationLS;
-import org.w3c.dom.ls.LSInput;
-import org.w3c.dom.ls.LSParser;
@Component
public class SyncopeCamelContext {
@@ -58,78 +50,54 @@ public class SyncopeCamelContext {
private SpringCamelContext camelContext;
- public SpringCamelContext getContext() {
+ public CamelContext getCamelContext() {
synchronized (this) {
if (camelContext == null) {
- camelContext = new SpringCamelContext(ApplicationContextProvider.getApplicationContext());
- camelContext.setStreamCaching(false);
- camelContext.setAllowUseOriginalMessage(false);
+ camelContext = ApplicationContextProvider.getBeanFactory().getBean(SpringCamelContext.class);
camelContext.addRoutePolicyFactory(new MetricsRoutePolicyFactory());
}
- }
- if (camelContext.getRouteDefinitions().isEmpty()) {
- List<CamelRoute> routes = routeDAO.findAll();
- LOG.debug("{} route(s) are going to be loaded ", routes.size());
- loadContext(CollectionUtils.collect(routes, new Transformer<CamelRoute, String>() {
+ if (camelContext.getRoutes().isEmpty()) {
+ List<CamelRoute> routes = routeDAO.findAll();
+ LOG.debug("{} route(s) are going to be loaded ", routes.size());
+ loadRouteDefinitions(CollectionUtils.collect(routes, new Transformer<CamelRoute, String>() {
- @Override
- public String transform(final CamelRoute input) {
- return input.getContent();
- }
- }));
- try {
- camelContext.start();
- } catch (Exception e) {
- LOG.error("While starting Camel context", e);
- throw new CamelException(e);
+ @Override
+ public String transform(final CamelRoute input) {
+ return input.getContent();
+ }
+ }));
}
- }
- return camelContext;
+ return camelContext;
+ }
}
- private void loadContext(final Collection<String> routes) {
+ private void loadRouteDefinitions(final Collection<String> routes) {
try {
- DOMImplementationRegistry reg = DOMImplementationRegistry.newInstance();
- DOMImplementationLS domImpl = (DOMImplementationLS) reg.getDOMImplementation("LS");
- LSParser parser = domImpl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
-
- JAXBContext jaxbContext = JAXBContext.newInstance(Constants.JAXB_CONTEXT_PACKAGES);
- Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- List<RouteDefinition> routeDefs = new ArrayList<>();
- for (String route : routes) {
- try (InputStream input = IOUtils.toInputStream(route, StandardCharsets.UTF_8)) {
- LSInput lsinput = domImpl.createLSInput();
- lsinput.setByteStream(input);
-
- Node routeElement = parser.parse(lsinput).getDocumentElement();
- routeDefs.add(unmarshaller.unmarshal(routeElement, RouteDefinition.class).getValue());
- }
- }
- camelContext.addRouteDefinitions(routeDefs);
+ RoutesDefinition routeDefs = camelContext.loadRoutesDefinition(
+ IOUtils.toInputStream("<routes xmlns=\"http://camel.apache.org/schema/spring\">"
+ + StringUtils.join(routes)
+ + "</routes>", StandardCharsets.UTF_8));
+ camelContext.addRouteDefinitions(routeDefs.getRoutes());
} catch (Exception e) {
- LOG.error("While loading Camel context {}", e);
+ LOG.error("While adding route definitions into Camel Context {}", camelContext, e);
throw new CamelException(e);
}
}
@Transactional(propagation = Propagation.SUPPORTS)
public void updateContext(final String routeKey) {
- if (camelContext == null) {
- getContext();
- } else if (!camelContext.getRouteDefinitions().isEmpty()) {
+ if (!camelContext.getRouteDefinitions().isEmpty()) {
camelContext.getRouteDefinitions().remove(camelContext.getRouteDefinition(routeKey));
- loadContext(Collections.singletonList(routeDAO.find(routeKey).getContent()));
+ loadRouteDefinitions(Arrays.asList(routeDAO.find(routeKey).getContent()));
}
}
public void restoreRoute(final String routeKey, final String routeContent) {
try {
camelContext.getRouteDefinitions().remove(camelContext.getRouteDefinition(routeKey));
- loadContext(Collections.singletonList(routeContent));
-
- camelContext.start();
+ loadRouteDefinitions(Arrays.asList(routeContent));
} catch (Exception e) {
LOG.error("While restoring Camel route {}", routeKey, e);
throw new CamelException(e);
http://git-wip-us.apache.org/repos/asf/syncope/blob/3af78b5a/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml b/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml
index e0360c6..0037a74 100644
--- a/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml
+++ b/ext/camel/provisioning-camel/src/main/resources/provisioningCamelContext.xml
@@ -20,11 +20,16 @@ under the License.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd">
+ http://www.springframework.org/schema/context/spring-context.xsd
+ http://camel.apache.org/schema/spring
+ http://camel.apache.org/schema/spring/camel-spring.xsd">
+ <camel:camelContext id="provisioningCamelContext" streamCache="false" allowUseOriginalMessage="false"/>
+
<bean id="userRoutes" class="org.apache.syncope.core.spring.ResourceWithFallbackLoader">
<property name="primary" value="file:${camel.directory}/userRoutes.xml"/>
<property name="fallback" value="classpath:userRoutes.xml"/>