Author: jstrachan
Date: Fri Aug 3 12:38:02 2007
New Revision: 562558
URL: http://svn.apache.org/viewvc?view=rev&rev=562558
Log:
Added <bean> to the XML language along with <proxyFactory> and
<serviceExporter>. Also various refactorings to tidy things up.
Added:
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/main/java/org/apache/camel/spring/remoting/SendBeforeInterceptor.java
Added:
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=auto&rev=562558
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
(added)
+++
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
Fri Aug 3 12:38:02 2007
@@ -0,0 +1,101 @@
+/**
+ *
+ * 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.spring.remoting;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.bean.ProxyHelper;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.remoting.support.UrlBasedRemoteAccessor;
+
+/**
+ * A [EMAIL PROTECTED] FactoryBean} to create a Proxy to a a Camel Pojo
Endpoint.
+ *
+ * @author chirino
+ */
+public class CamelProxyFactoryBean extends UrlBasedRemoteAccessor implements
FactoryBean, CamelContextAware {
+ private CamelContext camelContext;
+ private Endpoint endpoint;
+ private Object serviceProxy;
+
+ @Override
+ public void afterPropertiesSet() {
+ super.afterPropertiesSet();
+ try {
+ if (endpoint == null) {
+ if (getServiceUrl() == null || camelContext == null) {
+ throw new IllegalArgumentException("If endpoint is not
specified, the serviceUrl and camelContext must be specified.");
+ }
+
+ endpoint = camelContext.getEndpoint(getServiceUrl());
+ if (endpoint == null) {
+ throw new IllegalArgumentException("Could not resolve
endpoint: " + getServiceUrl());
+ }
+ }
+
+ this.serviceProxy = ProxyHelper.createProxy(endpoint,
getServiceInterface());
+ }
+ catch (Exception e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+
+ public Class getServiceInterface() {
+ return super.getServiceInterface();
+ }
+
+
+ public String getServiceUrl() {
+ return super.getServiceUrl();
+ }
+
+
+ public Object getObject() throws Exception {
+ return serviceProxy;
+ }
+
+
+ public Class getObjectType() {
+ return getServiceInterface();
+ }
+
+
+ public boolean isSingleton() {
+ return true;
+ }
+
+
+ public Endpoint getEndpoint() {
+ return endpoint;
+ }
+
+ public void setEndpoint(Endpoint endpoint) {
+ this.endpoint = endpoint;
+ }
+
+
+ public CamelContext getCamelContext() {
+ return camelContext;
+ }
+
+ public void setCamelContext(CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+}
Added:
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=auto&rev=562558
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java
(added)
+++
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java
Fri Aug 3 12:38:02 2007
@@ -0,0 +1,100 @@
+/**
+ *
+ * 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.spring.remoting;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.Consumer;
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.bean.BeanProcessor;
+import org.apache.camel.util.CamelContextHelper;
+import static org.apache.camel.util.ObjectHelper.notNull;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.remoting.support.RemoteExporter;
+
+/**
+ * A [EMAIL PROTECTED] FactoryBean} to create a proxy to a service exposing a
given [EMAIL PROTECTED] #getServiceInterface()}
+ *
+ * @author chirino
+ */
+public class CamelServiceExporter extends RemoteExporter implements
InitializingBean, DisposableBean, ApplicationContextAware, CamelContextAware {
+ private String uri;
+ private CamelContext camelContext;
+ private Consumer consumer;
+ private String serviceRef;
+ private ApplicationContext applicationContext;
+
+ public String getUri() {
+ return uri;
+ }
+
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+
+ public CamelContext getCamelContext() {
+ return camelContext;
+ }
+
+ public void setCamelContext(CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+
+ public String getServiceRef() {
+ return serviceRef;
+ }
+
+ public void setServiceRef(String serviceRef) {
+ this.serviceRef = serviceRef;
+ }
+
+ public ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+ public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
+ this.applicationContext = applicationContext;
+ }
+
+ public void afterPropertiesSet() throws Exception {
+ // lets bind the URI to a pojo
+ notNull(uri, "uri");
+ notNull(camelContext, "camelContext");
+ if (serviceRef != null && getService() == null && applicationContext
!= null) {
+ setService(applicationContext.getBean(serviceRef));
+ }
+
+ Endpoint endpoint =
CamelContextHelper.getMandatoryEndpoint(camelContext, uri);
+ Object proxy = getProxyForService();
+
+ consumer = endpoint.createConsumer(new BeanProcessor(proxy,
camelContext));
+ consumer.start();
+ }
+
+ public void destroy() throws Exception {
+ if (consumer != null) {
+ consumer.stop();
+ }
+ }
+
+}
Added:
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/SendBeforeInterceptor.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/SendBeforeInterceptor.java?view=auto&rev=562558
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/SendBeforeInterceptor.java
(added)
+++
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/SendBeforeInterceptor.java
Fri Aug 3 12:38:02 2007
@@ -0,0 +1,76 @@
+/*
+ * 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.spring.remoting;
+
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Producer;
+import org.apache.camel.component.bean.CamelInvocationHandler;
+import org.apache.camel.util.CamelContextHelper;
+import static org.apache.camel.util.ObjectHelper.notNull;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+
+/**
+ * A Spring interceptor which sends a message exchange to an endpoint before
the method is invoked
+ *
+ * @version $Revision: $
+ */
+public class SendBeforeInterceptor implements MethodInterceptor,
CamelContextAware, InitializingBean, DisposableBean {
+ private String uri;
+ private CamelContext camelContext;
+ private CamelInvocationHandler invocationHandler;
+ private Producer producer;
+
+ public Object invoke(MethodInvocation invocation) throws Throwable {
+ invocationHandler.invoke(invocation.getThis(), invocation.getMethod(),
invocation.getArguments());
+ return invocation.proceed();
+ }
+
+ public void afterPropertiesSet() throws Exception {
+ notNull(uri, "uri");
+ notNull(camelContext, "camelContext");
+
+ Endpoint endpoint =
CamelContextHelper.getMandatoryEndpoint(camelContext, uri);
+ producer = endpoint.createProducer();
+ producer.start();
+ invocationHandler = new CamelInvocationHandler(endpoint, producer);
+ }
+
+ public void destroy() throws Exception {
+ if (producer != null) {
+ producer.stop();
+ }
+ }
+
+ public void setCamelContext(CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+
+ // Properties
+ //-----------------------------------------------------------------------
+ public String getUri() {
+ return uri;
+ }
+
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+}