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);