You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2007/08/02 12:57:41 UTC
svn commit: r562072 - in /activemq/camel/trunk:
camel-core/src/main/java/org/apache/camel/component/bean/
camel-core/src/main/java/org/apache/camel/component/pojo/
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/main/java/org/apache/came...
Author: jstrachan
Date: Thu Aug 2 03:57:37 2007
New Revision: 562072
URL: http://svn.apache.org/viewvc?view=rev&rev=562072
Log:
refactored POJO component to use the Registry; so it works easier with JNDI and Spring together with adding a simple JNDI context implementation; also improved the ServiceExporter to be just a simple factory bean.. Finally moved the bean component into camel-core as its not based on Spring (it uses the Registry)
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java
- copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java
- copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/BeanComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java (contents, props changed)
- copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
- copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java (contents, props changed)
- copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java (contents, props changed)
- copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java (contents, props changed)
- copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java
- copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/package.html
- copied unchanged from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/package.html
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html
activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean
- copied, changed from r562013, activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/pojo
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java
activemq/camel/trunk/camel-core/src/test/resources/jndi.properties
activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/jpa/
Removed:
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java Thu Aug 2 03:57:37 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
import org.apache.camel.Exchange;
import org.apache.camel.CamelExchangeException;
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/BeanComponent.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/BeanComponent.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/BeanComponent.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java Thu Aug 2 03:57:37 2007
@@ -17,21 +17,14 @@
*/
package org.apache.camel.component.bean;
-import org.apache.camel.Endpoint;
import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
import org.apache.camel.impl.DefaultComponent;
import org.apache.camel.impl.ProcessorEndpoint;
-import org.apache.camel.spring.bind.BeanProcessor;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
-import org.apache.camel.spring.util.DefaultMethodInvocationStrategy;
-import org.apache.camel.spring.SpringCamelContext;
-import static org.apache.camel.util.ObjectHelper.notNull;
+import org.apache.camel.spi.Registry;
import org.apache.camel.util.IntrospectionSupport;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
import java.util.Map;
@@ -42,26 +35,13 @@
*
* @version $Revision: 1.1 $
*/
-public class BeanComponent extends DefaultComponent implements ApplicationContextAware {
+public class BeanComponent extends DefaultComponent {
private static final Log log = LogFactory.getLog(BeanComponent.class);
- private ApplicationContext applicationContext;
private MethodInvocationStrategy invocationStrategy;
public BeanComponent() {
}
- public BeanComponent(ApplicationContext applicationContext) {
- this.applicationContext = applicationContext;
- }
-
- public ApplicationContext getApplicationContext() {
- return applicationContext;
- }
-
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
- this.applicationContext = applicationContext;
- }
-
public MethodInvocationStrategy getInvocationStrategy() {
if (invocationStrategy == null) {
invocationStrategy = createInvocationStrategy();
@@ -77,22 +57,19 @@
//-----------------------------------------------------------------------
protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
- notNull(applicationContext, "applicationContext");
- Object bean = applicationContext.getBean(remaining);
+ Registry registry = getCamelContext().getRegistry();
+ Object bean = registry.lookup(remaining);
+ if (bean == null) {
+ throw new IllegalArgumentException("No such bean: " + remaining + " in registry: " + registry);
+ }
BeanProcessor processor = new BeanProcessor(bean, getInvocationStrategy());
IntrospectionSupport.setProperties(processor, parameters);
return new ProcessorEndpoint(uri, this, processor);
- //return new BeanEndpoint(uri, this, remaining);
}
protected MethodInvocationStrategy createInvocationStrategy() {
CamelContext context = getCamelContext();
- if (context instanceof SpringCamelContext) {
- SpringCamelContext springCamelContext = (SpringCamelContext) context;
- return springCamelContext.getInvocationStrategy();
- }
- else {
- log.warn("Not using a SpringCamelContext so using the default MethodInvocationStrategy");
- return new DefaultMethodInvocationStrategy();}
+ // TODO add this to the context?
+ return new DefaultMethodInvocationStrategy();
}
}
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java Thu Aug 2 03:57:37 2007
@@ -14,9 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
-import org.aopalliance.intercept.MethodInvocation;
import org.apache.camel.Body;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
@@ -25,7 +24,6 @@
import org.apache.camel.Property;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.builder.ExpressionBuilder;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
import static org.apache.camel.util.ExchangeHelper.convertToType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java Thu Aug 2 03:57:37 2007
@@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
-import static org.apache.camel.util.ObjectHelper.isNullOrBlank;
-import org.aopalliance.intercept.MethodInvocation;
import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.component.pojo.PojoInvocation;
import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
+import static org.apache.camel.util.ObjectHelper.isNullOrBlank;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -61,6 +60,13 @@
if (log.isDebugEnabled()) {
log.debug(">>>> invoking method for: " + exchange);
}
+ Message in = exchange.getIn();
+ PojoInvocation pojoInvoke = in.getBody(PojoInvocation.class);
+ if (pojoInvoke != null) {
+ pojoInvoke.invoke(pojo, exchange);
+ return;
+ }
+
MethodInvocation invocation;
if (method != null) {
invocation = beanInfo.createInvocation(method, pojo, exchange);
@@ -68,7 +74,6 @@
else {
// lets pass in the method name to use if its specified
if (ObjectHelper.isNotNullAndNonEmpty(methodName)) {
- Message in = exchange.getIn();
if (isNullOrBlank(in.getHeader(METHOD_NAME, String.class))) {
in.setHeader(METHOD_NAME, methodName);
}
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java Thu Aug 2 03:57:37 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.spring.util;
+package org.apache.camel.component.bean;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java Thu Aug 2 03:57:37 2007
@@ -14,16 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
-import org.aopalliance.intercept.MethodInvocation;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
+import org.apache.camel.util.ObjectHelper;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
+import java.util.Arrays;
/**
* @version $Revision: $
@@ -96,7 +97,7 @@
public boolean bodyParameterMatches(Class bodyType) {
Class actualType = getBodyParameterType();
- return actualType != null && bodyType.isAssignableFrom(actualType);
+ return actualType != null && ObjectHelper.isAssignableFrom(bodyType, actualType);
}
public List<ParameterInfo> getParameters() {
@@ -112,20 +113,24 @@
}
protected Expression createParametersExpression() {
+ final int size = parameters.size();
+ final Expression[] expressions = new Expression[size];
+ for (int i = 0; i < size; i++) {
+ Expression parameterExpression = parameters.get(i).getExpression();
+ expressions[i] = parameterExpression;
+ }
return new Expression<Exchange>() {
public Object evaluate(Exchange exchange) {
- int size = parameters.size();
Object[] answer = new Object[size];
for (int i = 0; i < size; i++) {
- Expression parameterExpression = parameters.get(i).getExpression();
- answer[i] = parameterExpression.evaluate(exchange);
+ answer[i] = expressions[i].evaluate(exchange);
}
return answer;
}
@Override
public String toString() {
- return "ParametersExpression: " + parameters;
+ return "ParametersExpression: " + Arrays.asList(expressions);
}
};
}
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java Thu Aug 2 03:57:37 2007
@@ -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.component.bean;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.AccessibleObject;
+
+/**
+ * @version $Revision: $
+ */
+public interface MethodInvocation {
+ Method getMethod();
+
+ Object[] getArguments();
+
+ Object proceed() throws Throwable;
+
+ Object getThis();
+
+ AccessibleObject getStaticPart();
+}
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java Thu Aug 2 03:57:37 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.spring.util;
+package org.apache.camel.component.bean;
import org.apache.camel.Expression;
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java Thu Aug 2 03:57:37 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
import org.apache.camel.Expression;
Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java Thu Aug 2 03:57:37 2007
@@ -0,0 +1,53 @@
+/*
+ * 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.component.pojo;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Producer;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * An {@link java.lang.reflect.InvocationHandler} which invokes a
+ * message exchange on a camel {@link Endpoint}
+ *
+ * @version $Revision: $
+ */
+public class CamelInvocationHandler implements InvocationHandler {
+ private final Endpoint endpoint;
+ private final Producer producer;
+
+ public CamelInvocationHandler(Endpoint endpoint, Producer producer) {
+ this.endpoint = endpoint;
+ this.producer = producer;
+ }
+
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ PojoInvocation invocation = new PojoInvocation(proxy, method, args);
+ PojoExchange exchange = new PojoExchange(endpoint.getContext());
+ exchange.setInvocation(invocation);
+
+ producer.process(exchange);
+ Throwable fault = exchange.getException();
+ if (fault != null) {
+ throw new InvocationTargetException(fault);
+ }
+ return exchange.getOut().getBody();
+ }
+}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java Thu Aug 2 03:57:37 2007
@@ -16,18 +16,13 @@
*/
package org.apache.camel.component.pojo;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.camel.Endpoint;
import org.apache.camel.Producer;
-import org.apache.camel.spi.Provider;
import org.apache.camel.impl.DefaultComponent;
+import java.lang.reflect.Proxy;
+import java.util.Map;
+
/**
* Represents the component that manages {@link PojoEndpoint}. It holds the
* list of named pojos that queue endpoints reference.
@@ -35,18 +30,9 @@
* @version $Revision: 519973 $
*/
public class PojoComponent extends DefaultComponent<PojoExchange> {
- protected final HashMap<String, Object> services = new HashMap<String, Object>();
-
- public void addService(String uri, Object pojo) {
- services.put(uri, pojo);
- }
-
- public void removeService(String uri) {
- services.remove(uri);
- }
public Object getService(String uri) {
- return services.get(uri);
+ return getCamelContext().getRegistry().lookup(uri);
}
@Override
@@ -60,19 +46,7 @@
*/
static public Object createProxy(final Endpoint endpoint, ClassLoader cl, Class interfaces[]) throws Exception {
final Producer producer = endpoint.createProducer();
- return Proxy.newProxyInstance(cl, interfaces, new InvocationHandler() {
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- PojoInvocation invocation = new PojoInvocation(proxy, method, args);
- PojoExchange exchange = new PojoExchange(endpoint.getContext());
- exchange.setInvocation(invocation);
- producer.process(exchange);
- Throwable fault = exchange.getException();
- if (fault != null) {
- throw new InvocationTargetException(fault);
- }
- return exchange.getOut().getBody();
- }
- });
+ return Proxy.newProxyInstance(cl, interfaces, new CamelInvocationHandler(endpoint, producer));
}
/**
@@ -102,7 +76,6 @@
static public <T> T createProxy(Endpoint endpoint, Class<T> interfaceClass) throws Exception {
return (T) createProxy(endpoint, new Class[]{interfaceClass});
}
-
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java Thu Aug 2 03:57:37 2007
@@ -16,16 +16,14 @@
*/
package org.apache.camel.component.pojo;
+import org.apache.camel.Component;
import org.apache.camel.Consumer;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
-import org.apache.camel.Component;
import org.apache.camel.impl.DefaultEndpoint;
import org.apache.camel.impl.DefaultProducer;
-import java.lang.reflect.InvocationTargetException;
-
/**
* Represents a pojo endpoint that uses reflection
* to send messages around.
@@ -71,19 +69,7 @@
*/
public static void invoke(Object pojo, PojoExchange exchange) {
PojoInvocation invocation = exchange.getInvocation();
- try {
- Object response = invocation.getMethod().invoke(pojo, invocation.getArgs());
- exchange.getOut().setBody(response);
- }
- catch (InvocationTargetException e) {
- exchange.setException(e.getCause());
- }
- catch (RuntimeException e) {
- throw e;
- }
- catch (Throwable e) {
- throw new RuntimeException(e);
- }
+ invocation.invoke(pojo, exchange);
}
public PojoExchange createExchange() {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java Thu Aug 2 03:57:37 2007
@@ -16,7 +16,10 @@
*/
package org.apache.camel.component.pojo;
+import org.apache.camel.Exchange;
+
import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
public class PojoInvocation {
@@ -41,6 +44,27 @@
public Object getProxy() {
return proxy;
}
+
+ /**
+ * This causes us to invoke the endpoint Pojo using reflection.
+ *
+ * @param pojo
+ */
+ public void invoke(Object pojo, Exchange exchange) {
+ try {
+ Object response = getMethod().invoke(pojo, getArgs());
+ exchange.getOut().setBody(response);
+ }
+ catch (InvocationTargetException e) {
+ exchange.setException(e.getCause());
+ }
+ catch (RuntimeException e) {
+ throw e;
+ }
+ catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Thu Aug 2 03:57:37 2007
@@ -38,9 +38,11 @@
import org.apache.camel.util.FactoryFinder;
import org.apache.camel.util.NoFactoryAvailableException;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.jndi.JndiContext;
import static org.apache.camel.util.ServiceHelper.startServices;
import static org.apache.camel.util.ServiceHelper.stopServices;
+import javax.naming.Context;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
@@ -67,6 +69,19 @@
private boolean autoCreateComponents = true;
private LanguageResolver languageResolver = new DefaultLanguageResolver();
private Registry registry;
+
+ public DefaultCamelContext() {
+ }
+
+ /**
+ * Creates the {@link CamelContext} using the given JNDI
+ * context as the registry
+ *
+ * @param jndiContext
+ */
+ public DefaultCamelContext(Context jndiContext) {
+ setRegistry(new JndiRegistry(jndiContext));
+ }
/**
* Adds a component to the container.
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java Thu Aug 2 03:57:37 2007
@@ -18,10 +18,12 @@
package org.apache.camel.impl;
import org.apache.camel.spi.Registry;
+import org.apache.camel.RuntimeCamelException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
+import javax.naming.NameNotFoundException;
import java.util.Hashtable;
/**
@@ -32,6 +34,13 @@
public class JndiRegistry implements Registry {
private Context context;
+ public JndiRegistry() {
+ }
+
+ public JndiRegistry(Context context) {
+ this.context = context;
+ }
+
public <T> T lookup(String name, Class<T> type) {
Object value = lookup(name);
return type.cast(value);
@@ -41,9 +50,25 @@
try {
return getContext().lookup(name);
}
- catch (NamingException e) {
+ catch (NameNotFoundException e) {
return null;
}
+ catch (NamingException e) {
+ throw new RuntimeCamelException(e);
+ }
+ }
+
+ public void bind(String s, Object o) {
+ try {
+ getContext().bind(s, o);
+ }
+ catch (NamingException e) {
+ throw new RuntimeCamelException(e);
+ }
+ }
+
+ public void close() throws NamingException {
+ getContext().close();
}
public Context getContext() throws NamingException {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java Thu Aug 2 03:57:37 2007
@@ -57,6 +57,12 @@
if (toType.isInstance(value)) {
return toType.cast(value);
}
+ else if (toType.isPrimitive()) {
+ Class primitiveType = ObjectHelper.convertPrimitiveTypeToWrapperType(toType);
+ if (primitiveType != toType) {
+ return (T) convertTo(primitiveType, value);
+ }
+ }
checkLoaded();
TypeConverter converter = getOrFindTypeConverter(toType, value);
if (converter != null) {
@@ -74,6 +80,7 @@
if (boolean.class.isAssignableFrom(toType)) {
return (T) Boolean.FALSE;
}
+
return null;
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Thu Aug 2 03:57:37 2007
@@ -317,4 +317,42 @@
}
}
+ /**
+ * Returns true if a class is assignable from another class like the
+ * {@link Class#isAssignableFrom(Class)} method but which also includes
+ * coercion between primitive types to deal with Java 5 primitive type wrapping
+ */
+ public static boolean isAssignableFrom(Class a, Class b) {
+ a = convertPrimitiveTypeToWrapperType(a);
+ b = convertPrimitiveTypeToWrapperType(b);
+ return a.isAssignableFrom(b);
+ }
+
+ /**
+ * Converts primitive types such as int to its wrapper type like {@link Integeer}
+ */
+ public static Class convertPrimitiveTypeToWrapperType(Class type) {
+ if (type.isPrimitive()) {
+ if (type == int.class) {
+ return Integer.class;
+ }
+ else if (type == long.class) {
+ return Long.class;
+ }
+ else if (type == double.class) {
+ return Double.class;
+ }
+ else if (type == float.class) {
+ return Float.class;
+ }
+ else if (type == short.class) {
+ return Short.class;
+ }
+ else if (type == byte.class) {
+ return Byte.class;
+ }
+ }
+ return type;
+ }
+
}
Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java Thu Aug 2 03:57:37 2007
@@ -0,0 +1,36 @@
+/*
+ * 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.util.jndi;
+
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.spi.InitialContextFactory;
+import java.util.Hashtable;
+
+/**
+ * A factory of the Cameel InitialContext which allows a Map to be used to create a
+ * JNDI context.
+ *
+ * @version $Revision: 1.2 $
+ */
+public class CamelInitialContextFactory implements InitialContextFactory {
+
+ public Context getInitialContext(Hashtable environment) throws NamingException {
+ return new JndiContext(environment, environment);
+ }
+}
Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java Thu Aug 2 03:57:37 2007
@@ -0,0 +1,414 @@
+/*
+ * 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.util.jndi;
+
+import javax.naming.Binding;
+import javax.naming.CompositeName;
+import javax.naming.Context;
+import javax.naming.LinkRef;
+import javax.naming.Name;
+import javax.naming.NameClassPair;
+import javax.naming.NameNotFoundException;
+import javax.naming.NameParser;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.NotContextException;
+import javax.naming.OperationNotSupportedException;
+import javax.naming.Reference;
+import javax.naming.spi.NamingManager;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * A default JNDI context
+ *
+ * @version $Revision: 1.2 $ $Date: 2005/08/27 03:52:39 $
+ */
+public class JndiContext implements Context, Serializable {
+ public static final String SEPARATOR = "/";
+
+ private static final long serialVersionUID = -5754338187296859149L;
+
+ protected static final NameParser nameParser = new NameParser() {
+ public Name parse(String name) throws NamingException {
+ return new CompositeName(name);
+ }
+ };
+
+ private final Hashtable environment; // environment for this context
+ private final Map bindings; // bindings at my level
+ private final Map treeBindings; // all bindings under me
+
+ private boolean frozen = false;
+ private String nameInNamespace = "";
+
+ public JndiContext() {
+ this(new Hashtable());
+ }
+
+ public JndiContext(Hashtable env) {
+ this(env, new ConcurrentHashMap());
+ }
+
+ public JndiContext(Hashtable environment, Map bindings) {
+ if (environment == null) {
+ this.environment = new Hashtable();
+ }
+ else {
+ this.environment = new Hashtable(environment);
+ }
+ this.bindings = bindings;
+ treeBindings = new HashMap();
+ }
+
+ public JndiContext(Hashtable environment, Map bindings, String nameInNamespace) {
+ this(environment, bindings);
+ this.nameInNamespace = nameInNamespace;
+ }
+
+ protected JndiContext(JndiContext clone, Hashtable env) {
+ this.bindings = clone.bindings;
+ this.treeBindings = clone.treeBindings;
+ this.environment = new Hashtable(env);
+ }
+
+ protected JndiContext(JndiContext clone, Hashtable env, String nameInNamespace) {
+ this(clone, env);
+ this.nameInNamespace = nameInNamespace;
+ }
+
+ public void freeze() {
+ frozen = true;
+ }
+
+ boolean isFrozen() {
+ return frozen;
+ }
+
+ /**
+ * internalBind is intended for use only during setup or possibly by suitably synchronized superclasses.
+ * It binds every possible lookup into a map in each context. To do this, each context
+ * strips off one name segment and if necessary creates a new context for it. Then it asks that context
+ * to bind the remaining name. It returns a map containing all the bindings from the next context, plus
+ * the context it just created (if it in fact created it). (the names are suitably extended by the segment
+ * originally lopped off).
+ *
+ * @param name
+ * @param value
+ * @return
+ * @throws javax.naming.NamingException
+ */
+ protected Map internalBind(String name, Object value) throws NamingException {
+ assert name != null && name.length() > 0;
+ assert !frozen;
+
+ Map newBindings = new HashMap();
+ int pos = name.indexOf('/');
+ if (pos == -1) {
+ if (treeBindings.put(name, value) != null) {
+ throw new NamingException("Something already bound at " + name);
+ }
+ bindings.put(name, value);
+ newBindings.put(name, value);
+ }
+ else {
+ String segment = name.substring(0, pos);
+ assert segment != null;
+ assert !segment.equals("");
+ Object o = treeBindings.get(segment);
+ if (o == null) {
+ o = newContext();
+ treeBindings.put(segment, o);
+ bindings.put(segment, o);
+ newBindings.put(segment, o);
+ }
+ else if (!(o instanceof JndiContext)) {
+ throw new NamingException("Something already bound where a subcontext should go");
+ }
+ JndiContext defaultContext = (JndiContext) o;
+ String remainder = name.substring(pos + 1);
+ Map subBindings = defaultContext.internalBind(remainder, value);
+ for (Iterator iterator = subBindings.entrySet().iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ String subName = segment + "/" + (String) entry.getKey();
+ Object bound = entry.getValue();
+ treeBindings.put(subName, bound);
+ newBindings.put(subName, bound);
+ }
+ }
+ return newBindings;
+ }
+
+ protected JndiContext newContext() {
+ return new JndiContext();
+ }
+
+ public Object addToEnvironment(String propName, Object propVal) throws NamingException {
+ return environment.put(propName, propVal);
+ }
+
+ public Hashtable getEnvironment() throws NamingException {
+ return (Hashtable) environment.clone();
+ }
+
+ public Object removeFromEnvironment(String propName) throws NamingException {
+ return environment.remove(propName);
+ }
+
+ public Object lookup(String name) throws NamingException {
+ if (name.length() == 0) {
+ return this;
+ }
+ Object result = treeBindings.get(name);
+ if (result == null) {
+ result = bindings.get(name);
+ }
+ if (result == null) {
+ int pos = name.indexOf(':');
+ if (pos > 0) {
+ String scheme = name.substring(0, pos);
+ Context ctx = NamingManager.getURLContext(scheme, environment);
+ if (ctx == null) {
+ throw new NamingException("scheme " + scheme + " not recognized");
+ }
+ return ctx.lookup(name);
+ }
+ else {
+ // Split out the first name of the path
+ // and look for it in the bindings map.
+ CompositeName path = new CompositeName(name);
+
+ if (path.size() == 0) {
+ return this;
+ }
+ else {
+ String first = path.get(0);
+ Object value = bindings.get(first);
+ if (value == null) {
+ throw new NameNotFoundException(name);
+ }
+ else if (value instanceof Context && path.size() > 1) {
+ Context subContext = (Context) value;
+ value = subContext.lookup(path.getSuffix(1));
+ }
+ return value;
+ }
+ }
+ }
+ if (result instanceof LinkRef) {
+ LinkRef ref = (LinkRef) result;
+ result = lookup(ref.getLinkName());
+ }
+ if (result instanceof Reference) {
+ try {
+ result = NamingManager.getObjectInstance(result, null, null, this.environment);
+ }
+ catch (NamingException e) {
+ throw e;
+ }
+ catch (Exception e) {
+ throw (NamingException) new NamingException("could not look up : " + name).initCause(e);
+ }
+ }
+ if (result instanceof JndiContext) {
+ String prefix = getNameInNamespace();
+ if (prefix.length() > 0) {
+ prefix = prefix + SEPARATOR;
+ }
+ result = new JndiContext((JndiContext) result, environment, prefix + name);
+ }
+ return result;
+ }
+
+ public Object lookup(Name name) throws NamingException {
+ return lookup(name.toString());
+ }
+
+ public Object lookupLink(String name) throws NamingException {
+ return lookup(name);
+ }
+
+ public Name composeName(Name name, Name prefix) throws NamingException {
+ Name result = (Name) prefix.clone();
+ result.addAll(name);
+ return result;
+ }
+
+ public String composeName(String name, String prefix) throws NamingException {
+ CompositeName result = new CompositeName(prefix);
+ result.addAll(new CompositeName(name));
+ return result.toString();
+ }
+
+ public NamingEnumeration list(String name) throws NamingException {
+ Object o = lookup(name);
+ if (o == this) {
+ return new ListEnumeration();
+ }
+ else if (o instanceof Context) {
+ return ((Context) o).list("");
+ }
+ else {
+ throw new NotContextException();
+ }
+ }
+
+ public NamingEnumeration listBindings(String name) throws NamingException {
+ Object o = lookup(name);
+ if (o == this) {
+ return new ListBindingEnumeration();
+ }
+ else if (o instanceof Context) {
+ return ((Context) o).listBindings("");
+ }
+ else {
+ throw new NotContextException();
+ }
+ }
+
+ public Object lookupLink(Name name) throws NamingException {
+ return lookupLink(name.toString());
+ }
+
+ public NamingEnumeration list(Name name) throws NamingException {
+ return list(name.toString());
+ }
+
+ public NamingEnumeration listBindings(Name name) throws NamingException {
+ return listBindings(name.toString());
+ }
+
+ public void bind(Name name, Object value) throws NamingException {
+ bind(name.toString(), value);
+ }
+
+ public void bind(String name, Object value) throws NamingException {
+ if (isFrozen()) {
+ throw new OperationNotSupportedException();
+ }
+ else {
+ internalBind(name, value);
+ }
+ }
+
+ public void close() throws NamingException {
+ // ignore
+ }
+
+ public Context createSubcontext(Name name) throws NamingException {
+ throw new OperationNotSupportedException();
+ }
+
+ public Context createSubcontext(String name) throws NamingException {
+ throw new OperationNotSupportedException();
+ }
+
+ public void destroySubcontext(Name name) throws NamingException {
+ throw new OperationNotSupportedException();
+ }
+
+ public void destroySubcontext(String name) throws NamingException {
+ throw new OperationNotSupportedException();
+ }
+
+ public String getNameInNamespace() throws NamingException {
+ return nameInNamespace;
+ }
+
+ public NameParser getNameParser(Name name) throws NamingException {
+ return nameParser;
+ }
+
+ public NameParser getNameParser(String name) throws NamingException {
+ return nameParser;
+ }
+
+ public void rebind(Name name, Object value) throws NamingException {
+ bind(name, value);
+ }
+
+ public void rebind(String name, Object value) throws NamingException {
+ bind(name, value);
+ }
+
+ public void rename(Name oldName, Name newName) throws NamingException {
+ throw new OperationNotSupportedException();
+ }
+
+ public void rename(String oldName, String newName) throws NamingException {
+ throw new OperationNotSupportedException();
+ }
+
+ public void unbind(Name name) throws NamingException {
+ throw new OperationNotSupportedException();
+ }
+
+ public void unbind(String name) throws NamingException {
+ throw new OperationNotSupportedException();
+ }
+
+ private abstract class LocalNamingEnumeration implements NamingEnumeration {
+ private Iterator i = bindings.entrySet().iterator();
+
+ public boolean hasMore() throws NamingException {
+ return i.hasNext();
+ }
+
+ public boolean hasMoreElements() {
+ return i.hasNext();
+ }
+
+ protected Map.Entry getNext() {
+ return (Map.Entry) i.next();
+ }
+
+ public void close() throws NamingException {
+ }
+ }
+
+ private class ListEnumeration extends LocalNamingEnumeration {
+ ListEnumeration() {
+ }
+
+ public Object next() throws NamingException {
+ return nextElement();
+ }
+
+ public Object nextElement() {
+ Map.Entry entry = getNext();
+ return new NameClassPair((String) entry.getKey(), entry.getValue().getClass().getName());
+ }
+ }
+
+ private class ListBindingEnumeration extends LocalNamingEnumeration {
+ ListBindingEnumeration() {
+ }
+
+ public Object next() throws NamingException {
+ return nextElement();
+ }
+
+ public Object nextElement() {
+ Map.Entry entry = getNext();
+ return new Binding((String) entry.getKey(), entry.getValue());
+ }
+ }
+}
Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html Thu Aug 2 03:57:37 2007
@@ -0,0 +1,25 @@
+<!--
+ 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.
+-->
+<html>
+<head>
+</head>
+<body>
+
+A simple JNDI context which can be used with the JndiRegistry
+
+</body>
+</html>
Copied: activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean (from r562013, activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/pojo)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean?view=diff&rev=562072&p1=activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/pojo&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/pojo (original)
+++ activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean Thu Aug 2 03:57:37 2007
@@ -15,4 +15,4 @@
# limitations under the License.
#
-class=org.apache.camel.component.pojo.PojoComponent
\ No newline at end of file
+class=org.apache.camel.component.bean.BeanComponent
\ No newline at end of file
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java Thu Aug 2 03:57:37 2007
@@ -21,6 +21,7 @@
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
+import org.apache.camel.util.jndi.JndiContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
@@ -30,14 +31,15 @@
public class PojoRouteTest extends TestCase {
public void testPojoRoutes() throws Exception {
-
- CamelContext camelContext = new DefaultCamelContext();
-
// START SNIPPET: register
- PojoComponent component = (PojoComponent)camelContext.getComponent("pojo");
- component.addService("bye", new SayService("Good Bye!"));
+ // lets populate the context with the services we need
+ // note that we could just use a spring.xml file to avoid this step
+ JndiContext context = new JndiContext();
+ context.bind("bye", new SayService("Good Bye!"));
+
+ CamelContext camelContext = new DefaultCamelContext(context);
// END SNIPPET: register
-
+
// START SNIPPET: route
// lets add simple route
camelContext.addRoutes(new RouteBuilder() {
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java Thu Aug 2 03:57:37 2007
@@ -17,17 +17,16 @@
*/
package org.apache.camel.component.pojo.timer;
-import java.util.concurrent.atomic.AtomicInteger;
-
import junit.framework.TestCase;
-
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.pojo.PojoComponent;
import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.jndi.JndiContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+
/**
* @version $Revision: 520220 $
*/
@@ -35,33 +34,31 @@
private static final transient Log log = LogFactory.getLog(TimerRouteTest.class);
public void testPojoRoutes() throws Exception {
-
- CamelContext container = new DefaultCamelContext();
-
final AtomicInteger hitCount = new AtomicInteger();
- PojoComponent component = new PojoComponent();
- component.addService("bar", new Runnable(){
+ JndiContext context = new JndiContext();
+ context.bind("bar", new Runnable(){
public void run() {
log.debug("hit");
hitCount.incrementAndGet();
}
});
- container.addComponent("pojo", component);
-
+
+ CamelContext camelContext = new DefaultCamelContext(context);
+
// lets add some routes
- container.addRoutes(new RouteBuilder() {
+ camelContext.addRoutes(new RouteBuilder() {
public void configure() {
from("timer://foo?fixedRate=true&delay=0&period=500").to("pojo:bar");
}
});
- container.start();
+ camelContext.start();
// now lets wait for the timer to fire a few times.
Thread.sleep(1000*2);
assertTrue("", hitCount.get()>= 3 );
- container.stop();
+ camelContext.stop();
}
}
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java Thu Aug 2 03:57:37 2007
@@ -144,4 +144,9 @@
boolean value = converter.convertTo(boolean.class, null);
assertFalse(value);
}
+
+ public void testPrimitiveIntConversion() throws Exception {
+ int value = converter.convertTo(int.class, 4);
+ assertEquals("value", 4, value);
+ }
}
Added: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java (added)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java Thu Aug 2 03:57:37 2007
@@ -0,0 +1,49 @@
+/*
+ * 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 junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @version $Revision: $
+ */
+public class RegistryTest extends TestCase {
+
+ protected JndiRegistry registry = new JndiRegistry();
+
+ public void testBind() throws Exception {
+ List foo = Arrays.asList("a", "b", "c");
+
+ registry.bind("foo", foo);
+
+ List list = registry.lookup("foo", List.class);
+ assertEquals("Should be same!", foo, list);
+ }
+
+ public void testDefaultProviderAllowsValuesToBeCreatedInThePropertiesFile() throws Exception {
+ Object value = registry.lookup("foo");
+ assertEquals("lookup of foo", "bar", value);
+ }
+
+ public void testLookupOfUnknownName() throws Exception {
+ Object value = registry.lookup("No such entry!");
+ assertNull("Should not find anything!", value);
+ }
+}
Added: activemq/camel/trunk/camel-core/src/test/resources/jndi.properties
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/resources/jndi.properties?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/resources/jndi.properties (added)
+++ activemq/camel/trunk/camel-core/src/test/resources/jndi.properties Thu Aug 2 03:57:37 2007
@@ -0,0 +1,25 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+# START SNIPPET: jndi
+
+java.naming.factory.initial = org.apache.camel.util.jndi.CamelInitialContextFactory
+
+# the following properties will be copied into the context
+foo = bar
+
+# END SNIPPET: jndi
Modified: activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java Thu Aug 2 03:57:37 2007
@@ -17,17 +17,17 @@
*/
package org.apache.camel.component.rmi;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.rmi.registry.LocateRegistry;
-
import junit.framework.TestCase;
-
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.pojo.PojoComponent;
import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.jndi.JndiContext;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.rmi.registry.LocateRegistry;
/**
* @version $Revision: 520220 $
@@ -42,11 +42,11 @@
// Boot up a local RMI registry
LocateRegistry.createRegistry(1099);
- CamelContext camelContext = new DefaultCamelContext();
-
// START SNIPPET: register
- PojoComponent component = (PojoComponent)camelContext.getComponent("pojo");
- component.addService("bye", new SayService("Good Bye!"));
+ JndiContext context = new JndiContext();
+ context.bind("bye", new SayService("Good Bye!"));
+
+ CamelContext camelContext = new DefaultCamelContext(context);
// END SNIPPET: register
// START SNIPPET: route
Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java Thu Aug 2 03:57:37 2007
@@ -17,7 +17,6 @@
*/
package org.apache.camel.spring;
-import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.CamelTemplate;
import org.apache.camel.Consumer;
@@ -27,10 +26,8 @@
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.spring.util.DefaultMethodInvocationStrategy;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
+import org.apache.camel.component.bean.BeanProcessor;
import org.apache.camel.spring.util.ReflectionUtils;
-import org.apache.camel.spring.bind.BeanProcessor;
import org.apache.camel.util.ObjectHelper;
import static org.apache.camel.util.ObjectHelper.isNotNullAndNonEmpty;
import org.apache.commons.logging.Log;
Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java Thu Aug 2 03:57:37 2007
@@ -20,7 +20,9 @@
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.Processor;
-import org.apache.camel.component.bean.BeanComponent;
+import org.apache.camel.component.bean.BeanProcessor;
+import org.apache.camel.component.bean.DefaultMethodInvocationStrategy;
+import org.apache.camel.component.bean.MethodInvocationStrategy;
import org.apache.camel.component.event.EventComponent;
import org.apache.camel.component.event.EventEndpoint;
import org.apache.camel.impl.DefaultCamelContext;
@@ -28,12 +30,9 @@
import org.apache.camel.spi.ComponentResolver;
import org.apache.camel.spi.Injector;
import org.apache.camel.spi.Registry;
-import org.apache.camel.spring.bind.BeanProcessor;
import org.apache.camel.spring.spi.ApplicationContextRegistry;
import org.apache.camel.spring.spi.SpringComponentResolver;
import org.apache.camel.spring.spi.SpringInjector;
-import org.apache.camel.spring.util.DefaultMethodInvocationStrategy;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
@@ -110,8 +109,7 @@
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
- addComponent("bean", new BeanComponent(applicationContext));
-
+
if (applicationContext instanceof ConfigurableApplicationContext) {
addComponent("event", new EventComponent(applicationContext));
}
Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java Thu Aug 2 03:57:37 2007
@@ -24,7 +24,7 @@
import org.springframework.remoting.support.UrlBasedRemoteAccessor;
/**
- * Creates a Proxy to Camel Pojo Endpoint.
+ * A {@link FactoryBean} to create a Proxy to a a Camel Pojo Endpoint.
*
* @author chirino
*/
Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java Thu Aug 2 03:57:37 2007
@@ -17,65 +17,30 @@
*/
package org.apache.camel.spring.remoting;
-import org.apache.camel.CamelContext;
-import org.apache.camel.component.pojo.PojoComponent;
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.FactoryBean;
import org.springframework.remoting.support.RemoteExporter;
/**
- * Exports a Spring defined service to Camel as a Pojo endpoint.
+ * A {@link FactoryBean} to create a proxy to a service exposing a given {@link #getServiceInterface()}
*
* @author chirino
*/
-public class CamelServiceExporter extends RemoteExporter implements InitializingBean, DisposableBean {
- CamelContext camelContext;
- PojoComponent pojoComponent;
- String serviceName;
+public class CamelServiceExporter extends RemoteExporter implements FactoryBean {
+ private boolean singleton = true;
- public void afterPropertiesSet() throws Exception {
- if (serviceName == null) {
- throw new IllegalArgumentException("The serviceName must be configured.");
- }
- if (pojoComponent == null) {
- if (camelContext == null) {
- throw new IllegalArgumentException("A pojoComponent or camelContext must be configured.");
- }
- pojoComponent = (PojoComponent) camelContext.getComponent("pojo");
- if (pojoComponent == null) {
- throw new IllegalArgumentException("The pojoComponent could not be found.");
- }
- }
- pojoComponent.addService(serviceName, getProxyForService());
+ public Object getObject() throws Exception {
+ return getProxyForService();
}
- public void destroy() throws Exception {
- if (serviceName != null) {
- pojoComponent.removeService(serviceName);
- }
+ public Class getObjectType() {
+ return getServiceInterface();
}
- public PojoComponent getPojoComponent() {
- return pojoComponent;
+ public boolean isSingleton() {
+ return singleton;
}
- public void setPojoComponent(PojoComponent pojoComponent) {
- this.pojoComponent = pojoComponent;
- }
-
- public CamelContext getCamelContext() {
- return camelContext;
- }
-
- public void setCamelContext(CamelContext camelContext) {
- this.camelContext = camelContext;
- }
-
- public String getServiceName() {
- return serviceName;
- }
-
- public void setServiceName(String serviceName) {
- this.serviceName = serviceName;
+ public void setSingleton(boolean singleton) {
+ this.singleton = singleton;
}
}
Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java Thu Aug 2 03:57:37 2007
@@ -37,7 +37,7 @@
assertEquals("Returned value", "Bye James!", value);
}
- public void TODO_testChooseMethodUsingBodyType() throws Exception {
+ public void testChooseMethodUsingBodyType() throws Exception {
Object value = template.sendBody("bean:myBean", 4);
assertEquals("Returned value", 8L, value);
Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java Thu Aug 2 03:57:37 2007
@@ -18,12 +18,14 @@
import junit.framework.TestCase;
import org.apache.camel.Exchange;
-import org.apache.camel.spring.util.DefaultMethodInvocationStrategy;
+import org.apache.camel.component.bean.BeanProcessor;
+import org.apache.camel.component.bean.BeanInfo;
+import org.apache.camel.component.bean.DefaultMethodInvocationStrategy;
+import org.apache.camel.component.bean.MethodInvocation;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
-import org.aopalliance.intercept.MethodInvocation;
/**
* @version $Revision: $
Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java Thu Aug 2 03:57:37 2007
@@ -20,16 +20,23 @@
import junit.framework.TestCase;
import org.apache.camel.CamelContext;
import org.apache.camel.spring.SpringCamelContext;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @version $Revision: 520220 $
*/
public class SpringRemotingRouteTest extends TestCase {
+ private static final Log log = LogFactory.getLog(SpringRemotingRouteTest.class);
+
public void testPojoRoutes() throws Exception {
ClassPathXmlApplicationContext spring = new ClassPathXmlApplicationContext("org/apache/camel/spring/remoting/spring.xml");
- spring.getBean("serviceExporter");
+ Object service = spring.getBean("say");
+ log.info("Found service!: " + service);
+ assertTrue("not an ISay!", service instanceof ISay);
+
CamelContext camelContext = SpringCamelContext.springCamelContext(spring);
// START SNIPPET: invoke
Modified: activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml Thu Aug 2 03:57:37 2007
@@ -26,9 +26,7 @@
<bean id="sayService" class="org.apache.camel.spring.remoting.SayService"/>
<!-- Exposes the above bean as via the pojo:say endpoint -->
- <bean id="serviceExporter" class="org.apache.camel.spring.remoting.CamelServiceExporter">
- <property name="camelContext" ref="camel"/>
- <property name="serviceName" value="say"/>
+ <bean id="say" class="org.apache.camel.spring.remoting.CamelServiceExporter">
<property name="service" ref="sayService"/>
<property name="serviceInterface" value="org.apache.camel.spring.remoting.ISay"/>
</bean>