diff options
author | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-11 23:23:01 +0000 |
---|---|---|
committer | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-11 23:23:01 +0000 |
commit | 52cf4b8e3f99706027da5c1363292a2aae59d87d (patch) | |
tree | 72b686d71b95543bde775a56a58f82c5410fa571 /sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node | |
parent | 997e88d7d6c8b405190be42a79a803157a2da895 (diff) |
Moving 2.x tags
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@835152 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node')
3 files changed, 255 insertions, 0 deletions
diff --git a/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/ConfigAttributesImpl.java b/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/ConfigAttributesImpl.java new file mode 100644 index 0000000000..9a10cbd306 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/ConfigAttributesImpl.java @@ -0,0 +1,35 @@ +/*
+ * 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.domain.node;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.management.ConfigAttributes;
+
+public class ConfigAttributesImpl implements ConfigAttributes {
+
+ private Map<String, String> attributes = new HashMap<String, String>();
+
+ public Map<String, String> getAttributes() {
+ return attributes;
+ }
+
+}
diff --git a/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/DomainNode.java b/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/DomainNode.java new file mode 100644 index 0000000000..1259870c37 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/DomainNode.java @@ -0,0 +1,157 @@ +/*
+ * 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.domain.node;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.management.ConfigAttributes;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.apache.tuscany.sca.node.configuration.NodeConfiguration;
+
+public class DomainNode {
+
+ public static final String DOMAIN_NAME_ATTR = "domainName";
+ public static final String DOMAIN_SCHEME_ATTR = "domainScheme";
+ public static final String DEFAULT_DOMAIN_SCHEME = "vm";
+ public static final String DEFAULT_DOMAIN_NAME = "defaultDomain";
+
+ private ConfigAttributes configAttributes = new ConfigAttributesImpl();
+ private String domainRegistryURI;
+
+ private NodeFactory nodeFactory;
+ private Map<String, Node> nodes = new HashMap<String, Node>();
+
+ public DomainNode() {
+ this(DEFAULT_DOMAIN_SCHEME + "://" + DEFAULT_DOMAIN_NAME);
+ }
+
+ public DomainNode(String configURI) {
+ this.domainRegistryURI = configURI;
+ parseConfigURI(configURI);
+ start();
+ }
+
+ public DomainNode(String configURI, String... contributionLocations) {
+ this.domainRegistryURI = configURI;
+ parseConfigURI(configURI);
+ start();
+ for (String loc : contributionLocations) {
+ addContribution(loc);
+ }
+ }
+
+ public void start() {
+ if (nodeFactory != null) {
+ throw new IllegalStateException("The node is already started");
+ }
+
+ nodeFactory = NodeFactory.getInstance(configAttributes.getAttributes().get(DOMAIN_NAME_ATTR));
+ }
+
+ public boolean isStarted() {
+ return nodeFactory != null;
+ }
+
+ public void stop() {
+ if (nodeFactory == null) {
+ throw new IllegalStateException("The node is not started");
+ }
+
+ for (Node node : nodes.values()) {
+ node.stop();
+ }
+
+ }
+
+ public String addContribution(String location) {
+ String uri = location;
+ addContribution(uri, location);
+ return uri;
+ }
+
+ public void addContribution(String location, String uri) {
+ if (nodes.containsKey(uri)) {
+ throw new IllegalArgumentException("contribution already added: " + uri);
+ }
+ NodeConfiguration configuration =
+ nodeFactory.createNodeConfiguration().addContribution(uri, location)
+ .setDomainRegistryURI(domainRegistryURI).setDomainURI(configAttributes.getAttributes()
+ .get(DOMAIN_NAME_ATTR)).setURI(uri);
+ Node node = nodeFactory.createNode(configuration).start();
+ nodes.put(uri, node);
+ }
+
+ public void removeContribution(String uri) {
+ if (!nodes.containsKey(uri)) {
+ throw new IllegalArgumentException("contribution not found: " + uri);
+ }
+ Node node = nodes.remove(uri);
+ node.stop();
+ }
+
+ public ConfigAttributes getConfigAttributes() {
+ return configAttributes;
+ }
+
+ public String getDomainName() {
+ return configAttributes.getAttributes().get(DOMAIN_NAME_ATTR);
+ }
+
+ protected void parseConfigURI(String configURI) {
+ URI uri = URI.create(fixScheme(configURI));
+ String dn = uri.getHost();
+ if (dn == null || dn.length() < 1) {
+ dn = DEFAULT_DOMAIN_NAME;
+ }
+ configAttributes.getAttributes().put(DOMAIN_NAME_ATTR, dn);
+ String scheme = uri.getScheme();
+ if (scheme != null && scheme.length() > 0) {
+ configAttributes.getAttributes().put(DOMAIN_SCHEME_ATTR, scheme);
+ }
+
+ String query = uri.getQuery();
+ if (query != null && query.length() > 0) {
+ String[] params = query.split("&");
+ for (String param : params){
+ String name = param.split("=")[0];
+ String value = param.split("=")[1];
+ configAttributes.getAttributes().put(name, value);
+ }
+ }
+ }
+
+ /**
+ * I keep typing the scheme part with just a colon instead of colon slash slash
+ * which URI doesn't parse properly which irritates me so fix it up here
+ */
+ private String fixScheme(String uri) {
+ int i = uri.indexOf(":");
+ if (i > -1 && uri.charAt(i+1) != '/') {
+ uri = uri.replaceFirst(":", ":/");
+ }
+ if (i > -1 && uri.charAt(i+2) != '/') {
+ uri = uri.replaceFirst(":/", "://");
+ }
+ return uri;
+ }
+}
diff --git a/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/DomainNodeMain.java b/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/DomainNodeMain.java new file mode 100644 index 0000000000..2d8d15342a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M4-RC1/modules/domain-node/src/main/java/org/apache/tuscany/sca/domain/node/DomainNodeMain.java @@ -0,0 +1,63 @@ +/*
+ * 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.domain.node;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DomainNodeMain {
+
+ /**
+ * Start an SCA domain node
+ * @param args a list of contribution jars for the node to run
+ */
+ public static void main(String[] args) throws Exception {
+
+ String configURI = "vm://defaultDoamin";
+
+ List<String> contributions = new ArrayList<String>();
+ for (int i = 0; i < args.length; i++) {
+ if (args[i].startsWith("vm:") || args[i].startsWith("tribes:")) {
+ configURI = args[i];
+ } else{
+ File f = new File(args[i]);
+ if (!f.exists()) {
+ System.err.println("contribution not found: " + f);
+ System.exit(1);
+ }
+ contributions.add(f.toURI().toString());
+ }
+ }
+
+ DomainNode node = new DomainNode(configURI, contributions.toArray(new String[contributions.size()]));
+
+ System.out.println("Hit enter to stop node...");
+ if (System.in.read() == -1) {
+ // no sysin so wait for ever letting caller do the terminate
+ Object lock = new Object();
+ synchronized (lock) {
+ lock.wait();
+ }
+ }
+
+ node.stop();
+ }
+}
|