summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/binding-sca-runtime-rmi/src/main
diff options
context:
space:
mode:
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
+