diff options
author | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
---|---|---|
committer | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
commit | bdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a (patch) | |
tree | 38a92061c0793434c4be189f1d70c3458b6bc41d /branches/sca-java-1.0/distribution/webapp/src |
Move Tuscany from Incubator to top level.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-java-1.0/distribution/webapp/src')
12 files changed, 880 insertions, 0 deletions
diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/java/org/apache/tuscany/sca/webapp/ContributionUploaderServlet.java b/branches/sca-java-1.0/distribution/webapp/src/main/java/org/apache/tuscany/sca/webapp/ContributionUploaderServlet.java new file mode 100644 index 0000000000..402a118948 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/java/org/apache/tuscany/sca/webapp/ContributionUploaderServlet.java @@ -0,0 +1,116 @@ +/*
+ * 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.webapp;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+
+import org.apache.tuscany.sca.host.webapp.HotUpdateContextListener;
+
+/**
+ * A Servlet to upload a contribution file.
+ */
+public class ContributionUploaderServlet extends HttpServlet {
+
+ private static final long serialVersionUID = System.currentTimeMillis();
+
+ private File repository;
+
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ ServletContext servletContext = config.getServletContext();
+ repository = new File(servletContext.getRealPath(HotUpdateContextListener.REPOSITORY_FOLDER_NAME));
+ }
+
+ @Override
+ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ // Check that we have a file upload request
+ boolean isMultipart = ServletFileUpload.isMultipartContent(request);
+ if (!isMultipart) {
+ throw new RuntimeException("Need multipart content");
+ }
+
+ // Create a factory for disk-based file items
+ FileItemFactory factory = new DiskFileItemFactory();
+
+ // Create a new file upload handler
+ ServletFileUpload upload = new ServletFileUpload(factory);
+
+ try {
+ // Parse the request
+ List /* FileItem */ items = upload.parseRequest(request);
+ // Process the uploaded items
+ Iterator iter = items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem) iter.next();
+
+ if (!item.isFormField()) {
+ String fileName = item.getName();
+ int index = fileName.lastIndexOf("\\") + 1;
+ String uploadedFileName = repository.getAbsolutePath() + "/" + fileName.substring(index);
+ File uploadedFile = new File(uploadedFileName);
+ item.write(uploadedFile);
+ }
+ }
+ }
+ catch(FileUploadException e) {
+ throw new RuntimeException(e);
+ }
+ catch(Throwable e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+
+ setResponse(response, request);
+ }
+
+ private void setResponse(HttpServletResponse response, HttpServletRequest request) throws IOException {
+ response.setContentType("text/html");
+ PrintWriter out = response.getWriter();
+ out.println("<html>");
+ out.println("<head>");
+ out.println("<title>Apache Tuscany WebApp Runtime</title>");
+ out.println("</head>");
+ out.println("<body>");
+ out.println("<h2>Composite file uploaded</h2>");
+ int port = request.getServerPort();
+ String portSubStr = ((port == -1) ? "" : (":" + request.getServerPort()));
+ String backPath = request.getScheme() + "://" + request.getServerName() + portSubStr + request.getContextPath();
+ out.println("Go <a href=\"" + backPath + "\">back</a>");
+ out.println("</body>");
+ out.println("</html>");
+ }
+}
diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/java/org/apache/tuscany/sca/webapp/WarContextListener.java b/branches/sca-java-1.0/distribution/webapp/src/main/java/org/apache/tuscany/sca/webapp/WarContextListener.java new file mode 100644 index 0000000000..a492dc8271 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/java/org/apache/tuscany/sca/webapp/WarContextListener.java @@ -0,0 +1,297 @@ +/* + * 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.webapp; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException; +import org.apache.tuscany.sca.contribution.service.ContributionException; +import org.apache.tuscany.sca.core.assembly.ActivationException; +import org.apache.tuscany.sca.node.impl.ContributionManagerImpl; +import org.apache.tuscany.sca.node.impl.SCANodeImpl; + +/** + * A ServletContextListener for the Tuscany WAR distribution. + * + * Starts and stops a Tuscany SCA domain Node for the webapp. + * + * TODO: Use Node instead of NodeImpl? + */ +public class WarContextListener implements ServletContextListener { + private final static Logger logger = Logger.getLogger(WarContextListener.class.getName()); + + protected SCANodeImpl node; + protected AddableURLClassLoader classLoader; + protected File repository; + + protected boolean useHotUpdate; + protected long hotDeployInterval = 2000; // 2 seconds, 0 = no hot deploy + protected Thread hotDeployThread; + protected boolean stopHotDeployThread; + + protected HashMap<URL, Long> existingContributions; // value is last modified time + + private String domainName; + + private String nodeName; + + protected static final String NODE_ATTRIBUTE = WarContextListener.class.getName() + ".TuscanyNode"; + protected static final String REPOSITORY_FOLDER_NAME = "sca-contributions"; + + public void contextInitialized(ServletContextEvent event) { + ServletContext servletContext = event.getServletContext(); + initParameters(servletContext); + try { + + initNode(); + + } catch (Throwable e) { + e.printStackTrace(); + servletContext.log("exception initializing SCA node", e); + } + } + + public void contextDestroyed(ServletContextEvent event) { + if (node != null) { + stopNode(); + } + } + + protected void stopNode() { + try { + + node.stop(); + logger.log(Level.INFO, "SCA node stopped"); + + } catch (Throwable e) { + e.printStackTrace(); + logger.log(Level.SEVERE, "exception stopping SCA Node", e); + } + } + + protected void initNode() throws ContributionException, ActivationException, IOException, + CompositeBuilderException, URISyntaxException { + logger.log(Level.INFO, "SCA node starting"); + + classLoader = new AddableURLClassLoader(new URL[] {}, Thread.currentThread().getContextClassLoader()); + Thread.currentThread().setContextClassLoader(classLoader); + node = new SCANodeImpl(domainName, nodeName, classLoader); + node.start(); + + existingContributions = new HashMap<URL, Long>(); + URL[] contributions = getContributionJarURLs(repository); + for (URL contribution : contributions) { + try { + addContribution(contribution); + } catch (Throwable e) { + e.printStackTrace(); + logger.log(Level.WARNING, "Exception adding contribution: " + e); + } + } + + initHotDeploy(repository); + + } + + protected void addContribution(URL contribution) throws CompositeBuilderException, ContributionException, IOException, ActivationException, URISyntaxException { + classLoader.addURL(contribution); + ((ContributionManagerImpl)node.getContributionManager()).addContribution(contribution); + existingContributions.put(contribution, new Long(new File(contribution.toURI()).lastModified())); + logger.log(Level.INFO, "Added contribution: " + contribution); + } + + protected URL[] getContributionJarURLs(File repositoryDir) { + + String[] jarNames = repositoryDir.list(new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.endsWith(".jar"); + }}); + + List<URL> contributionJars = new ArrayList<URL>(); + if (jarNames != null) { + for (String jar : jarNames) { + try { + contributionJars.add(new File(repositoryDir, jar).toURL()); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + } + + return contributionJars.toArray(new URL[contributionJars.size()]); + } + + private void initHotDeploy(final File repository) { + + if (hotDeployInterval == 0) { + return; // hotUpdateInterval of 0 disables hotupdate + } + + Runnable runable = new Runnable() { + + public void run() { + logger.info("Contribution hot deploy activated"); + while (!stopHotDeployThread) { + try { + Thread.sleep(hotDeployInterval); + } catch (InterruptedException e) { + } + if (!stopHotDeployThread) { + checkForUpdates(repository); + } + } + logger.info("Tuscany contribution hot deploy stopped"); + } + }; + hotDeployThread = new Thread(runable, "TuscanyHotDeploy"); + stopHotDeployThread = false; + hotDeployThread.start(); + } + + protected void checkForUpdates(File repository) { + URL[] currentContributions = getContributionJarURLs(repository); + + List<URL> addedContributions = getAddedContributions(currentContributions); + for (URL contribution : addedContributions) { + try { + addContribution(contribution); + } catch (Throwable e) { + e.printStackTrace(); + logger.log(Level.WARNING, "Exception adding contribution: " + e); + } + } + + if (useHotUpdate && areContributionsAltered(currentContributions)) { + stopNode(); + try { + initNode(); + } catch (Throwable e) { + e.printStackTrace(); + logger.log(Level.SEVERE, "exception starting SCA Node", e); + } + } + } + + protected List<URL> getAddedContributions(URL[] currentContrabutions) { + List<URL> urls = new ArrayList<URL>(); + for (URL url : currentContrabutions) { + if (!existingContributions.containsKey(url)) { + urls.add(url); + } + } + return urls; + } + + protected boolean areContributionsAltered(URL[] currentContrabutions) { + try { + + List removedContributions = getRemovedContributions(currentContrabutions); + List updatedContributions = getUpdatedContributions(currentContrabutions); + + return (removedContributions.size() > 0 || updatedContributions.size() > 0); + + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } + + protected List<URL> getUpdatedContributions(URL[] currentContrabutions) throws URISyntaxException { + List<URL> urls = new ArrayList<URL>(); + for (URL url : currentContrabutions) { + if (existingContributions.containsKey(url)) { + File curentFile = new File(url.toURI()); + if (curentFile.lastModified() != existingContributions.get(url)) { + urls.add(url); + logger.info("updated contribution: " + curentFile.getName()); + } + } + } + return urls; + } + + protected List getRemovedContributions(URL[] currentContrabutions) throws URISyntaxException { + List<URL> currentUrls = Arrays.asList(currentContrabutions); + List<URL> urls = new ArrayList<URL>(); + for (URL url : existingContributions.keySet()) { + if (!currentUrls.contains(url)) { + urls.add(url); + } + } + for (URL url : urls) { + logger.info("removed contributions: " + new File(url.toURI()).getName()); + } + return urls; + } + + protected void initParameters(ServletContext servletContext) { + if (servletContext.getInitParameter("domainName") != null) { + domainName = servletContext.getInitParameter("domainName"); + } else { + domainName = SCANodeImpl.LOCAL_DOMAIN_URI; + } + + if (servletContext.getInitParameter("nodeName") != null) { + nodeName = servletContext.getInitParameter("nodeName"); + } else { + nodeName = SCANodeImpl.LOCAL_NODE_URI; + } + + if (servletContext.getInitParameter("hotDeployInterval") != null) { + hotDeployInterval = Long.parseLong(servletContext.getInitParameter("hotDeployInterval")); + } + + useHotUpdate = Boolean.valueOf(servletContext.getInitParameter("hotUpdate")).booleanValue(); + + repository = new File(servletContext.getRealPath(REPOSITORY_FOLDER_NAME)); + } + +} + +class AddableURLClassLoader extends URLClassLoader { + + public AddableURLClassLoader(URL[] urls, ClassLoader parent) { + super(urls, parent); + } + + /** + * Make URLClassLoader addURL public + */ + @Override + public void addURL(URL url) { + super.addURL(url); + } + +} diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/META-INF/sca-contribution.xml b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..819ec5f025 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/META-INF/sca-contribution.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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. +--> +<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0" + targetNamespace="http://management" + xmlns:management="http://management"> + <deployable composite="management:Management"/> +</contribution>
\ No newline at end of file diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/management.composite b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/management.composite new file mode 100644 index 0000000000..85be533ed5 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/management.composite @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://management"
+ xmlns:sample="http://management"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ name="Management">
+
+ <component name="NodeManagerComponent">
+ <implementation.java class="org.apache.tuscany.sca.node.impl.NodeManagerServiceImpl"/>
+ <service name="NodeManagerInitService">
+ <interface.java interface="org.apache.tuscany.sca.node.NodeManagerInitService"/>
+ <binding.sca/>
+ </service>
+ <service name="NodeManagerService">
+ <interface.java interface="org.apache.tuscany.sca.node.NodeManagerService"/>
+ <tuscany:binding.jsonrpc uri="http://localhost:8082/NodeManagerComponent/NodeManagerJson"/>
+ </service>
+ <service name="ComponentManagerService">
+ <interface.java interface="org.apache.tuscany.sca.node.ComponentManagerService"/>
+ <tuscany:binding.jsonrpc uri="http://localhost:8082/NodeManagerComponent/ComponentManagerJson"/>
+ </service>
+ </component>
+
+ <component name="DomainManagerComponent">
+ <implementation.java class="org.apache.tuscany.sca.node.impl.DomainManagerProxyImpl"/>
+ <reference name="domainManager">
+ <interface.java interface="org.apache.tuscany.sca.domain.DomainManagerService"/>
+ <binding.ws uri="http://localhost:8081/DomainManagerComponent/DomainManager"/>
+ </reference>
+ </component>
+
+ <component name="ServiceDiscoveryComponent">
+ <implementation.java class="org.apache.tuscany.sca.node.impl.ServiceDiscoveryProxyImpl" />
+ <reference name="serviceDiscovery">
+ <binding.ws uri="http://localhost:8081/ServiceDiscoveryComponent/ServiceDiscovery"/>
+ </reference>
+ </component>
+
+ <component name="node">
+ <service name="Resource">
+ <tuscany:binding.http uri="http://localhost:8082/node"/>
+ </service>
+ <tuscany:implementation.resource location="webroot"/>
+ </component>
+
+
+</composite>
diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/index.html b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/index.html new file mode 100644 index 0000000000..e5f2cceb19 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/index.html @@ -0,0 +1,69 @@ +<html> +<!-- + * 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. + --> +<head> +<title>Apache Tuscany Node</TITLE> + + <script type="text/javascript" src="../SCADomain/scaDomain.js"></script> + + <script language="JavaScript"> + + componentManager = new JSONRpcClient("../NodeManagerComponent/ComponentManagerJson"); + + function getComponentInfos() { + componentManager.ComponentManagerService.getComponentInfos(handleGetComponentInfos); + } + + function handleGetComponentInfos(result) { + + var text = "" + + for (var i in result.list){ + var component = result.list[i]; + + text = text + "<table>"; + text = text + "<TR CLASS='source_2' >"; + text = text + " <TD>" + component.name+ "</TD>"; + text = text + " <TD>" + component.started+ "</TD>"; + text = text + "</TR>"; + } + + document.getElementById('nodeInfo').innerHTML=text; + } + + + </script> + + <link rel="stylesheet" type="text/css" href="style.css" /> +</head> + +<body onload="getComponentInfos()"> + + +<h1 id="top">Apache Tuscany Node</h1> +<div id="errors"></div> + +<p>Node Name<span id="nodeName"></span>:</p> + +<div id="nodeInfo"></div> + +<p /><input type="button" value="Refresh" onclick="getComponentInfos()" /> + +</body> +</html> diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/node.png b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/node.png Binary files differnew file mode 100644 index 0000000000..b3c949d224 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/node.png diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/style.css b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/style.css new file mode 100644 index 0000000000..f5bbf23379 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/resources/_node/webroot/style.css @@ -0,0 +1,176 @@ +/* + * 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. + */ + +p,table,li,h1,h2,h3 +{ +font-family: verdana, arial, 'sans serif'; +} + +p, h1, h2, h3, table, li, hr +{ +margin-left: 10pt; +} + +table +{ +border-color: black; +border-collapse: separate; +border-spacing: 0px 1px; + +margin-right: 10pt; +margin-left: 10pt; +width: 800px; +} + +.sourceDetailsTable +{ +width: 600px; +} + +tr, td +{ +margin-left: 0pt; +margin-right: 0pt; +padding-left: 10pt; +font-size: 90%; +} + +p,li,th +{ +font-size: 90%; +margin-left: 10pt; +} + +pre +{ +margin-left: 10pt; +} + +body +{ +#ffffff; +} + +h1,h2,h3,hr +{ +color: firebrick; +} + +a:link {COLOR: firebrick;} +a:visited {COLOR: firebrick;} +a:active {COLOR: navy;} + +.link +{ +COLOR: firebrick; +text-decoration: underline; +} + +.clickable +{ +cursor: pointer +} + +.unread_title +{ +font-weight: bold; +} + +.read_title +{ +font-weight: normal; +} + +.summary +{ +color: DimGrey; +} + +.hidden +{ +display: none; +} + +.source_name +{ +width: 600px; +} + +.alert_text +{ +width: 600px; +} + +.alert_data +{ +margin-left: 10px; +width: 800px; +height: 800px; +} + +.source_0 +{ +background-color: LightGreen; +} + +.source_1 +{ +background-color: LightSkyBlue; +} + +.source_2 +{ +background-color: Khaki; +} + +.source_3 +{ +background-color: LightPink; +} + +.source_4 +{ +background-color: Orange; +} + +.source_5 +{ +background-color: LightCoral; +} + +.source_6 +{ +background-color: Orchid; +} + +.source_7 +{ +background-color: Peru; +} + +.source_8 +{ +background-color: SpringGreen; +} + +.source_9 +{ +background-color: LightGrey; +} + diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/webapp/WEB-INF/web.xml b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..a062d6ae1e --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + * 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. +--> + +<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web +Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> +<web-app> + + <display-name>Apache Tuscany WebApp Runtime</display-name> + + <listener> + <listener-class>org.apache.tuscany.sca.webapp.WarContextListener</listener-class> + </listener> + + <context-param> + <param-name>domainName</param-name> + <param-value>http://localhost:8080/</param-value> + </context-param> + <context-param> + <param-name>nodeName</param-name> + <param-value>http://localhost:8081/</param-value> + </context-param> + <context-param> + <param-name>hotDeployInterval</param-name> + <param-value>2000</param-value> + </context-param> + <context-param> + <param-name>hotUpdate</param-name> + <param-value>no</param-value> + </context-param> + + <filter> + <filter-name>tuscany</filter-name> + <filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class> + </filter> + + <filter-mapping> + <filter-name>tuscany</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + +</web-app> diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/safeToDelete.tmp b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/safeToDelete.tmp new file mode 100644 index 0000000000..4efe4b5db3 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/safeToDelete.tmp @@ -0,0 +1 @@ +File just to get the sca-contributions folder included in webapp
\ No newline at end of file diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/sample-calculator-nodeB.jar b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/sample-calculator-nodeB.jar Binary files differnew file mode 100644 index 0000000000..0df7ab8d74 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/sample-calculator-nodeB.jar diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/sample-helloworld-ws-service.jar b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/sample-helloworld-ws-service.jar Binary files differnew file mode 100644 index 0000000000..acf47451b3 --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/sca-contributions/sample-helloworld-ws-service.jar diff --git a/branches/sca-java-1.0/distribution/webapp/src/main/webapp/scaDomainInfo.jsp b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/scaDomainInfo.jsp new file mode 100644 index 0000000000..5a85060d4c --- /dev/null +++ b/branches/sca-java-1.0/distribution/webapp/src/main/webapp/scaDomainInfo.jsp @@ -0,0 +1,74 @@ +<%--
+ * 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.
+--%>
+
+<%@ page import="org.apache.tuscany.sca.host.embedded.SCADomain"%>
+<%@ page import="org.apache.tuscany.sca.host.embedded.management.ComponentManager"%>
+<%@ page import="org.apache.tuscany.sca.assembly.ComponentService"%>
+<%@ page import="org.apache.tuscany.sca.assembly.Binding"%>
+
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%
+ SCADomain scaDomain = (SCADomain) application.getAttribute("org.apache.tuscany.sca.SCADomain");
+ ComponentManager componentManager = scaDomain.getComponentManager();
+%>
+<html>
+<head><title>Apache Tuscany WebApp Runtime</title></head>
+
+<body>
+Apache Tuscany WebApp Runtime
+<br>
+Components in SCA Domain:
+ <%
+ java.util.Iterator i = componentManager.getComponentNames().iterator();
+ while (i.hasNext()) {
+ String compName = i.next().toString();
+
+ %><br><%=compName%><br><%
+
+ org.apache.tuscany.sca.assembly.Component comp = componentManager.getComponent(compName);
+ java.util.Iterator j = comp.getServices().iterator();
+ while (j.hasNext()) {
+ ComponentService compService = (ComponentService)j.next();
+
+ %><%=" - Service: " + compService.getName()%><br><%
+
+ java.util.Iterator k = compService.getBindings().iterator();
+ while (k.hasNext()) {
+ Binding b = (Binding)k.next();
+ String bindingType = b.getClass().getName();
+
+ %><%="-- Binding: " + b.getName() + "(" + bindingType.substring(bindingType.lastIndexOf('.')+1) + ") URI: " + b.getURI()%><br><%
+ }
+ }
+ }
+ %>
+<br>
+
+<hr>
+You can fill in a composite file to upload
+
+<form method='POST' enctype='multipart/form-data' action='/tuscany/ContributionUploader'>
+Composite file to upload: <input type=file name=upfile><br>
+<br>
+<input type=submit value=Press> to upload the composite file
+</form>
+
+</body>
+</html>
+
|