You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/08/10 20:46:40 UTC
svn commit: r430475 - in /incubator/tuscany/java/sca: bindings/binding.rmi/
bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/
containers/container.javascript/src/main/resources/META-INF/sca/
Author: antelder
Date: Thu Aug 10 11:46:39 2006
New Revision: 430475
URL: http://svn.apache.org/viewvc?rev=430475&view=rev
Log:
TUSCANY-611
Commit patch from Venkat to get the RMI binding working and updated to work with the latest extension SPIs
Added:
incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java
incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl
Modified:
incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml
incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java
incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java
incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java
incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java
incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java
incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl
Modified: incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml Thu Aug 10 11:46:39 2006
@@ -31,6 +31,12 @@
<dependencies>
<dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ <version>2.1_3</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.tuscany</groupId>
<artifactId>spi</artifactId>
<version>${sca.version}</version>
Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java Thu Aug 10 11:46:39 2006
@@ -15,9 +15,9 @@
* limitations under the License.
*/
package org.apache.tuscany.binding.rmi;
-
+
import java.rmi.Remote;
-
+
import org.apache.tuscany.spi.builder.InvalidServiceInterfaceException;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.SCAObject;
@@ -42,7 +42,9 @@
String name = boundServiceDefinition.getName();
Class<Remote> service = getServiceInterface(boundServiceDefinition);
String uri = boundServiceDefinition.getBinding().getURI();
- return new RMIService<Remote>(name, parent, wireService, uri, service);
+
+ RMIService rmiService = new RMIService<Remote>(name, parent, wireService, uri, service);
+ return rmiService;
}
@SuppressWarnings({"unchecked"})
@@ -61,6 +63,14 @@
String name = boundReferenceDefinition.getName();
String uri = boundReferenceDefinition.getBinding().getURI();
Class<?> interfaze = boundReferenceDefinition.getServiceContract().getInterfaceClass();
- return new RMIReference(name, interfaze, parent, wireService, uri);
+ RMIReference rmiReference = new RMIReference(name,
+ parent,
+ wireService,
+ uri,
+ boundReferenceDefinition.getServiceContract().getInterfaceClass());
+
+
+return rmiReference;
+
}
}
Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java Thu Aug 10 11:46:39 2006
@@ -20,8 +20,6 @@
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
-import org.osoa.sca.annotations.Scope;
-
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.deployer.DeploymentContext;
@@ -29,6 +27,7 @@
import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.loader.LoaderUtil;
+import org.osoa.sca.annotations.Scope;
/**
* Loader for handling <binding.rmi> elements.
Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java Thu Aug 10 11:46:39 2006
@@ -33,12 +33,12 @@
private final Method remoteMethod;
private final Remote proxy;
- RMIInvoker(Remote proxy, Method remoteMethod) {
+ public RMIInvoker(Remote proxy, Method remoteMethod) {
assert remoteMethod.isAccessible();
this.remoteMethod = remoteMethod;
this.proxy = proxy;
}
-
+
public Message invoke(Message msg) throws InvocationRuntimeException {
try {
Object resp = invokeTarget(msg.getBody());
Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java Thu Aug 10 11:46:39 2006
@@ -32,14 +32,16 @@
* @version $Rev$ $Date$
*/
public class RMIReference<T> extends ReferenceExtension<T> {
- private final String uri;
+ private final String uri;
- public RMIReference(String name,
- Class<T> interfaze,
- CompositeComponent<?> parent,
- WireService wireService,
- String uri) {
- super(name, interfaze, parent, wireService);
+ public RMIReference(String name,
+ CompositeComponent<?> parent,
+ WireService wireService,
+ String uri,
+ Class<T> service)
+ {
+ super(name, service, parent, wireService);
+ setInterface(service);
this.uri = uri;
}
Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java Thu Aug 10 11:46:39 2006
@@ -14,28 +14,35 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.tuscany.binding.rmi;
+package org.apache.tuscany.binding.rmi;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.net.MalformedURLException;
+import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.UnicastRemoteObject;
+
+import net.sf.cglib.proxy.Enhancer;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.extension.ServiceExtension;
-import org.apache.tuscany.spi.wire.WireInvocationHandler;
import org.apache.tuscany.spi.wire.WireService;
-
+
/**
* @version $Rev$ $Date$
*/
-public class RMIService<T extends Remote> extends ServiceExtension<T> {
+public class RMIService<T extends Remote> extends ServiceExtension<T>
+{
+ public static final String URI_PREFIX = "//localhost";
+ public static final String SLASH = "/";
+ public static final String COLON = ":";
private final String uri;
+ private Class service = null;
+ int rmiPort = 1099;
public RMIService(String name,
CompositeComponent parent,
@@ -44,14 +51,18 @@
Class<T> service) {
super(name, service, parent, wireService);
this.uri = uri;
+ this.service = service;
}
public void start() {
super.start();
- Remote rmiProxy = createProxy();
+ Remote rmiProxy = createProxy();//createRmiService();
- try {
- Naming.bind(uri, rmiProxy);
+ try
+ {
+ startRMIRegistry();
+ bindRmiService(uri, rmiProxy);
+
} catch (AlreadyBoundException e) {
throw new NoRemoteServiceException(e);
} catch (RemoteException e) {
@@ -67,14 +78,67 @@
} catch (NotBoundException e) {
// ignore
} catch (RemoteException e) {
- throw new NoRemoteServiceException(e);
+ throw new NoRemoteServiceException(e.getMessage());
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
super.stop();
}
+
+ private Remote createRmiService()
+ {
+ Enhancer enhancer = new Enhancer();
+ enhancer.setSuperclass(UnicastRemoteObject.class);
+ //Class remoteIfc = RemoteInterfaceGenerator.generateRemoteInterface(serviceInterface, cl);
+ enhancer.setInterfaces(new Class[]{service});
+ enhancer.setCallback(new RemoteMethodHandler(getHandler()));
+
+ return (Remote)enhancer.create();
+ }
+
+ private void bindRmiService(String uri, Remote rmiService) throws MalformedURLException,
+ RemoteException,
+ AlreadyBoundException
+ {
+ StringBuffer serverUri = new StringBuffer(URI_PREFIX);
+
+ serverUri.append(COLON);
+ serverUri.append(rmiPort);
+ serverUri.append(SLASH);
+ serverUri.append(uri);
+
+ Naming.bind(uri.toString(), rmiService);
+ System.out.println("RMI srevice started - " + uri.toString());
+
+ }
+
+
+ //how will you stop the registry... no APIs for that...
+ private void startRMIRegistry() throws RemoteException
+ {
+ try
+ {
+ Registry registry = LocateRegistry.createRegistry(rmiPort);
+ }
+ catch ( Exception e )
+ {
+ LocateRegistry.getRegistry(rmiPort);
+ }
+ }
+
+ protected T createProxy()
+ {
+ //InvocationHandler handler = new RMIInvocationHandler(getHandler());
+ return interfaze.cast(createRmiService());
+ }
+
+
+ /*protected Remote createProxy()
+ {
+=======
protected T createProxy() {
+>>>>>>> .r429120
InvocationHandler handler = new RMIInvocationHandler(getHandler());
return interfaze.cast(Proxy.newProxyInstance(interfaze.getClassLoader(), new Class[]{interfaze}, handler));
}
@@ -89,5 +153,6 @@
public Object invoke(Object object, Method method, Object[] objects) throws Throwable {
return wireHandler.invoke(method, objects);
}
- }
+ }*/
+
}
Added: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java?rev=430475&view=auto
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java (added)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java Thu Aug 10 11:46:39 2006
@@ -0,0 +1,50 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.tuscany.binding.rmi;
+
+import java.lang.reflect.Method;
+
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+
+import org.apache.tuscany.spi.wire.WireInvocationHandler;
+
+public class RemoteMethodHandler implements MethodInterceptor
+{
+ public static final String FINALIZE_METHOD = "finalize";
+ private WireInvocationHandler wireHandler = null;
+
+
+ public RemoteMethodHandler(WireInvocationHandler handler )
+ {
+ this.wireHandler = handler;
+ }
+
+
+ public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable
+ {
+ //TO BE FIXED: don't know why it hangs for the finalize method... so blocking it for now
+ if ( !method.getName().equals(FINALIZE_METHOD) )
+ {
+ return wireHandler.invoke(method, args);
+ }
+ return methodProxy.invoke(object, args);
+ //return null;
+ }
+
+}
+
Modified: incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl (original)
+++ incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl Thu Aug 10 11:46:39 2006
@@ -15,23 +15,23 @@
* limitations under the License.
-->
<!--
- JavaScript configuration for the launcher environment.
+ Default system configuration for the launcher environment.
+
+ $Rev: 423526 $ $Date: 2006-07-19 22:31:58 +0530 (Wed, 19 Jul 2006) $
-->
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
+ name="org.apache.tuscany.binding.rmi">
- name="org.apache.tuscany.launcher.JavaScriptImplementation">
-
- <component name="javascript.implementationLoader">
- <system:implementation.system class="org.apache.tuscany.container.javascript.JavaScriptImplementationLoader"/>
+ <component name="binding.rmi.bindingLoader">
+ <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIBindingLoader"/>
</component>
-
- <component name="javascript.componentTypeLoader">
- <system:implementation.system class="org.apache.tuscany.container.javascript.JavaScriptComponentTypeLoader"/>
+
+ <component name="binding.rmi.bindingBuilder">
+ <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIBindingBuilder"/>
</component>
-
- <component name="javascript.componentBuilder">
- <system:implementation.system class="org.apache.tuscany.container.javascript.JavaScriptComponentBuilder"/>
+
+ <component name="binding.rmi.bindingInvoker">
+ <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIInvoker"/>
</component>
-
-</composite>
\ No newline at end of file
+</composite>
Added: incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl?rev=430475&view=auto
==============================================================================
--- incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl (added)
+++ incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl Thu Aug 10 11:46:39 2006
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Copyright (c) 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.
+ -->
+<!--
+ Default system configuration for the launcher environment.
+
+ $Rev: 423526 $ $Date: 2006-07-19 22:31:58 +0530 (Wed, 19 Jul 2006) $
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
+ name="org.apache.tuscany.binding.rmi">
+
+ <component name="binding.rmi.bindingLoader">
+ <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIBindingLoader"/>
+ </component>
+
+ <component name="binding.rmi.bindingBuilder">
+ <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIBindingBuilder"/>
+ </component>
+
+ <component name="binding.rmi.bindingInvoker">
+ <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIInvoker"/>
+ </component>
+</composite>
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org