summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/binding-sca-runtime-rmi/src/main
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2009-11-01 22:50:25 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2009-11-01 22:50:25 +0000
commit9ea808f62ef15eba6b1501c9400ab23f7d2154e7 (patch)
treeb63632a3446b7abb34c1a2b955f194fb242300a0 /java/sca/modules/binding-sca-runtime-rmi/src/main
parentce1e7b164a361313c301f63643d6b75ac703fa96 (diff)
Add an RMI version of the SCA Binding. (As its much easier to use as the dependencies are in Java instead of the massive dependency tree of the Axis2 based SCA binding
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@831773 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCABindingProviderFactory.java52
-rw-r--r--java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCAReferenceBindingProvider.java100
-rw-r--r--java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCAServiceBindingProvider.java122
-rw-r--r--java/sca/modules/binding-sca-runtime-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory20
4 files changed, 294 insertions, 0 deletions
diff --git a/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCABindingProviderFactory.java b/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCABindingProviderFactory.java
new file mode 100644
index 0000000000..6ac5eef4e7
--- /dev/null
+++ b/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCABindingProviderFactory.java
@@ -0,0 +1,52 @@
+/*
+ * 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.tuscany.sca.binding.sca.rmi;
+
+import org.apache.tuscany.sca.assembly.DistributedSCABinding;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.provider.BindingProviderFactory;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+
+/**
+ * The factory for the RMI based implementation of the distributed sca binding
+ */
+public class RMISCABindingProviderFactory implements BindingProviderFactory<DistributedSCABinding> {
+
+ private ExtensionPointRegistry extensionPoints;
+
+ public RMISCABindingProviderFactory(ExtensionPointRegistry extensionPoints) {
+ this.extensionPoints = extensionPoints;
+ }
+
+ public ReferenceBindingProvider createReferenceBindingProvider(EndpointReference endpointReference) {
+ return new RMISCAReferenceBindingProvider(endpointReference, extensionPoints);
+ }
+
+ public ServiceBindingProvider createServiceBindingProvider(Endpoint endpoint) {
+ return new RMISCAServiceBindingProvider(endpoint, extensionPoints);
+ }
+
+ public Class<DistributedSCABinding> getModelType() {
+ return DistributedSCABinding.class;
+ }
+}
diff --git a/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCAReferenceBindingProvider.java b/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCAReferenceBindingProvider.java
new file mode 100644
index 0000000000..979282ffbd
--- /dev/null
+++ b/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCAReferenceBindingProvider.java
@@ -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.tuscany.sca.binding.sca.rmi;
+
+import java.util.logging.Logger;
+
+import org.apache.tuscany.sca.assembly.DistributedSCABinding;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.binding.rmi.RMIBinding;
+import org.apache.tuscany.sca.binding.rmi.RMIBindingFactory;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.BindingProviderFactory;
+import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+
+/**
+ * The reference binding provider for the remote sca binding implementation. Relies on the
+ * binding-ws-axis implementation for sending messages to remote services so this provider
+ * uses the ws-axis provider under the covers.
+ */
+public class RMISCAReferenceBindingProvider implements ReferenceBindingProvider {
+
+ private static final Logger logger = Logger.getLogger(RMISCAReferenceBindingProvider.class.getName());
+
+ private SCABinding binding;
+ private RMIBinding rmiBinding;
+ private ReferenceBindingProvider referenceBindingProvider;
+
+ public RMISCAReferenceBindingProvider(EndpointReference endpointReference,
+ ExtensionPointRegistry extensionPoints) {
+
+ FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
+
+ this.binding = ((DistributedSCABinding)endpointReference.getBinding()).getSCABinding();
+
+ rmiBinding = modelFactories.getFactory(RMIBindingFactory.class).createRMIBinding();
+ rmiBinding.setName(this.binding.getName());
+
+ // create a copy of the endpoint reference but with the RMI binding in
+ EndpointReference epr = null;
+ try {
+ epr = (EndpointReference)endpointReference.clone();
+ } catch (Exception ex){
+ // we know we can clone endpoint references
+ }
+ epr.setBinding(rmiBinding);
+
+ // create the real RMI reference binding provider
+ ProviderFactoryExtensionPoint providerFactories = extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class);
+ BindingProviderFactory<?> providerFactory = (BindingProviderFactory<?>)providerFactories.getProviderFactory(RMIBinding.class);
+ referenceBindingProvider = providerFactory.createReferenceBindingProvider(epr);
+ logger.info("Reference using RMI SCA Binding: " + rmiBinding.getURI());
+ }
+
+ public InterfaceContract getBindingInterfaceContract() {
+ return null;
+ }
+
+ public boolean supportsOneWayInvocation() {
+ return false;
+ }
+
+ public Invoker createInvoker(Operation operation) {
+ return referenceBindingProvider.createInvoker(operation);
+ }
+
+ public SCABinding getSCABinding () {
+ return binding;
+ }
+
+ public void start() {
+ referenceBindingProvider.start();
+ }
+
+ public void stop() {
+ referenceBindingProvider.stop();
+ }
+}
diff --git a/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCAServiceBindingProvider.java b/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCAServiceBindingProvider.java
new file mode 100644
index 0000000000..f225ab3c95
--- /dev/null
+++ b/java/sca/modules/binding-sca-runtime-rmi/src/main/java/org/apache/tuscany/sca/binding/sca/rmi/RMISCAServiceBindingProvider.java
@@ -0,0 +1,122 @@
+/*
+ * 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.tuscany.sca.binding.sca.rmi;
+
+import java.util.logging.Logger;
+
+import org.apache.tuscany.sca.assembly.DistributedSCABinding;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.binding.rmi.RMIBinding;
+import org.apache.tuscany.sca.binding.rmi.RMIBindingFactory;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.provider.BindingProviderFactory;
+import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+
+/**
+ * The service binding provider for the remote sca binding implementation. Relies on the
+ * RMI binding for providing a remote message endpoint
+ */
+public class RMISCAServiceBindingProvider implements ServiceBindingProvider {
+
+ private static final Logger logger = Logger.getLogger(RMISCAServiceBindingProvider.class.getName());
+
+ private SCABinding binding;
+ private RMIBinding rmiBinding;
+ private ServiceBindingProvider serviceBindingProvider;
+
+ private boolean started = false;
+
+ public RMISCAServiceBindingProvider(Endpoint endpoint, ExtensionPointRegistry extensionPoints) {
+
+ FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
+
+ this.binding = ((DistributedSCABinding)endpoint.getBinding()).getSCABinding();
+
+ rmiBinding = modelFactories.getFactory(RMIBindingFactory.class).createRMIBinding();
+ rmiBinding.setName(this.binding.getName());
+
+// URI uri = URI.create(binding.getURI());
+// if (!uri.isAbsolute()) {
+// int port = 8085;
+// String host;
+// try {
+// host = InetAddress.getLocalHost().getHostAddress();
+// } catch (UnknownHostException e) {
+// host = "localhost";
+// logger.warning("unable to determine host address, using localhost");
+// }
+// ServerSocket socket;
+// try {
+// socket = new ServerSocket(0);
+// port = socket.getLocalPort();
+// // host = socket.getInetAddress().getHostAddress();
+// socket.close();
+// } catch (IOException e) {
+// }
+// String bindURI = "http://" + host + ":" + port + binding.getURI();
+//
+// // FIXME: We need to pass the full URI to the endpoint registry
+// binding.setURI(bindURI);
+// }
+
+ rmiBinding.setURI(this.binding.getURI());
+
+ // create a copy of the endpoint but with the web service binding in
+ Endpoint ep = null;
+ try {
+ ep = (Endpoint)endpoint.clone();
+ } catch (Exception ex){
+ // we know we can clone endpoint references
+ }
+ ep.setBinding(rmiBinding);
+
+ ProviderFactoryExtensionPoint providerFactories = extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class);
+ BindingProviderFactory<?> providerFactory = (BindingProviderFactory<?>) providerFactories.getProviderFactory(RMIBinding.class);
+ serviceBindingProvider = providerFactory.createServiceBindingProvider(ep);
+
+ logger.info("Service using RMI SCA Binding: " + rmiBinding.getURI());
+ }
+
+ public InterfaceContract getBindingInterfaceContract() {
+ return null;
+ }
+
+ public boolean supportsOneWayInvocation() {
+ return false;
+ }
+
+ public void start() {
+ if (!started) {
+ started = true;
+ serviceBindingProvider.start();
+ }
+ }
+
+ public void stop() {
+ if (started) {
+ started = false;
+ serviceBindingProvider.stop();
+ }
+ }
+}
diff --git a/java/sca/modules/binding-sca-runtime-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory b/java/sca/modules/binding-sca-runtime-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory
new file mode 100644
index 0000000000..347e7b372c
--- /dev/null
+++ b/java/sca/modules/binding-sca-runtime-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory
@@ -0,0 +1,20 @@
+# 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.
+
+# Implementation class for the binding extension
+org.apache.tuscany.sca.binding.sca.rmi.RMISCABindingProviderFactory;model=org.apache.tuscany.sca.assembly.DistributedSCABinding
+