Author: chirino
Date: Tue May  1 06:57:33 2007
New Revision: 534095

URL: http://svn.apache.org/viewvc?view=rev&rev=534095
Log:
Added a camel-rmi component that can bind PojoExchanges to RMI/JRMP

Added:
    activemq/camel/trunk/camel-rmi/
    activemq/camel/trunk/camel-rmi/pom.xml
    activemq/camel/trunk/camel-rmi/src/
    activemq/camel/trunk/camel-rmi/src/main/
    activemq/camel/trunk/camel-rmi/src/main/java/
    activemq/camel/trunk/camel-rmi/src/main/java/org/
    activemq/camel/trunk/camel-rmi/src/main/java/org/apache/
    activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/
    activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/
    activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/
    
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiComponent.java
    
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiConsumer.java
    
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiEndpoint.java
    
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiProducer.java
    
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/package.html
    activemq/camel/trunk/camel-rmi/src/main/resources/
    activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/
    activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/
    activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/
    
activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/apache/
    
activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/apache/camel/
    
activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/apache/camel/component/
    
activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/apache/camel/component/rmi
    activemq/camel/trunk/camel-rmi/src/test/
    activemq/camel/trunk/camel-rmi/src/test/ide-resources/
    activemq/camel/trunk/camel-rmi/src/test/ide-resources/log4j.properties
    activemq/camel/trunk/camel-rmi/src/test/java/
    activemq/camel/trunk/camel-rmi/src/test/java/org/
    activemq/camel/trunk/camel-rmi/src/test/java/org/apache/
    activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/
    activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/
    activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/
    
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/ISay.java
    
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
    
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/SayService.java
    activemq/camel/trunk/camel-rmi/src/test/resources/
    activemq/camel/trunk/camel-rmi/src/test/resources/log4j.properties
    activemq/camel/trunk/camel-rmi/src/test/resources/org/
    activemq/camel/trunk/camel-rmi/src/test/resources/org/apache/
    activemq/camel/trunk/camel-rmi/src/test/resources/org/apache/camel/
    
activemq/camel/trunk/camel-rmi/src/test/resources/org/apache/camel/component/
    
activemq/camel/trunk/camel-rmi/src/test/resources/org/apache/camel/component/rmi/
Modified:
    activemq/camel/trunk/pom.xml

Added: activemq/camel/trunk/camel-rmi/pom.xml
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/pom.xml?view=auto&rev=534095
==============================================================================
--- activemq/camel/trunk/camel-rmi/pom.xml (added)
+++ activemq/camel/trunk/camel-rmi/pom.xml Tue May  1 06:57:33 2007
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  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.
+-->
+
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns="http://maven.apache.org/POM/4.0.0";>
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>camel-rmi</artifactId>
+  <name>Camel :: RMI</name>
+  <description>Camel RMI support</description>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+    </dependency>
+    
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+      <type>test-jar</type>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.activemq</groupId>
+      <artifactId>apache-activemq</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <forkMode>once</forkMode>
+         <argLine>-Duser.home=C:\DOCUME~1\chirino</argLine>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>

Added: 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiComponent.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiComponent.java?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiComponent.java
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiComponent.java
 Tue May  1 06:57:33 2007
@@ -0,0 +1,45 @@
+/**
+ *
+ * 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.rmi;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.pojo.PojoExchange;
+import org.apache.camel.impl.DefaultComponent;
+
+/**
+ * @version $Revision:520964 $
+ */
+public class RmiComponent extends DefaultComponent<PojoExchange> {
+
+       public RmiComponent() {
+       }
+
+       public RmiComponent(CamelContext context) {
+               super(context);
+       }
+
+       @Override
+       protected Endpoint<PojoExchange> createEndpoint(String uri,
+                       String remaining, Map parameters) throws Exception {
+               return new RmiEndpoint(uri, this);
+       }
+
+}

Added: 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiConsumer.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiConsumer.java?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiConsumer.java
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiConsumer.java
 Tue May  1 06:57:33 2007
@@ -0,0 +1,107 @@
+/**
+ *
+ * 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.rmi;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.rmi.Remote;
+import java.rmi.registry.Registry;
+import java.rmi.server.UnicastRemoteObject;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.component.pojo.PojoExchange;
+import org.apache.camel.component.pojo.PojoInvocation;
+import org.apache.camel.impl.DefaultConsumer;
+
+/**
+ * A [EMAIL PROTECTED] Consumer} which uses RMI's [EMAIL PROTECTED] 
UnicastRemoteObject} to consume method invocations.
+ *
+ * @version $Revision: 533758 $
+ */
+public class RmiConsumer extends DefaultConsumer<PojoExchange> implements 
InvocationHandler {
+
+       private final RmiEndpoint endpoint;
+       private Remote stub;
+       private Remote proxy;
+
+       public RmiConsumer(RmiEndpoint endpoint, Processor<PojoExchange> 
processor) {
+               super(endpoint, processor);
+               this.endpoint = endpoint;
+               
+       }
+
+       @Override
+       protected void doStart() throws Exception {
+               Class[] interfaces = new 
Class[endpoint.getRemoteInterfaces().size()];
+               endpoint.getRemoteInterfaces().toArray(interfaces);
+               proxy = (Remote) 
Proxy.newProxyInstance(endpoint.getClassLoader(), interfaces, this);
+               stub = 
UnicastRemoteObject.exportObject(proxy,endpoint.getPort());
+               
+        try { 
+               Registry registry = endpoint.getRegistry();
+               String name = endpoint.getName();               
+                       registry.bind(name, stub);
+                       
+               } catch (Exception e) { // Registration might fail.. clean up..
+                       try { 
+                               UnicastRemoteObject.unexportObject(stub, true);
+                       } catch (Throwable e1) {
+                       }
+                       stub=null;
+                       throw e;
+               }
+        super.doStart();
+       }
+       
+       @Override
+       protected void doStop() throws Exception {
+               super.doStop();
+               try {
+               Registry registry = endpoint.getRegistry();
+               registry.unbind(endpoint.getName());
+               } catch( Throwable e ) { // do our best to unregister
+               }
+               UnicastRemoteObject.unexportObject(proxy, true);                
+       }
+       
+       public Object invoke(Object proxy, Method method, Object[] args) throws 
Throwable {
+        if (!isStarted()) {
+            throw new IllegalStateException("The endpoint is not active: " + 
getEndpoint().getEndpointUri());
+        }
+        PojoInvocation invocation = new PojoInvocation(proxy, method, args);
+        PojoExchange exchange = getEndpoint().createExchange();
+        exchange.setInvocation(invocation);
+        getProcessor().process(exchange);
+        Throwable fault = exchange.getException();
+        if (fault != null) {
+            throw new InvocationTargetException(fault);
+        }
+        return exchange.getOut().getBody();
+       }
+
+       public Remote getProxy() {
+               return proxy;
+       }
+
+       public Remote getStub() {
+               return stub;
+       }
+}

Added: 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiEndpoint.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiEndpoint.java?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiEndpoint.java
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiEndpoint.java
 Tue May  1 06:57:33 2007
@@ -0,0 +1,116 @@
+/*
+ * 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.rmi;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.component.pojo.PojoExchange;
+import org.apache.camel.impl.DefaultEndpoint;
+
+/**
+ * @version $Revision:520964 $
+ */
+public class RmiEndpoint extends DefaultEndpoint<PojoExchange> {
+
+       private List<Class> remoteInterfaces;
+       private ClassLoader classLoader;
+       private URI uri;
+       private int port;
+
+       protected RmiEndpoint(String endpointUri, RmiComponent component) 
throws URISyntaxException {
+               super(endpointUri, component);
+               this.uri = new URI(endpointUri);
+       }
+
+       public boolean isSingleton() {
+               return false;
+       }
+
+       public PojoExchange createExchange() {
+               return new PojoExchange(getContext());
+       }
+
+       public Consumer<PojoExchange> createConsumer(Processor<PojoExchange> 
processor) throws Exception {
+               if( remoteInterfaces == null || remoteInterfaces.size()==0 )
+                       throw new RuntimeCamelException("To create an RMI 
consumer, the RMI endpoint's remoteInterfaces property must be be configured.");
+               return new RmiConsumer(this, processor);
+       }
+
+       public Producer<PojoExchange> createProducer() throws Exception {
+               return new RmiProducer(this);
+       }
+
+       public String getName() {
+               String path = uri.getPath();
+               if( path == null )
+                       path = uri.getSchemeSpecificPart();
+               return path;
+       }
+
+       public Registry getRegistry() throws RemoteException {
+               if( uri.getHost()!=null ) {
+                       if( uri.getPort() == -1 ) {
+                               return 
LocateRegistry.getRegistry(uri.getHost());
+                       } else {
+                               return 
LocateRegistry.getRegistry(uri.getHost(), uri.getPort());                       
         
+                       }
+               } else {
+                       return LocateRegistry.getRegistry();
+               }
+       }
+
+       public List<Class> getRemoteInterfaces() {
+               return remoteInterfaces;
+       }
+
+       public void setRemoteInterfaces(List<Class> remoteInterfaces) {
+               this.remoteInterfaces = remoteInterfaces;
+               if( classLoader== null && !remoteInterfaces.isEmpty() ) {
+                       classLoader = remoteInterfaces.get(0).getClassLoader();
+               }
+       }
+       public void setRemoteInterfaces(Class... remoteInterfaces) {
+               setRemoteInterfaces(Arrays.asList(remoteInterfaces));           
+       }
+
+       public ClassLoader getClassLoader() {
+               return classLoader;
+       }
+       public void setClassLoader(ClassLoader classLoader) {
+               this.classLoader = classLoader;
+       }
+
+       public int getPort() {
+               return port;
+       }
+
+       public void setPort(int port) {
+               this.port = port;
+       }
+
+
+}

Added: 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiProducer.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiProducer.java?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiProducer.java
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/RmiProducer.java
 Tue May  1 06:57:33 2007
@@ -0,0 +1,56 @@
+/**
+ *
+ * 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.rmi;
+
+import java.rmi.AccessException;
+import java.rmi.NotBoundException;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.registry.Registry;
+
+import org.apache.camel.component.pojo.PojoEndpoint;
+import org.apache.camel.component.pojo.PojoExchange;
+import org.apache.camel.impl.DefaultProducer;
+
+/**
+ * @version $Revision: 533076 $
+ */
+public class RmiProducer extends DefaultProducer<PojoExchange> {
+
+       private final RmiEndpoint endpoint;
+       private Remote remote;
+
+       public RmiProducer(RmiEndpoint endpoint) throws AccessException, 
RemoteException, NotBoundException {
+               super(endpoint);
+               this.endpoint = endpoint;
+       }
+
+       public void process(PojoExchange exchange) throws AccessException, 
RemoteException, NotBoundException {
+               
+               PojoEndpoint.invoke(getRemote(), exchange);
+       }
+
+       public Remote getRemote() throws AccessException, RemoteException, 
NotBoundException {
+               if( remote == null ) {
+                       Registry registry = endpoint.getRegistry();             
                
+                       remote = registry.lookup(endpoint.getName());           
        
+               }
+               return remote;
+       }
+       
+}

Added: 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/package.html
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/package.html?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/package.html
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/main/java/org/apache/camel/component/rmi/package.html
 Tue May  1 06:57:33 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>
+
+Defines the <a href="http://activemq.apache.org/camel/jms.html";>JMS 
Component</a>
+
+</body>
+</html>

Added: 
activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/apache/camel/component/rmi
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/apache/camel/component/rmi?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/apache/camel/component/rmi
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/main/resources/META-INF/services/org/apache/camel/component/rmi
 Tue May  1 06:57:33 2007
@@ -0,0 +1 @@
+class=org.apache.camel.component.rmi.RmiComponent

Added: activemq/camel/trunk/camel-rmi/src/test/ide-resources/log4j.properties
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/test/ide-resources/log4j.properties?view=auto&rev=534095
==============================================================================
--- activemq/camel/trunk/camel-rmi/src/test/ide-resources/log4j.properties 
(added)
+++ activemq/camel/trunk/camel-rmi/src/test/ide-resources/log4j.properties Tue 
May  1 06:57:33 2007
@@ -0,0 +1,30 @@
+## ------------------------------------------------------------------------
+## 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.
+## ------------------------------------------------------------------------
+
+#
+# The logging properties used for eclipse testing, We want to see debug output 
on the console.
+#
+log4j.rootLogger=INFO, out
+
+#log4j.logger.org.apache.activemq=DEBUG
+log4j.logger.org.apache.camel=DEBUG
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - 
%m%n

Added: 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/ISay.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/ISay.java?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/ISay.java
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/ISay.java
 Tue May  1 06:57:33 2007
@@ -0,0 +1,24 @@
+/*
+ * 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.rmi;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+public interface ISay extends Remote {
+       public String say() throws RemoteException;
+}

Added: 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
 Tue May  1 06:57:33 2007
@@ -0,0 +1,98 @@
+/**
+ *
+ * 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.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.builder.RouteBuilder;
+import org.apache.camel.component.pojo.PojoComponent;
+import org.apache.camel.component.pojo.PojoConsumer;
+import org.apache.camel.impl.DefaultCamelContext;
+
+/**
+ * @version $Revision: 520220 $
+ */
+public class RmiRouteTest extends TestCase {
+       
+    public void testPojoRoutes() throws Exception {            
+       if( classPathHasSpaces() ) {
+               return;
+       }
+       
+       // Boot up a local RMI registry
+       LocateRegistry.createRegistry(1099);            
+       
+        CamelContext camelContext = new DefaultCamelContext();
+        
+        // START SNIPPET: register
+        PojoComponent component = new PojoComponent();
+        camelContext.addComponent("pojo", component);
+        component.addService("bye", new SayService("Good Bye!"));
+        // END SNIPPET: register
+        
+        // START SNIPPET: route
+        // lets add simple route
+        camelContext.addRoutes(new RouteBuilder() {
+            public void configure() {
+               from("pojo:hello").to("rmi://localhost:1099/bye");              
  
+
+               // When exposing an RMI endpoint, the interfaces it exposes 
must be configured.
+                RmiEndpoint bye = (RmiEndpoint) 
endpoint("rmi://localhost:1099/bye");
+               bye.setRemoteInterfaces(ISay.class);
+                from(bye).to("pojo:bye");
+            }
+        });
+        // END SNIPPET: route
+
+        camelContext.start();
+        
+        // START SNIPPET: invoke
+        PojoConsumer consumer = component.getConsumer("hello");        
+        ISay proxy = consumer.createProxy(ISay.class);
+        String rc = proxy.say();
+        assertEquals("Good Bye!", rc);
+        // END SNIPPET: invoke
+        
+        camelContext.stop();
+    }
+
+       private boolean classPathHasSpaces() {          
+               ClassLoader cl = getClass().getClassLoader();
+               if( cl instanceof URLClassLoader ) {
+                       URLClassLoader ucl = (URLClassLoader) cl;
+                       URL[] urls = ucl.getURLs();
+                       for (int i = 0; i < urls.length; i++) {
+                               if( urls[i].getPath().contains(" ") ) {
+                                       
System.err.println("=======================================================================");
+                                       System.err.println(" TEST Skipped: 
"+getName());
+                                       System.err.println("   Your probably on 
windows.  We detected that the classpath");
+                                       System.err.println("   has a space in 
it.  Try running maven with the following option: ");
+                                       System.err.println("   
-Dmaven.repo.local=C:\\DOCUME~1\\userid\\.m2\\repository");
+                                       
System.err.println("=======================================================================");
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
+}

Added: 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/SayService.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/SayService.java?view=auto&rev=534095
==============================================================================
--- 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/SayService.java
 (added)
+++ 
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/SayService.java
 Tue May  1 06:57:33 2007
@@ -0,0 +1,40 @@
+/*
+ * 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.rmi;
+
+public class SayService implements ISay {
+       String message = "Hello";
+       
+       public SayService() {
+       }
+       public SayService(String message) {
+               this.message = message;
+       }
+
+       public String say() {
+               return message;
+       }
+
+       public String getMessage() {
+               return message;
+       }
+
+       public void setMessage(String message) {
+               this.message = message;
+       }
+
+}

Added: activemq/camel/trunk/camel-rmi/src/test/resources/log4j.properties
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-rmi/src/test/resources/log4j.properties?view=auto&rev=534095
==============================================================================
--- activemq/camel/trunk/camel-rmi/src/test/resources/log4j.properties (added)
+++ activemq/camel/trunk/camel-rmi/src/test/resources/log4j.properties Tue May  
1 06:57:33 2007
@@ -0,0 +1,30 @@
+## ------------------------------------------------------------------------
+## 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.
+## ------------------------------------------------------------------------
+
+#
+# The logging properties used for eclipse testing, We want to see debug output 
on the console.
+#
+log4j.rootLogger=INFO, out
+
+#log4j.logger.org.apache.activemq=DEBUG
+#log4j.logger.org.apache.camel=DEBUG
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - 
%m%n

Modified: activemq/camel/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/pom.xml?view=diff&rev=534095&r1=534094&r2=534095
==============================================================================
--- activemq/camel/trunk/pom.xml (original)
+++ activemq/camel/trunk/pom.xml Tue May  1 06:57:33 2007
@@ -129,6 +129,7 @@
     <module>camel-jpa</module>
     <module>camel-mail</module>
     <module>camel-mina</module>
+    <module>camel-rmi</module>
     <module>camel-saxon</module>
     <module>camel-script</module>
     <module>camel-spring</module>


Reply via email to