You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2007/05/01 17:48:27 UTC
svn commit: r534129 - in /activemq/camel/trunk:
camel-core/src/main/java/org/apache/camel/component/pojo/
camel-core/src/test/java/org/apache/camel/component/pojo/
camel-rmi/src/test/java/org/apache/camel/component/rmi/
Author: chirino
Date: Tue May 1 08:48:27 2007
New Revision: 534129
URL: http://svn.apache.org/viewvc?view=rev&rev=534129
Log:
Removed the ability to consume from a pojo: endpoint since it is easier to consume from a direct: or queue: endpoint.
Removed:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoConsumer.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/test/java/org/apache/camel/component/pojo/PojoRouteTest.java
activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
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=534129&r1=534128&r2=534129
==============================================================================
--- 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 Tue May 1 08:48:27 2007
@@ -16,12 +16,17 @@
*/
package org.apache.camel.component.pojo;
-import org.apache.camel.impl.DefaultComponent;
-import org.apache.camel.Endpoint;
-
+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.impl.DefaultComponent;
+
/**
* Represents the component that manages {@link PojoEndpoint}. It holds the
* list of named pojos that queue endpoints reference.
@@ -30,7 +35,6 @@
*/
public class PojoComponent extends DefaultComponent<PojoExchange> {
protected final HashMap<String, Object> services = new HashMap<String, Object>();
- protected final HashMap<String, PojoConsumer> consumers = new HashMap<String, PojoConsumer>();
public void addService(String uri, Object pojo) {
services.put(uri, pojo);
@@ -38,28 +42,66 @@
public void removeService(String uri) {
services.remove(uri);
- removeConsumer(uri);
}
public Object getService(String uri) {
return services.get(uri);
}
- void addConsumer(String uri, PojoConsumer endpoint) {
- consumers.put(uri, endpoint);
+ @Override
+ protected Endpoint<PojoExchange> createEndpoint(String uri, String remaining, Map parameters) throws Exception {
+ return new PojoEndpoint(uri, this, remaining);
}
-
- void removeConsumer(String uri) {
- consumers.remove(uri);
+
+ /**
+ * Creates a Proxy which sends PojoExchange to the endpoint.
+ * @throws Exception
+ */
+ 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();
+ }
+ });
+ }
+
+ /**
+ * Creates a Proxy which sends PojoExchange to the endpoint.
+ * @throws Exception
+ */
+ static public Object createProxy(Endpoint endpoint, Class interfaces[]) throws Exception {
+ if( interfaces.length < 1 ) {
+ throw new IllegalArgumentException("You must provide at least 1 interface class.");
+ }
+ return createProxy(endpoint, interfaces[0].getClassLoader(), interfaces);
+ }
+ /**
+ * Creates a Proxy which sends PojoExchange to the endpoint.
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ static public <T> T createProxy(Endpoint endpoint, ClassLoader cl, Class<T> interfaceClass) throws Exception {
+ return (T) createProxy(endpoint, cl, new Class[]{interfaceClass});
+ }
+
+ /**
+ * Creates a Proxy which sends PojoExchange to the endpoint.
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ static public <T> T createProxy(Endpoint endpoint, Class<T> interfaceClass) throws Exception {
+ return (T) createProxy(endpoint, new Class[]{interfaceClass});
}
- public PojoConsumer getConsumer(String uri) {
- return consumers.get(uri);
- }
- @Override
- protected Endpoint<PojoExchange> createEndpoint(String uri, String remaining, Map parameters) throws Exception {
- return new PojoEndpoint(uri, this, remaining);
- }
}
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=534129&r1=534128&r2=534129
==============================================================================
--- 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 Tue May 1 08:48:27 2007
@@ -54,8 +54,7 @@
}
public Consumer<PojoExchange> createConsumer(Processor<PojoExchange> processor) throws Exception {
- PojoConsumer consumer = new PojoConsumer(this, processor);
- return startService(consumer);
+ throw new Exception("You cannot consume from pojo endpoints.");
}
/**
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=534129&r1=534128&r2=534129
==============================================================================
--- 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 Tue May 1 08:48:27 2007
@@ -20,6 +20,7 @@
import junit.framework.TestCase;
import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
@@ -33,8 +34,7 @@
CamelContext camelContext = new DefaultCamelContext();
// START SNIPPET: register
- PojoComponent component = new PojoComponent();
- camelContext.addComponent("pojo", component);
+ PojoComponent component = (PojoComponent)camelContext.getComponent("pojo");
component.addService("bye", new SayService("Good Bye!"));
// END SNIPPET: register
@@ -42,7 +42,7 @@
// lets add simple route
camelContext.addRoutes(new RouteBuilder() {
public void configure() {
- from("pojo:hello").to("pojo:bye");
+ from("direct:hello").to("pojo:bye");
}
});
// END SNIPPET: route
@@ -50,8 +50,8 @@
camelContext.start();
// START SNIPPET: invoke
- PojoConsumer consumer = component.getConsumer("hello");
- ISay proxy = consumer.createProxy(ISay.class);
+ Endpoint endpoint = camelContext.getEndpoint("direct:hello");
+ ISay proxy = PojoComponent.createProxy(endpoint, ISay.class);
String rc = proxy.say();
assertEquals("Good Bye!", rc);
// END SNIPPET: invoke
Modified: 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=diff&rev=534129&r1=534128&r2=534129
==============================================================================
--- activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java (original)
+++ activemq/camel/trunk/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java Tue May 1 08:48:27 2007
@@ -24,9 +24,9 @@
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.component.pojo.PojoConsumer;
import org.apache.camel.impl.DefaultCamelContext;
/**
@@ -45,8 +45,7 @@
CamelContext camelContext = new DefaultCamelContext();
// START SNIPPET: register
- PojoComponent component = new PojoComponent();
- camelContext.addComponent("pojo", component);
+ PojoComponent component = (PojoComponent)camelContext.getComponent("pojo");
component.addService("bye", new SayService("Good Bye!"));
// END SNIPPET: register
@@ -54,7 +53,7 @@
// lets add simple route
camelContext.addRoutes(new RouteBuilder() {
public void configure() {
- from("pojo:hello").to("rmi://localhost:1099/bye");
+ from("direct: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");
@@ -67,8 +66,8 @@
camelContext.start();
// START SNIPPET: invoke
- PojoConsumer consumer = component.getConsumer("hello");
- ISay proxy = consumer.createProxy(ISay.class);
+ Endpoint endpoint = camelContext.getEndpoint("direct:hello");
+ ISay proxy = PojoComponent.createProxy(endpoint, ISay.class);
String rc = proxy.say();
assertEquals("Good Bye!", rc);
// END SNIPPET: invoke