You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2008/03/21 21:11:21 UTC
svn commit: r639788 - in /incubator/tuscany/java/sca/modules:
implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/
implementation-node-runtime/src/main/resources/
node2-launcher/src/main/java/org/apache/tuscany...
Author: jsdelfino
Date: Fri Mar 21 13:11:14 2008
New Revision: 639788
URL: http://svn.apache.org/viewvc?rev=639788&view=rev
Log:
Added logging calls. Added a ping and quickstart services to simplify the eclipse plugin launcher integration. Minor UI fixes. Simplified cloud contribution uri and namespace.
Added:
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/PingServiceImpl.java (with props)
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java (with props)
Modified:
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeProcessCollectionImpl.java
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/resources/NodeDaemon.composite
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainNodeLauncher.java
incubator/tuscany/java/sca/modules/workspace-admin/pom.xml
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DomainAdminUtil.java
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/DomainAdmin.composite
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
Modified: incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeProcessCollectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeProcessCollectionImpl.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeProcessCollectionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeProcessCollectionImpl.java Fri Mar 21 13:11:14 2008
@@ -83,13 +83,24 @@
public String post(String key, Item item) {
logger.info("post " + key);
-
- // Start a new VM and add it to the collection
+
+ // If the VM is already running just return it
SCANodeVM vm = vm(key);
if (vm != null) {
- return key;
+ if (vm.isAlive()) {
+ return key;
+ } else {
+ // Remove dead VM entry
+ try {
+ vm.stop();
+ } catch (InterruptedException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ nodeVMs.remove(vm);
+ }
}
-
+
+ // Start a new VM and add it to the collection
vm = new SCANodeVM(key);
nodeVMs.add(0, vm);
try {
Added: incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/PingServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/PingServiceImpl.java?rev=639788&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/PingServiceImpl.java (added)
+++ incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/PingServiceImpl.java Fri Mar 21 13:11:14 2008
@@ -0,0 +1,61 @@
+/*
+ * 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.implementation.node.launcher;
+
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * Implementation of a ping service component.
+ *
+ * @version $Rev$ $Date$
+ */
+@Scope("COMPOSITE")
+@Service(interfaces={Servlet.class})
+public class PingServiceImpl extends HttpServlet {
+ private static final long serialVersionUID = -3477992129462720901L;
+
+ private final static Logger logger = Logger.getLogger(PingServiceImpl.class.getName());
+
+ /**
+ * Initialize the component.
+ */
+ @Init
+ public void initialize() throws ParserConfigurationException {
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ logger.info("ping");
+ response.getWriter().print("<html><body><span id=\"ping\">OK</span></body></html>");
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/PingServiceImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/PingServiceImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/resources/NodeDaemon.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/resources/NodeDaemon.composite?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/resources/NodeDaemon.composite (original)
+++ incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/resources/NodeDaemon.composite Fri Mar 21 13:11:14 2008
@@ -25,7 +25,14 @@
<component name="NodeProcessCollectionComponent">
<implementation.java class="org.apache.tuscany.sca.implementation.node.launcher.NodeProcessCollectionImpl"/>
<service name="ItemCollection">
- <t:binding.atom uri="http://localhost:9991/process" title="Running Nodes"/>
+ <t:binding.atom uri="http://localhost:9990/process" title="Log"/>
+ </service>
+ </component>
+
+ <component name="PingServiceComponent">
+ <implementation.java class="org.apache.tuscany.sca.implementation.node.launcher.PingServiceImpl"/>
+ <service name="Servlet">
+ <t:binding.http uri="http://localhost:9990/ping"/>
</service>
</component>
Modified: incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainNodeLauncher.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainNodeLauncher.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainNodeLauncher.java (original)
+++ incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainNodeLauncher.java Fri Mar 21 13:11:14 2008
@@ -33,7 +33,7 @@
private final static Logger logger = Logger.getLogger(DomainNodeLauncher.class.getName());
public static void main(String[] args) throws Exception {
- logger.info("Apache Tuscany SCA Domain Administration starting...");
+ logger.info("Apache Tuscany SCA Domain Manager starting...");
Class<?> adminClass;
Object admin;
@@ -60,11 +60,11 @@
adminClass.getMethod("start").invoke(admin);
} catch (Exception e) {
- logger.log(Level.SEVERE, "SCA Domain Administration could not be started", e);
+ logger.log(Level.SEVERE, "SCA Domain Manager could not be started", e);
throw e;
}
- logger.info("SCA Domain Administration started.");
+ logger.info("SCA Domain Manager started.");
logger.info("Press enter to shutdown.");
try {
System.in.read();
@@ -74,7 +74,7 @@
try {
adminClass.getMethod("stop").invoke(admin);
} catch (Exception e) {
- logger.log(Level.SEVERE, "SCA Domain Administration could not be stopped", e);
+ logger.log(Level.SEVERE, "SCA Domain Manager could not be stopped", e);
throw e;
}
}
Modified: incubator/tuscany/java/sca/modules/workspace-admin/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/pom.xml?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/pom.xml Fri Mar 21 13:11:14 2008
@@ -26,7 +26,7 @@
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>tuscany-workspace-admin</artifactId>
- <name>Apache Tuscany SCA Domain Workspace Administration</name>
+ <name>Apache Tuscany SCA Domain Workspace Manager</name>
<dependencies>
<dependency>
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java Fri Mar 21 13:11:14 2008
@@ -92,6 +92,8 @@
}
public Entry<String, Item>[] query(String queryString) {
+ logger.info("query " + queryString);
+
if (queryString.startsWith("composite=")) {
// Expecting a key in the form:
@@ -136,6 +138,7 @@
// Get the request path
String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8");
String key = path.startsWith("/")? path.substring(1) : path;
+ logger.info("get " + key);
// The key contains a node name, redirect
// to the corresponding composite image
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java Fri Mar 21 13:11:14 2008
@@ -154,6 +154,7 @@
}
public Entry<String, Item>[] getAll() {
+ logger.info("getAll");
// Return all the contributions
List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>();
@@ -169,6 +170,7 @@
}
public Item get(String key) throws NotFoundException {
+ logger.info("get " + key);
// Returns the contribution with the given URI key
Workspace workspace = readContributions(readWorkspace());
@@ -188,6 +190,7 @@
// The key is the contribution URI
String key = path.startsWith("/")? path.substring(1) : path;
+ logger.info("get " + key);
// Get the item describing the composite
Item item;
@@ -203,6 +206,7 @@
}
public String post(String key, Item item) {
+ logger.info("post " + key);
// Adds a new contribution to the workspace
Workspace workspace = readWorkspace();
@@ -238,6 +242,7 @@
}
public void delete(String key) throws NotFoundException {
+ logger.info("delete " + key);
// Delete a contribution from the workspace
Workspace workspace = readWorkspace();
@@ -255,6 +260,8 @@
}
public Entry<String, Item>[] query(String queryString) {
+ logger.info("query " + queryString);
+
if (queryString.startsWith("dependencies=") || queryString.startsWith("alldependencies=")) {
// Return the collection of dependencies of the specified contribution
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java Fri Mar 21 13:11:14 2008
@@ -20,6 +20,7 @@
package org.apache.tuscany.sca.workspace.admin.impl;
import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.DEPLOYMENT_CONTRIBUTION_URI;
+import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeAlternateLink;
import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeKey;
import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeQName;
import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeSourceLink;
@@ -27,7 +28,6 @@
import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.contributionURI;
import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.locationURL;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
@@ -55,6 +55,7 @@
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.Composite;
import org.apache.tuscany.sca.assembly.SCABindingFactory;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
@@ -205,6 +206,8 @@
}
public Entry<String, Item>[] getAll() {
+ logger.info("getAll");
+
// Return all the deployable composites in the contributions
List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>();
@@ -231,6 +234,7 @@
}
public Item get(String key) throws NotFoundException {
+ logger.info("get " + key);
// Get the specified contribution info
String contributionURI = contributionURI(key);
@@ -270,6 +274,8 @@
}
public Entry<String, Item>[] query(String queryString) {
+ logger.info("query " + queryString);
+
if (queryString.startsWith("contribution=")) {
// Return all the deployable composites in the specified
@@ -311,6 +317,7 @@
// Get the request path
String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8");
String key = path.startsWith("/")? path.substring(1) : path;
+ logger.info("get " + key);
// Expect a key in the form
// composite:contributionURI;namespace;localName
@@ -576,55 +583,40 @@
}
/**
- * Returns a link to a deployable composite.
- *
- * If the containing contribution is a local directory, return the URI of the local composite file
- * inside the contribution.
- *
- * If the containing contribution is a local or remote file, return a URI of the form:
- * jar: contribution URI !/ composite URI.
- *
- * @param contributionLocation
- * @param deployableURI
- * @return
- */
- private static String alternateLink(String contributionLocation, String deployableURI) {
- URI uri = URI.create(contributionLocation);
- if ("file".equals(uri.getScheme())) {
- String path = uri.toString().substring(5);
- File file = new File(path);
- if (file.isDirectory()) {
- if (contributionLocation.endsWith("/")) {
- return contributionLocation + deployableURI;
- } else {
- return contributionLocation + "/" + deployableURI;
- }
- } else {
- return contributionLocation + "!/" + deployableURI;
- }
- } else {
- return contributionLocation + "!/" + deployableURI;
- }
- }
-
- /**
- * Returns the list of components in a composite.
+ * Returns the entry contents describing a composite.
*
* @param composite
* @return
*/
- private static String components(Composite composite) {
+ private static String content(Composite composite) {
StringBuffer sb = new StringBuffer();
List<Component> components = composite.getComponents();
- if (!components.isEmpty()) {
- sb.append("Components: <span id=\"components\">");
- for (int i = 0, n = components.size(); i < n; i++) {
- Component component = components.get(i);
- if (i != 0) {
+ for (int i = 0, n = components.size(); i < n; i++) {
+ Component component = components.get(i);
+ if (component.getImplementation() instanceof NodeImplementation) {
+ List<ComponentService> services = component.getServices();
+ if (!services.isEmpty()) {
+ List<Binding> bindings = services.get(0).getBindings();
+ if (!bindings.isEmpty()) {
+
+ // List node URIs
+ sb.append("Node URI: <span id=\"nodeURI\">");
+ sb.append(component.getServices().get(0).getBindings().get(0).getURI());
+ break;
+ }
+ }
+ } else {
+
+ // List component names
+ if (sb.length() == 0) {
+ sb.append("Components: <span id=\"components\">");
+ } else {
sb.append(" ");
}
sb.append(component.getName());
}
+ }
+ if (sb.length() != 0) {
sb.append("</span>");
}
return sb.toString();
@@ -678,9 +670,9 @@
String deployableURI = deployable.getURI();
Item item = new Item();
item.setTitle(compositeTitle(contributionURI, qname));
- item.setContents(components(deployable));
+ item.setContents(content(deployable));
item.setLink(compositeSourceLink(contributionURI, qname));
- item.setAlternate(alternateLink(contributionLocation, deployableURI));
+ item.setAlternate(compositeAlternateLink(contributionLocation, deployableURI));
item.setRelated(relatedLink(deployable));
return item;
}
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java Fri Mar 21 13:11:14 2008
@@ -129,6 +129,7 @@
}
public Entry<String, Item>[] getAll() {
+ logger.info("getAll");
// Return all the composites in the domain composite
List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>();
@@ -155,8 +156,20 @@
}
public Item get(String key) throws NotFoundException {
- // Returns the composite with the given key
- return deployableCollection.get(key);
+ logger.info("get " + key);
+
+ String contributionURI = contributionURI(key);
+ QName qname = compositeQName(key);
+
+ // Look for the specified composite in the domain composite
+ List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>();
+ Composite compositeCollection = readCompositeCollection();
+ for (Composite composite: compositeCollection.getIncludes()) {
+ if (contributionURI.equals(composite.getURI()) && qname.equals(composite.getName())) {
+ return deployableCollection.get(key);
+ }
+ }
+ throw new NotFoundException(key);
}
@Override
@@ -169,6 +182,7 @@
// Get the request path
String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8");
String key = path.startsWith("/")? path.substring(1) : path;
+ logger.info("get " + key);
// Get the item describing the composite
Item item;
@@ -211,6 +225,8 @@
}
public String post(String key, Item item) {
+ logger.info("post " + key);
+
String contributionURI = contributionURI(key);
QName qname = compositeQName(key);
@@ -248,6 +264,8 @@
}
public void put(String key, Item item) throws NotFoundException {
+ logger.info("put " + key);
+
String contributionURI = contributionURI(key);
QName qname = compositeQName(key);
@@ -273,6 +291,8 @@
}
public void delete(String key) throws NotFoundException {
+ logger.info("delete " + key);
+
String contributionURI = contributionURI(key);
QName qname = compositeQName(key);
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DomainAdminUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DomainAdminUtil.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DomainAdminUtil.java (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DomainAdminUtil.java Fri Mar 21 13:11:14 2008
@@ -33,7 +33,7 @@
*/
public final class DomainAdminUtil {
- static final String DEPLOYMENT_CONTRIBUTION_URI = "http://tuscany.apache.org/xmlns/sca/1.0/cloud";
+ static final String DEPLOYMENT_CONTRIBUTION_URI = "http://tuscany.apache.org/cloud";
/**
* Extracts a qname from a key expressed as contributionURI;namespace;localpart.
@@ -119,6 +119,38 @@
return file.toURI().toURL();
} else {
return uri.toURL();
+ }
+ }
+
+ /**
+ * Returns a link to a deployable composite.
+ *
+ * If the containing contribution is a local directory, return the URI of the local composite file
+ * inside the contribution.
+ *
+ * If the containing contribution is a local or remote file, return a URI of the form:
+ * jar: contribution URI !/ composite URI.
+ *
+ * @param contributionLocation
+ * @param deployableURI
+ * @return
+ */
+ static String compositeAlternateLink(String contributionLocation, String deployableURI) {
+ URI uri = URI.create(contributionLocation);
+ if ("file".equals(uri.getScheme())) {
+ String path = uri.toString().substring(5);
+ File file = new File(path);
+ if (file.isDirectory()) {
+ if (contributionLocation.endsWith("/")) {
+ return contributionLocation + deployableURI;
+ } else {
+ return contributionLocation + "/" + deployableURI;
+ }
+ } else {
+ return contributionLocation + "!/" + deployableURI;
+ }
+ } else {
+ return contributionLocation + "!/" + deployableURI;
}
}
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java Fri Mar 21 13:11:14 2008
@@ -56,6 +56,8 @@
}
public Entry<String, Item>[] getAll() {
+ logger.info("getAll");
+
// Return all the files
List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>();
File directory = new File(directoryName);
@@ -71,6 +73,7 @@
}
public Item get(String key) throws NotFoundException {
+ logger.info("get " + key);
return item(key);
}
@@ -83,6 +86,8 @@
}
public void delete(String key) throws NotFoundException {
+ logger.info("delete " + key);
+
File directory = new File(directoryName);
File file = new File(directory, key);
if (file.exists()) {
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java Fri Mar 21 13:11:14 2008
@@ -80,6 +80,7 @@
if (!directory.exists()) {
directory.mkdirs();
}
+ logger.info("post " + item.getName());
item.write(new File(directory, item.getName()));
}
}
@@ -101,6 +102,8 @@
if (path.startsWith("/")) {
path = path.substring(1);
}
+ logger.info("get " + path);
+
try {
// Analyze the given path
Added: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java?rev=639788&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java (added)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java Fri Mar 21 13:11:14 2008
@@ -0,0 +1,243 @@
+/*
+ * 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.workspace.admin.impl;
+
+import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeKey;
+import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeQName;
+import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.contributionURI;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URLDecoder;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.tuscany.sca.implementation.data.collection.Entry;
+import org.apache.tuscany.sca.implementation.data.collection.Item;
+import org.apache.tuscany.sca.implementation.data.collection.LocalItemCollection;
+import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * Implementation of a component that provides a quick start path for a
+ * composite in a contribution.
+ *
+ * @version $Rev$ $Date$
+ */
+@Scope("COMPOSITE")
+@Service(interfaces={Servlet.class})
+public class QuickStartServiceImpl extends HttpServlet {
+ private static final long serialVersionUID = -3477992129462720901L;
+
+ private final static Logger logger = Logger.getLogger(QuickStartServiceImpl.class.getName());
+
+ @Reference
+ public LocalItemCollection contributionCollection;
+
+ @Reference
+ public LocalItemCollection deployableCollection;
+
+ @Reference
+ public LocalItemCollection domainCompositeCollection;
+
+ @Reference
+ public LocalItemCollection cloudCollection;
+
+ @Reference
+ public LocalItemCollection processCollection;
+
+ /**
+ * Initialize the component.
+ */
+ @Init
+ public void initialize() throws ParserConfigurationException {
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ try {
+
+ // Get the request path
+ String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8");
+ if (path.startsWith("/")) {
+ path = path.substring(1);
+ }
+
+ // Get the request parameters
+ String contributionURI = request.getParameter("contribution");
+ String contributionLocation = request.getParameter("location");
+ String compositeURI = request.getParameter("composite");
+ String start = request.getParameter("start");
+
+ logger.info("Composite Quick Start.");
+ logger.info("Contribution URI: " + contributionURI);
+ logger.info("Contribution location: " + contributionLocation);
+ logger.info("Composite URI: " + compositeURI);
+
+ // Look for the contribution in the workspace
+ Entry<String, Item>[] contributionEntries = contributionCollection.getAll();
+ Entry<String, Item> contributionEntry = null;
+ for (Entry<String, Item> entry: contributionEntries) {
+ if (contributionURI.equals(entry.getKey())) {
+ contributionEntry = entry;
+ break;
+ }
+ }
+
+ // Add the contribution if necessary
+ if (contributionEntry == null) {
+ Item item = new Item();
+ item.setLink(contributionLocation);
+ contributionCollection.post(contributionURI, item);
+ }
+
+ // Look for the specified deployable composite in the contribution
+ String compositeKey = null;
+ Entry<String, Item>[] deployableEntries = deployableCollection.query("contribution=" + contributionURI);
+ for (Entry<String, Item> entry: deployableEntries) {
+ Item item = entry.getData();
+ if (contributionURI.equals(contributionURI(entry.getKey())) && item.getAlternate().endsWith(compositeURI)) {
+ compositeKey = entry.getKey();
+ break;
+ }
+ }
+
+ if (compositeKey == null) {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND, compositeURI);
+ return;
+ }
+
+ // Look for the deployable composite in the domain composite
+ try {
+ domainCompositeCollection.get(compositeKey);
+ } catch (NotFoundException e) {
+
+ // Add the deployable composite to the domain composite
+ Item item = new Item();
+ domainCompositeCollection.post(compositeKey, item);
+ }
+
+ // Check if the deployable composite is already assigned a node
+ Entry<String, Item>[] nodeEntries = cloudCollection.getAll();
+ String nodeName = null;
+ for (Entry<String, Item> entry: nodeEntries) {
+ Item item = entry.getData();
+ String related = item.getRelated();
+ if (related != null) {
+ int c = related.indexOf("composite:");
+ related = related.substring(c);
+ if (compositeKey.equals(related)) {
+ nodeName = compositeQName(entry.getKey()).getLocalPart();
+ }
+ }
+ }
+
+ // Create a new node for the composite if necessary
+ if (nodeName == null) {
+
+ // Construct node name and key
+ QName compositeName = compositeQName(compositeKey);
+ nodeName = compositeName.getLocalPart() + "Node";
+ String nodeKey = compositeKey("http://tuscany.apache.org/cloud", new QName("http://tuscany.apache.org/cloud", nodeName));
+
+ // Find a free node port
+ Set<Integer> nodePorts = new HashSet<Integer>();
+ for (Entry<String, Item> entry: nodeEntries) {
+ Item item = entry.getData();
+ String content = item.getContents();
+ if (content != null) {
+ int bs = content.indexOf("<span id=\"nodeURI\">");
+ if (bs != -1) {
+ content = content.substring(bs + 19);
+ int es = content.indexOf("</span>");
+ if (es != -1) {
+ content = content.substring(0, es);
+ URI uri = URI.create(content);
+ int port = uri.getPort();
+ if (port != -1) {
+ nodePorts.add(port);
+ }
+ }
+ }
+ }
+ }
+ String nodeURI = null;
+ for (int port = 8100; port<8200; port++) {
+ if (!nodePorts.contains(port)) {
+ nodeURI = "http://localhost:" + port;
+ break;
+ }
+ }
+ if (nodeURI == null) {
+ throw new RuntimeException("Couldn't find a free port for new node: " + nodeName);
+ }
+
+ // Build the entry describing the node
+ Item item = new Item();
+ String content =
+ "<composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\"\n" +
+ " xmlns:t=\"http://tuscany.apache.org/xmlns/sca/1.0\"\n" +
+ " targetNamespace=\"http://tuscany.apache.org/cloud\"\n" +
+ " xmlns:c=\"" + compositeName.getNamespaceURI() + "\"\n" +
+ " name=\"" + nodeName + "\">\n" +
+ "\n" +
+ " <component name=\"" + nodeName + "\">\n" +
+ " <t:implementation.node uri=\"" + contributionURI + "\" composite=\"c:" + compositeName.getLocalPart() + "\"/>\n" +
+ " <service name=\"Node\">\n" +
+ " <binding.ws uri=\"" + nodeURI + "\"/>\n" +
+ " <t:binding.http uri=\"" + nodeURI + "\"/>\n" +
+ " <t:binding.jsonrpc uri=\"" + nodeURI + "\"/>\n" +
+ " <t:binding.atom uri=\"" + nodeURI + "\"/>\n" +
+ " </service>\n" +
+ " </component>\n" +
+ "</composite>";
+ item.setContents(content);
+
+ // Create the new node
+ cloudCollection.post(nodeKey, item);
+ }
+
+ // Finally, start the node
+ if ("true".equals(start)) {
+ processCollection.post(nodeName, new Item());
+ }
+
+ response.getWriter().print("<html><body>Node <span id=\"node\">" + nodeName + "</span> OK.</body></html>");
+
+ } catch (Exception e) {
+ logger.log(Level.SEVERE, "Could not start composite", e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/DomainAdmin.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/DomainAdmin.composite?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/DomainAdmin.composite (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/DomainAdmin.composite Fri Mar 21 13:11:14 2008
@@ -150,10 +150,29 @@
<reference name="cloudCollection" target="CloudCollectionComponent/LocalItemCollection"/>
</component>
+ <component name="QuickStartServiceComponent">
+ <implementation.java class="org.apache.tuscany.sca.workspace.admin.impl.QuickStartServiceImpl"/>
+ <service name="Servlet">
+ <t:binding.http uri="http://localhost:9990/quickstart"/>
+ </service>
+ <reference name="contributionCollection" target="ContributionCollectionComponent/LocalItemCollection"/>
+ <reference name="deployableCollection" target="DeployableCompositeCollectionComponent/LocalItemCollection"/>
+ <reference name="domainCompositeCollection" target="DomainCompositeCollectionComponent/LocalItemCollection"/>
+ <reference name="cloudCollection" target="CloudCollectionComponent/LocalItemCollection"/>
+ <reference name="processCollection" target="NodeProcessCollectionComponent/LocalItemCollection"/>
+ </component>
+
<component name="NodeProcessCollectionComponent">
<implementation.java class="org.apache.tuscany.sca.implementation.node.launcher.NodeProcessCollectionImpl"/>
<service name="ItemCollection">
<t:binding.atom uri="http://localhost:9990/process" title="Log"/>
+ </service>
+ </component>
+
+ <component name="PingServiceComponent">
+ <implementation.java class="org.apache.tuscany.sca.implementation.node.launcher.PingServiceImpl"/>
+ <service name="Servlet">
+ <t:binding.http uri="http://localhost:9990/ping"/>
</service>
</component>
Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html?rev=639788&r1=639787&r2=639788&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html Fri Mar 21 13:11:14 2008
@@ -83,19 +83,14 @@
}
}
+ var nodeName = compositeLocalName(nodeId);
+ nodeNames[i] = nodeName;
+
var content = "";
if (entries[i].getElementsByTagName("content")[0].firstChild != null) {
content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
}
- var bs = content.indexOf('<span id="components">');
- if (bs != -1) {
- var es = content.indexOf('</span>', bs);
- nodeName = content.substring(bs, es + 7);
- }
- var nodeName = compositeLocalName(nodeId);
- nodeNames[i] = nodeName;
-
composites += '<tr>'
if (content.indexOf('<span id="problem"') != -1) {
composites += '<td><input name="composites" type="checkbox" value="' + nodeId + '">' +
@@ -140,16 +135,16 @@
var compositeName = document.newCompositeForm.compositeName.value;
var contributionURI = document.newCompositeForm.contributionURI.value;
var id = 'composite:' +
- 'http://tuscany.apache.org/xmlns/sca/1.0/cloud' + ';' +
- 'cloud:/' + ';' +
+ 'http://tuscany.apache.org/cloud' + ';' +
+ 'http://tuscany.apache.org/cloud' + ';' +
nodeName;
var entry = '<entry xmlns="http://www.w3.org/2005/Atom">\n' +
'<id>' + id + '</id>\n' +
- '<content type="text/xml"\n>\n' +
+ '<content type="text/xml">\n' +
'<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"\n' +
' xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"\n' +
- ' targetNamespace="cloud:/"\n' +
+ ' targetNamespace="http://tuscany.apache.org/cloud"\n' +
' xmlns:c="' + compositeNamespace + '"\n' +
' name="' + nodeName + '">\n' +
'\n' +
@@ -231,7 +226,7 @@
<br>
<span class=hd1>
SCA Domain<br><br>
- Cloud</b> <a href="/process/"><img src="icons/feed-icon.png" border="0"></a>
+ Cloud</b> <a href="/cloud/"><img src="icons/feed-icon.png" border="0"></a>
</span>
<br><br>
Here is the list of SCA nodes configured in your SCA domain cloud.
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org