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:41:00 UTC

[2/2] syncope git commit: Backporting Camel-style 'fixes' from b20cdc5

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"/>