You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/07/26 08:01:08 UTC

svn commit: r979164 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/main/java/org/apache/camel/impl/converter/ components/camel-cxf/src/main/java/org/apache/camel/component/cxf/

Author: davsclaus
Date: Mon Jul 26 06:01:08 2010
New Revision: 979164

URL: http://svn.apache.org/viewvc?rev=979164&view=rev
Log:
CAMEL-2991: Endpoint is now a Service.

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/EndpointRegistry.java   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
    camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
    camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java?rev=979164&r1=979163&r2=979164&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java Mon Jul 26 06:01:08 2010
@@ -29,7 +29,7 @@ import java.util.Map;
  * @see Message
  * @version $Revision$
  */
-public interface Endpoint extends IsSingleton {
+public interface Endpoint extends IsSingleton, Service {
 
     /**
      * Returns the string representation of the endpoint URI

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=979164&r1=979163&r2=979164&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Mon Jul 26 06:01:08 2010
@@ -126,7 +126,7 @@ public class DefaultCamelContext extends
     private ClassLoader applicationContextClassLoader;
     private boolean routeDefinitionInitiated;
     private String name;
-    private final Map<String, Endpoint> endpoints = new LRUCache<String, Endpoint>(1000);
+    private final Map<String, Endpoint> endpoints = new EndpointRegistry();
     private final AtomicInteger endpointKeyCounter = new AtomicInteger();
     private final List<EndpointStrategy> endpointStrategies = new ArrayList<EndpointStrategy>();
     private final Map<String, Component> components = new HashMap<String, Component>();
@@ -414,9 +414,6 @@ public class DefaultCamelContext extends
 
                     if (answer != null) {
                         addService(answer);
-                        for (LifecycleStrategy strategy : lifecycleStrategies) {
-                            strategy.onEndpointAdd(answer);
-                        }
                         answer = addEndpointToRegistry(uri, answer);
                     }
                 } catch (Exception e) {
@@ -642,10 +639,25 @@ public class DefaultCamelContext extends
     public void addService(Object object) throws Exception {
         if (object instanceof Service) {
             Service service = (Service) object;
+
             for (LifecycleStrategy strategy : lifecycleStrategies) {
-                strategy.onServiceAdd(this, service, null);
+                if (service instanceof Endpoint) {
+                    // use specialized endpint add
+                    strategy.onEndpointAdd((Endpoint) service);
+                } else {
+                    strategy.onServiceAdd(this, service, null);
+                }
+            }
+
+            // only add to services to close if its a singleton
+            // otherwise we could end up with a lot of endpoints (prototype scoped)
+            boolean singleton = true; // assume singleton by default
+            if (service instanceof IsSingleton) {
+                singleton = ((IsSingleton) service).isSingleton();
+            }
+            if (singleton) {
+                servicesToClose.add(service);
             }
-            servicesToClose.add(service);
         }
         startServices(object);
     }
@@ -1112,7 +1124,6 @@ public class DefaultCamelContext extends
             routeDefinitionInitiated = true;
         }
 
-
         // starting will continue in the start method
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java?rev=979164&r1=979163&r2=979164&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java Mon Jul 26 06:01:08 2010
@@ -193,4 +193,11 @@ public abstract class DefaultEndpoint im
         return false;
     }
 
+    public void start() throws Exception {
+        // noop
+    }
+
+    public void stop() throws Exception {
+        // noop
+    }
 }

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/EndpointRegistry.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/EndpointRegistry.java?rev=979164&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/EndpointRegistry.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/EndpointRegistry.java Mon Jul 26 06:01:08 2010
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.util.LRUCache;
+
+/**
+ * Endpoint registry which is a based on a {@link org.apache.camel.util.LRUCache}
+ * to keep the last 1000 in an internal cache.
+ *
+ * @version $Revision$
+ */
+public class EndpointRegistry extends LRUCache<String, Endpoint> {
+
+    public EndpointRegistry() {
+        // use a cache size of 1000
+        super(1000);
+    }
+
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/EndpointRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/EndpointRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java?rev=979164&r1=979163&r2=979164&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java Mon Jul 26 06:01:08 2010
@@ -205,6 +205,14 @@ public class InterceptSendToEndpoint imp
         return delegate.isSingleton();
     }
 
+    public void start() throws Exception {
+        delegate.start();
+    }
+
+    public void stop() throws Exception {
+        delegate.stop();
+    }
+
     @Override
     public String toString() {
         return delegate.toString();

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java?rev=979164&r1=979163&r2=979164&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java Mon Jul 26 06:01:08 2010
@@ -89,6 +89,10 @@ public class DefaultTypeConverter extend
 
     @SuppressWarnings("unchecked")
     public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
+        if (!isRunAllowed()) {
+            throw new IllegalStateException(this + " is not started");
+        }
+
         Object answer;
         try {
             answer = doConvertTo(type, exchange, value);
@@ -121,6 +125,10 @@ public class DefaultTypeConverter extend
 
     @SuppressWarnings("unchecked")
     public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) throws NoTypeConversionAvailableException {
+        if (!isRunAllowed()) {
+            throw new IllegalStateException(this + " is not started");
+        }
+
         Object answer;
         try {
             answer = doConvertTo(type, exchange, value);

Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java?rev=979164&r1=979163&r2=979164&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java Mon Jul 26 06:01:08 2010
@@ -20,7 +20,6 @@ import java.util.Map;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
-import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.ClientCallback;
 import org.apache.cxf.service.model.BindingOperationInfo;
 
@@ -44,22 +43,27 @@ public class CxfClientCallback extends C
     }
     
     public void handleResponse(Map<String, Object> ctx, Object[] res) {
-        super.handleResponse(ctx, res);
-        // bind the CXF response to Camel exchange
-        if (!boi.getOperationInfo().isOneWay()) {
-            // copy the InMessage header to OutMessage header
-            camelExchange.getOut().getHeaders().putAll(camelExchange.getIn().getHeaders());
-            endpoint.getCxfBinding().populateExchangeFromCxfResponse(camelExchange, cxfExchange,
-                    ctx);
+        try {
+            super.handleResponse(ctx, res);
+            // bind the CXF response to Camel exchange
+            if (!boi.getOperationInfo().isOneWay()) {
+                // copy the InMessage header to OutMessage header
+                camelExchange.getOut().getHeaders().putAll(camelExchange.getIn().getHeaders());
+                endpoint.getCxfBinding().populateExchangeFromCxfResponse(camelExchange, cxfExchange,
+                        ctx);
+            }
+        } finally {
+            camelAsyncCallback.done(false);
         }
-        camelAsyncCallback.done(false);
     }
     
     public void handleException(Map<String, Object> ctx, Throwable ex) {
-        super.handleException(ctx, ex);
-        camelExchange.setException(ex);
-        camelAsyncCallback.done(false);
+        try {
+            super.handleException(ctx, ex);
+        } finally {
+            camelExchange.setException(ex);
+            camelAsyncCallback.done(false);
+        }
     }
-    
 
 }

Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java?rev=979164&r1=979163&r2=979164&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java Mon Jul 26 06:01:08 2010
@@ -92,7 +92,7 @@ public class CxfProducer extends Default
             // send the CXF async request
             client.invoke(cxfClientCallback, boi, getParams(endpoint, camelExchange), 
                           invocationContext, cxfExchange);
-        } catch (Exception ex) {
+        } catch (Throwable ex) {
             // error occurred before we had a chance to go async
             // so set exception and invoke callback true
             camelExchange.setException(ex);