You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by jb...@apache.org on 2009/08/02 07:37:56 UTC
svn commit: r799996 - in
/servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi:
RmiConsumerEndpoint.java RmiProviderEndpoint.java
Author: jbonofre
Date: Sun Aug 2 05:37:56 2009
New Revision: 799996
URL: http://svn.apache.org/viewvc?rev=799996&view=rev
Log:
Resume the RMI provider endpoint.
Add POJO support in the RMI consumer endpoint (will be used in replacement of the bridge endpoint).
Modified:
servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiConsumerEndpoint.java
servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiProviderEndpoint.java
Modified: servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiConsumerEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiConsumerEndpoint.java?rev=799996&r1=799995&r2=799996&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiConsumerEndpoint.java (original)
+++ servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiConsumerEndpoint.java Sun Aug 2 05:37:56 2009
@@ -45,6 +45,7 @@
private List<Class> remoteInterfaces; // the remote interfaces
private int port = 1099; // the RMI registry port number
private String name; // the endpoint name into the RMI registry
+ private Object pojo; // delegate method call to a POJO
private Registry registry = null; // the RMI registry
private Remote stub; // the remote stub
@@ -115,10 +116,16 @@
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- // TODO transform RMI request into NMR message using a marshaler
logger.debug("Proxy: " + proxy);
logger.debug("Method: " + method);
logger.debug("Args: " + args);
+ if (pojo != null) {
+ // bypass to POJO delegation
+ method.invoke(pojo, args);
+ } else {
+ // going through the NMR
+ // TODO use a marshaler
+ }
return null;
}
Modified: servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiProviderEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiProviderEndpoint.java?rev=799996&r1=799995&r2=799996&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiProviderEndpoint.java (original)
+++ servicemix/components/bindings/servicemix-rmi/trunk/src/main/java/org/apache/servicemix/rmi/RmiProviderEndpoint.java Sun Aug 2 05:37:56 2009
@@ -16,14 +16,17 @@
*/
package org.apache.servicemix.rmi;
+import java.lang.reflect.Method;
import java.rmi.Remote;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.jbi.management.DeploymentException;
+import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
import org.apache.servicemix.common.endpoints.ProviderEndpoint;
@@ -128,7 +131,26 @@
* @throws MessagingException on messaging errors,
*/
private void process(MessageExchange exchange, NormalizedMessage in) throws TransformerException, MessagingException {
- // TODO parse the in message (using a marshaler and transform it in RMI call
+ if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
+ return;
+ }
+
+ // get the called method using the exchange operation
+ QName operationName = exchange.getOperation();
+ if (operationName == null) {
+ // TODO try to define a default operation to use
+ throw new MessagingException("The exchange operation is not set.");
+ }
+
+ // get the method call using the operation name
+ try {
+ // TODO correct the method detection (parameter types)
+ Method method = stub.getClass().getMethod(operationName.toString(), null);
+ Object result = method.invoke(stub, null);
+ // TODO contruct the out normalized message using the object
+ } catch (Exception e) {
+ throw new MessagingException("RMI call failed.", e);
+ }
}