summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org')
-rw-r--r--sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainImpl.java145
-rw-r--r--sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainMemoryImpl.java49
-rw-r--r--sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainNetworkImpl.java49
-rw-r--r--sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/DistributedDomainManagerMemoryImpl.java89
-rw-r--r--sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/DistributedDomainManagerNetworkImpl.java70
-rw-r--r--sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java143
-rw-r--r--sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryNetworkImpl.java75
-rw-r--r--sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/node/impl/EmbeddedNode.java184
8 files changed, 804 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainImpl.java b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainImpl.java
new file mode 100644
index 0000000000..93d84a34e6
--- /dev/null
+++ b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainImpl.java
@@ -0,0 +1,145 @@
+/*
+ * 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.distributed.domain.impl;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.binding.sca.impl.SCABindingImpl;
+import org.apache.tuscany.sca.distributed.domain.DistributedSCADomain;
+import org.apache.tuscany.sca.distributed.management.ServiceDiscovery;
+import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
+
+
+/**
+ * A local representation of the sca domain distributed across a number
+ * of separate nodes. This provides access to various information relating
+ * to the distributed domain
+ *
+ * @version $Rev: 552343 $ $Date: 2007-07-01 18:43:40 +0100 (Sun, 01 Jul 2007) $
+ */
+public class DistributedSCADomainImpl implements DistributedSCADomain {
+
+ private String nodeName;
+ private String domainName;
+ protected EmbeddedSCADomain domain;
+
+ public DistributedSCADomainImpl(String domainName){
+ this.domainName = domainName;
+ }
+
+ /**
+ * Returns the name of the node that this part of the
+ * distributed domain is running on
+ *
+ * @return the node name
+ */
+ public String getNodeName(){
+ return nodeName;
+ }
+
+ public void setNodeName(String nodeName){
+ this.nodeName = nodeName;
+ }
+
+ /**
+ * Returns the name of the distributed domain that this node
+ * is part of.
+ *
+ * @return the domain name
+ */
+ public String getDomainName(){
+ return domainName;
+ }
+
+ public void setDomainName(String domainName){
+ this.domainName = domainName;
+ }
+
+ /**
+ * Return an interface for registering and looking up remote services
+ *
+ * @return The service discovery interface
+ */
+ public ServiceDiscovery getServiceDiscovery(){
+ return null;
+ }
+
+ /**
+ * Associates this distributed domain representation to all of the
+ * sca binding objects within a composite. The sca binding uses this
+ * distributed domain representation for domain level operations like
+ * find the enpoints of remote services.
+ *
+ * @param composite the composite that this object will be added to
+ */
+ public void addDistributedDomainToBindings(Composite composite){
+ // traverse the composite adding in the distributed domain
+ // reference into all sca bindings.
+ for(Component component : composite.getComponents()){
+ for (ComponentService service : component.getServices()) {
+ for(Binding binding : service.getBindings()){
+ if (binding instanceof SCABinding) {
+ // TODO could do with changing the sca binding SPI
+ // to carry this piece of information
+ SCABindingImpl scaBinding = (SCABindingImpl)binding;
+ scaBinding.setDistributedDomain(this);
+ }
+ }
+ }
+
+ for (ComponentReference reference : component.getReferences()) {
+ for(Binding binding : reference.getBindings()){
+ if (binding instanceof SCABinding) {
+ // TODO could do with changing the sca binding SPI
+ // to carry this piece of information
+ SCABindingImpl scaBinding = (SCABindingImpl)binding;
+ scaBinding.setDistributedDomain(this);
+ }
+ }
+
+ // and reference targets. strange one this but the wiring puts
+ // all the bindings into a references target if the target remains
+ // unresolved after building
+ // This actually the only ones we really need to set as by now
+ // the service and reference bindings will already be resolved
+ // but it's not doing any hame for the time being
+ for ( ComponentService target : reference.getTargets()){
+ for(Binding binding : target.getBindings()){
+ if (binding instanceof SCABinding) {
+ // TODO could do with changing the sca binding SPI
+ // to carry this piece of information
+ SCABindingImpl scaBinding = (SCABindingImpl)binding;
+ scaBinding.setDistributedDomain(this);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public void setManagementDomain(EmbeddedSCADomain localDomain){
+ this.domain = localDomain;
+ }
+
+}
diff --git a/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainMemoryImpl.java b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainMemoryImpl.java
new file mode 100644
index 0000000000..bf9d68f8c9
--- /dev/null
+++ b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainMemoryImpl.java
@@ -0,0 +1,49 @@
+/*
+ * 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.distributed.domain.impl;
+
+import org.apache.tuscany.sca.distributed.management.ServiceDiscovery;
+import org.apache.tuscany.sca.distributed.management.impl.ServiceDiscoveryMemoryImpl;
+
+/**
+ * A local representation of the sca domain distributed across a number
+ * of separate nodes. This provides access to various information relating
+ * to the distributed domain
+ *
+ * @version $Rev: 552343 $ $Date: 2007-07-01 18:43:40 +0100 (Sun, 01 Jul 2007) $
+ */
+public class DistributedSCADomainMemoryImpl extends DistributedSCADomainImpl {
+
+ private static ServiceDiscovery serviceDiscovery;
+
+ public DistributedSCADomainMemoryImpl(String domainName){
+ super(domainName);
+
+ if (serviceDiscovery == null) {
+ serviceDiscovery = new ServiceDiscoveryMemoryImpl();
+ }
+ }
+
+ @Override
+ public ServiceDiscovery getServiceDiscovery(){
+ return serviceDiscovery;
+ }
+
+}
diff --git a/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainNetworkImpl.java b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainNetworkImpl.java
new file mode 100644
index 0000000000..e254f3654c
--- /dev/null
+++ b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/domain/impl/DistributedSCADomainNetworkImpl.java
@@ -0,0 +1,49 @@
+/*
+ * 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.distributed.domain.impl;
+
+import org.apache.tuscany.sca.distributed.management.ServiceDiscovery;
+
+/**
+ * Represents the network services and clients for the domain running on a node
+ * this implementation uses tuscany itself to implement the network clients and
+ * endpoints
+ *
+ * @version $Rev: 552343 $ $Date: 2007-07-01 18:43:40 +0100 (Sun, 01 Jul 2007) $
+ */
+public class DistributedSCADomainNetworkImpl extends DistributedSCADomainImpl {
+
+ private ServiceDiscovery serviceDiscovery;
+
+ public DistributedSCADomainNetworkImpl(String domainName){
+ super(domainName);
+ }
+
+ @Override
+ public ServiceDiscovery getServiceDiscovery(){
+
+ if (serviceDiscovery == null){
+ serviceDiscovery = domain.getService(ServiceDiscovery.class, "ServiceDiscoveryComponent");
+ }
+
+ return serviceDiscovery;
+ }
+
+}
diff --git a/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/DistributedDomainManagerMemoryImpl.java b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/DistributedDomainManagerMemoryImpl.java
new file mode 100644
index 0000000000..155326e40b
--- /dev/null
+++ b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/DistributedDomainManagerMemoryImpl.java
@@ -0,0 +1,89 @@
+/*
+ * 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.distributed.management.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.sca.distributed.management.DistributedDomainManager;
+
+
+/**
+ * Stores details of services exposed and retrieves details of remote services
+ *
+ * @version $Rev: 552343 $ $Date: 2007-07-01 18:43:40 +0100 (Sun, 01 Jul 2007) $
+ */
+public class DistributedDomainManagerMemoryImpl implements DistributedDomainManager{
+
+ List<Node> nodes = new ArrayList<Node>();
+
+ public class Node {
+ private String domainUri;
+ private String nodeUri;
+ private String nodeManagementUri;
+
+ public Node(String domainUri, String nodeUri, String nodeManagementUri){
+ this.domainUri = domainUri;
+ this.nodeUri = nodeUri;
+ this.nodeManagementUri = nodeManagementUri;
+ }
+
+ @Override
+ public String toString (){
+ return "[" +
+ domainUri + " " +
+ nodeUri + " " +
+ nodeManagementUri +
+ "]";
+ }
+ }
+
+ /**
+ * A node registers with the distributed domain manager. The mechanism whereby this
+ * registration interface is discovered is not defined. For example, JMS, JINI
+ * or a hard coded configuration could all be candidates in the java world.
+ *
+ * @param domainUri the string uri for the distributed domain
+ * @param nodeUri the string uri for the current node
+ * @param nodeManagementUrl the endpoint for the nodes management service
+ */
+ public void registerNode(String domainUri, String nodeUri, String nodeManagementUri){
+ Node node = new Node(domainUri, nodeUri, nodeManagementUri);
+ System.err.println("Registering node: " + node.toString());
+ }
+
+ /**
+ * Retrieve the configuration for the specified node. The return type is interesting
+ * here. There are many ways in which all of the information that comprises a
+ * configuration can be provisioned onto a node, for example, shared file system,
+ * ftp, http. The return value is the url of where to look for the configuration
+ * information. From a management point of view it is convenient to maintain all
+ * current and previous node configurations. This can easily be achieved by providing
+ * a different URL each time the configuration is changed.
+ *
+ * @param domainUri the string uri for the distributed domain
+ * @param nodeUri the string uri for the current node
+ * @return the URL from where the configuration can be retrieved
+ */
+ public String getDomainNodeConfiguration(String domainUri, String nodeUri){
+ return null;
+ }
+
+}
diff --git a/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/DistributedDomainManagerNetworkImpl.java b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/DistributedDomainManagerNetworkImpl.java
new file mode 100644
index 0000000000..23b4a7dca6
--- /dev/null
+++ b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/DistributedDomainManagerNetworkImpl.java
@@ -0,0 +1,70 @@
+/*
+ * 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.distributed.management.impl;
+
+import org.apache.tuscany.sca.distributed.management.DistributedDomainManager;
+import org.osoa.sca.annotations.Reference;
+
+
+/**
+ * Stores details of services exposed and retrieves details of remote services
+ *
+ * @version $Rev: 552343 $ $Date: 2007-07-01 18:43:40 +0100 (Sun, 01 Jul 2007) $
+ */
+public class DistributedDomainManagerNetworkImpl implements DistributedDomainManager{
+
+ @Reference
+ protected DistributedDomainManager distributedDomainManager;
+
+ /**
+ * A node registers with the distributed domain manager. The mechanism whereby this
+ * registration interface is discovered is not defined. For example, JMS, JINI
+ * or a hard coded configuration could all be candidates in the java world.
+ *
+ * @param domainUri the string uri for the distributed domain
+ * @param nodeUri the string uri for the current node
+ * @param nodeManagementUrl the endpoint for the nodes management service
+ */
+ public void registerNode(String domainUri, String nodeUri, String nodeManagementUri){
+ System.err.println("Registering node: " +
+ domainUri + " " +
+ nodeUri + " " +
+ nodeManagementUri );
+ distributedDomainManager.registerNode(domainUri, nodeUri, nodeManagementUri);
+ }
+
+ /**
+ * Retrieve the configuration for the specified node. The return type is interesting
+ * here. There are many ways in which all of the information that comprises a
+ * configuration can be provisioned onto a node, for example, shared file system,
+ * ftp, http. The return value is the url of where to look for the configuration
+ * information. From a management point of view it is convenient to maintain all
+ * current and previous node configurations. This can easily be achieved by providing
+ * a different URL each time the configuration is changed.
+ *
+ * @param domainUri the string uri for the distributed domain
+ * @param nodeUri the string uri for the current node
+ * @return the URL from where the configuration can be retrieved
+ */
+ public String getDomainNodeConfiguration(String domainUri, String nodeUri){
+ return null;
+ }
+
+}
diff --git a/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java
new file mode 100644
index 0000000000..2f884d59df
--- /dev/null
+++ b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java
@@ -0,0 +1,143 @@
+/*
+ * 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.distributed.management.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.sca.distributed.management.ServiceDiscovery;
+import org.osoa.sca.annotations.Scope;
+
+
+/**
+ * Stores details of services exposed and retrieves details of remote services
+ *
+ * @version $Rev: 552343 $ $Date: 2007-07-01 18:43:40 +0100 (Sun, 01 Jul 2007) $
+ */
+@Scope("COMPOSITE")
+public class ServiceDiscoveryMemoryImpl implements ServiceDiscovery{
+
+ List<ServiceEndpoint> serviceEndpoints = new ArrayList<ServiceEndpoint>();
+
+ public class ServiceEndpoint {
+ private String domainUri;
+ private String nodeUri;
+ private String serviceName;
+ private String bindingName;
+ private String url;
+
+ public ServiceEndpoint(String domainUri, String nodeUri, String serviceName, String bindingName, String URL){
+ this.domainUri = domainUri;
+ this.nodeUri = nodeUri;
+ this.serviceName = serviceName;
+ this.bindingName = bindingName;
+ this.url = URL;
+ }
+
+ public boolean match(String domainUri, String serviceName, String bindingName) {
+ // trap the case where the we are trying to map
+ // ComponentName/Service name with a registered ComponentName - this is OK
+ // ComponentName with a registered ComponentName/ServiceName - this should fail
+
+ boolean serviceNameMatch = false;
+
+ if (this.serviceName.equals(serviceName)) {
+ serviceNameMatch = true;
+ } else {
+ int s = serviceName.indexOf('/');
+ if ((s != -1) &&
+ (this.serviceName.equals(serviceName.substring(0, s)))){
+ serviceNameMatch = true;
+ }
+ }
+
+ return ((this.domainUri.equals(domainUri)) &&
+ (serviceNameMatch) &&
+ (this.bindingName.equals(bindingName)));
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ @Override
+ public String toString (){
+ return "[" +
+ domainUri + " " +
+ nodeUri + " " +
+ serviceName + " " +
+ bindingName + " " +
+ url +
+ "]";
+ }
+ }
+
+ /**
+ * Accepts information about a service endpoint and holds onto it
+ *
+ * @param domainUri the string uri for the distributed domain
+ * @param nodeUri the string uri for the current node
+ * @param serviceName the name of the service that is exposed and the provided endpoint
+ * @param bindingName the remote binding that is providing the endpoint
+ * @param url the enpoint url
+ */
+ public String registerServiceEndpoint(String domainUri, String nodeUri, String serviceName, String bindingName, String URL){
+ // if the service name ends in a "/" remove it
+ String modifiedServiceName = null;
+ if ( serviceName.endsWith("/") ) {
+ modifiedServiceName = serviceName.substring(0, serviceName.length() - 1);
+ } else {
+ modifiedServiceName = serviceName;
+ }
+
+ ServiceEndpoint serviceEndpoint = new ServiceEndpoint (domainUri, nodeUri, modifiedServiceName, bindingName, URL);
+ serviceEndpoints.add(serviceEndpoint);
+ System.err.println("Registering service: " + serviceEndpoint.toString());
+ return "";
+ }
+
+
+ /**
+ * Locates information about a service endpoint
+ *
+ * @param domainUri the string uri for the distributed domain
+ * @param serviceName the name of the service that is exposed and the provided endpoint
+ * @param bindingName the remote binding that we want to find an endpoint for
+ * @return url the endpoint url
+ */
+ public String findServiceEndpoint(String domainUri, String serviceName, String bindingName){
+ System.err.println("Finding service: [" +
+ domainUri + " " +
+ serviceName + " " +
+ bindingName +
+ "]");
+
+ String url = "";
+
+ for(ServiceEndpoint serviceEndpoint : serviceEndpoints){
+ if ( serviceEndpoint.match(domainUri, serviceName, bindingName)){
+ url = serviceEndpoint.getUrl();
+ System.err.println("Matching service url: " + url);
+ }
+ }
+ return url;
+ }
+
+}
diff --git a/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryNetworkImpl.java b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryNetworkImpl.java
new file mode 100644
index 0000000000..86a36a68a3
--- /dev/null
+++ b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryNetworkImpl.java
@@ -0,0 +1,75 @@
+/*
+ * 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.distributed.management.impl;
+
+import org.apache.tuscany.sca.distributed.management.ServiceDiscovery;
+import org.osoa.sca.annotations.Reference;
+
+
+/**
+ * Stores details of services exposed and retrieves details of remote services
+ *
+ * @version $Rev: 552343 $ $Date: 2007-07-01 18:43:40 +0100 (Sun, 01 Jul 2007) $
+ */
+public class ServiceDiscoveryNetworkImpl implements ServiceDiscovery{
+
+ @Reference
+ protected ServiceDiscovery serviceDiscovery;
+
+ /**
+ * Accepts information about a service endpoint and holds onto it
+ *
+ * @param domainUri the string uri for the distributed domain
+ * @param nodeUri the string uri for the current node
+ * @param serviceName the name of the service that is exposed and the provided endpoint
+ * @param bindingName the remote binding that is providing the endpoint
+ * @param url the enpoint url
+ */
+ public String registerServiceEndpoint(String domainUri, String nodeUri, String serviceName, String bindingName, String URL){
+ System.err.println("Registering service: [" +
+ domainUri + " " +
+ nodeUri + " " +
+ serviceName + " " +
+ bindingName + " " +
+ URL +
+ "]");
+ return serviceDiscovery.registerServiceEndpoint(domainUri, nodeUri, serviceName, bindingName, URL);
+ }
+
+
+ /**
+ * Locates information about a service endpoint
+ *
+ * @param domainUri the string uri for the distributed domain
+ * @param serviceName the name of the service that is exposed and the provided endpoint
+ * @param bindingName the remote binding that we want to find an endpoint for
+ * @return url the endpoint url
+ */
+ public String findServiceEndpoint(String domainUri, String serviceName, String bindingName){
+ System.err.println("Finding service: [" +
+ domainUri + " " +
+ serviceName + " " +
+ bindingName +
+ "]");
+
+ return serviceDiscovery.findServiceEndpoint(domainUri, serviceName, bindingName);
+ }
+
+}
diff --git a/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/node/impl/EmbeddedNode.java b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/node/impl/EmbeddedNode.java
new file mode 100644
index 0000000000..f4f30896b4
--- /dev/null
+++ b/sca-java-1.x/tags/0.99-incubating/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/node/impl/EmbeddedNode.java
@@ -0,0 +1,184 @@
+/*
+ * 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.distributed.node.impl;
+
+import java.net.URL;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.service.ContributionService;
+import org.apache.tuscany.sca.core.assembly.ActivationException;
+import org.apache.tuscany.sca.distributed.domain.DistributedSCADomain;
+import org.apache.tuscany.sca.distributed.domain.impl.DistributedSCADomainImpl;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
+
+/**
+ * An embeddable node implementation.
+ */
+public class EmbeddedNode {
+
+ // The data required to get the domain up and running on this node
+ private String nodeName;
+ private String domainName;
+ private EmbeddedSCADomain domain;
+ private DistributedSCADomainImpl distributedDomain;
+
+ // Node management
+ private EmbeddedSCADomain management;
+
+ public EmbeddedNode(String nodeName)
+ throws ActivationException {
+ this.nodeName = nodeName;
+
+ try {
+ // This is starting a local domain just to use component references to
+ // talk to the domain node. It maybe that we can slim this down when we have the
+ // remote service reference code working.
+
+ ClassLoader cl = EmbeddedNode.class.getClassLoader();
+
+ // start a local domain to run management components
+ management = new EmbeddedSCADomain(cl, "management");
+ management.start();
+
+ // add management composite to the management domain
+ ContributionService contributionService = management.getContributionService();
+ URL contributionURL = Thread.currentThread().getContextClassLoader().getResource("management/");
+
+ if ( contributionURL != null){
+ System.err.println(contributionURL.toString());
+ Contribution contribution = contributionService.contribute("http://management",
+ contributionURL,
+ null, //resolver,
+ false);
+ Composite composite = contribution.getDeployables().get(0);
+ management.getDomainComposite().getIncludes().add(composite);
+ management.getCompositeBuilder().build(composite);
+ management.getCompositeActivator().activate(composite);
+ management.getCompositeActivator().start(composite);
+
+ // get the management components out of the domain so that they
+ // can be configured/used. None are yet but this would be the place to
+ // get components out of the management domain and give them access to
+ // useful parts of the node
+
+ } else {
+ throw new ActivationException("Can't find the management contribution on the classpath");
+ }
+ } catch(ActivationException ex) {
+ throw ex;
+ } catch(Exception ex) {
+ throw new ActivationException(ex);
+ }
+
+ }
+
+ public SCADomain attachDomain(DistributedSCADomain distributedDomain)
+ throws ActivationException {
+ this.distributedDomain = (DistributedSCADomainImpl) distributedDomain;
+ domainName = distributedDomain.getDomainName();
+
+ try {
+ ClassLoader cl = EmbeddedNode.class.getClassLoader();
+
+ // create and start the local domain
+ domain = new EmbeddedSCADomain(cl, domainName);
+ domain.start();
+ } catch(ActivationException ex) {
+ throw ex;
+ } catch(Exception ex) {
+ throw new ActivationException(ex);
+ }
+
+ // add local information into the distributed domain
+ this.distributedDomain.setNodeName(nodeName);
+ this.distributedDomain.setManagementDomain(management);
+
+ // add domain information into the management components that need it
+
+
+ return domain;
+ }
+
+
+ protected void loadContribution(String domainName, URL contributionURL)
+ throws ActivationException {
+ try {
+ // Get ready to add contributions to the domain
+ ContributionService contributionService = domain.getContributionService();
+
+ // Contribute the SCA application
+ Contribution contribution = contributionService.contribute("http://calculator",
+ contributionURL,
+ null, //resolver,
+ false);
+ Composite composite = contribution.getDeployables().get(0);
+
+ // Add the deployable composite to the domain
+ domain.getDomainComposite().getIncludes().add(composite);
+ domain.getCompositeBuilder().build(composite);
+
+ distributedDomain.addDistributedDomainToBindings(composite);
+
+ domain.getCompositeActivator().activate(composite);
+ } catch(ActivationException ex) {
+ throw ex;
+ } catch(Exception ex) {
+ throw new ActivationException(ex);
+ }
+ }
+
+ public void addContribution(String domainName, URL contributionURL)
+ throws ActivationException {
+ try {
+
+
+ if (contributionURL == null){
+ // find the current directory as a URL. This is where our contribution
+ // will come from
+ contributionURL = Thread.currentThread().getContextClassLoader().getResource(nodeName + "/");
+ }
+
+ loadContribution(domainName, contributionURL);
+
+ } catch(ActivationException ex) {
+ throw ex;
+ } catch(Exception ex) {
+ throw new ActivationException(ex);
+ }
+
+ }
+
+ public void start()
+ throws ActivationException {
+
+ for (Composite composite : domain.getDomainComposite().getIncludes() ){
+ domain.getCompositeActivator().start(composite);
+ }
+ }
+
+ public void stop()
+ throws ActivationException {
+ domain.stop();
+
+ }
+
+}