You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2012/12/03 19:26:44 UTC
svn commit: r1416623 - in /airavata/trunk: ./ modules/server/
modules/server/src/ modules/server/src/main/ modules/server/src/main/java/
modules/server/src/main/java/org/ modules/server/src/main/java/org/apache/
modules/server/src/main/java/org/apache/...
Author: lahiru
Date: Mon Dec 3 18:26:39 2012
New Revision: 1416623
URL: http://svn.apache.org/viewvc?rev=1416623&view=rev
Log:
adding new server module to handle embedded tomcat startup.
Added:
airavata/trunk/modules/server/
airavata/trunk/modules/server/pom.xml
airavata/trunk/modules/server/src/
airavata/trunk/modules/server/src/main/
airavata/trunk/modules/server/src/main/java/
airavata/trunk/modules/server/src/main/java/org/
airavata/trunk/modules/server/src/main/java/org/apache/
airavata/trunk/modules/server/src/main/java/org/apache/airavata/
airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/
airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcat.java
airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcatException.java
airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
airavata/trunk/modules/server/src/main/resources/
airavata/trunk/modules/server/src/test/
airavata/trunk/modules/server/src/test/java/
airavata/trunk/modules/server/src/test/resources/
Modified:
airavata/trunk/pom.xml
Added: airavata/trunk/modules/server/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/server/pom.xml?rev=1416623&view=auto
==============================================================================
--- airavata/trunk/modules/server/pom.xml (added)
+++ airavata/trunk/modules/server/pom.xml Mon Dec 3 18:26:39 2012
@@ -0,0 +1,100 @@
+<?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. -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>org.apache.airavata</groupId>
+ <artifactId>airavata</artifactId>
+ <version>0.6-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>airavata-server</artifactId>
+ <name>Airavata Embedded Tomcat Implementation</name>
+ <description>Module for starting embedded tomcat</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tomcat.embed</groupId>
+ <artifactId>tomcat-embed-core</artifactId>
+ <version>7.0.22</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.0.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat.embed</groupId>
+ <artifactId>tomcat-embed-logging-juli</artifactId>
+ <version>7.0.22</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat.embed</groupId>
+ <artifactId>tomcat-embed-jasper</artifactId>
+ <version>7.0.22</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.7</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.airavata</groupId>
+ <artifactId>airavata-common-utils</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-jasper</artifactId>
+ <version>7.0.22</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-jasper-el</artifactId>
+ <version>7.0.22</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-jsp-api</artifactId>
+ <version>7.0.22</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${surefire.version}</version>
+ <configuration>
+ <testSourceDirectory>${basedir}\src\test\java\</testSourceDirectory>
+ </configuration>
+ </plugin>
+ </plugins>
+ <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
+ <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
+ <testResources>
+ <testResource>
+ <directory>${project.basedir}/src/test/resources</directory>
+ </testResource>
+ </testResources>
+ </build>
+</project>
Added: airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcat.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcat.java?rev=1416623&view=auto
==============================================================================
--- airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcat.java (added)
+++ airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcat.java Mon Dec 3 18:26:39 2012
@@ -0,0 +1,312 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.airavata.server;
+
+
+import org.apache.catalina.*;
+import org.apache.catalina.connector.Connector;
+import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.startup.Embedded;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.coyote.http11.AbstractHttp11JsseProtocol;
+import org.apache.tomcat.util.IntrospectionUtils;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This is an improvement to Embedded Tomcat. The objective is to provide a cleaner API for
+ * embedders.
+ */
+@SuppressWarnings("unused")
+public class BetterTomcat {
+ private Tomcat tomcat = new Tomcat();
+ private static Map<String, Connector> connectors = new HashMap<String, Connector>();
+ private boolean unpackWars = true;
+
+ public BetterTomcat() {
+ // Override the default Tomcat connector. Otherwise a Connector on 8080 will be started
+ tomcat.setConnector(new Connector(Protocol.HTTP_11.getProtocolName()));
+// setDefaultHost("defaultHost");
+// setBaseDir(".");
+ }
+
+ public BetterTomcat(int port) {
+ this();
+ addConnector(Protocol.HTTP_11, null, port);
+ }
+
+ /**
+ * Indicates whether WAR files should be unpacked or not
+ *
+ * @param unpackWars true - unpackWars
+ */
+ public void setUnpackWars(boolean unpackWars) {
+ this.unpackWars = unpackWars;
+ }
+
+ /**
+ * Start the server.
+ *
+ * @throws LifecycleException If an irrecoverable error occurs while starting
+ */
+ public void start() throws LifecycleException {
+ tomcat.start();
+ }
+
+ /**
+ * Stop the server.
+ *
+ * @throws LifecycleException If an irrecoverable error occurs while stopping
+ */
+ public void stop() throws LifecycleException {
+ tomcat.stop();
+ }
+
+ public Host getHost() {
+ Host host = tomcat.getHost();
+ ((StandardHost) host).setUnpackWARs(unpackWars);
+ return host;
+ }
+
+ /**
+ * Add a webapp using normal WEB-INF/web.xml if found.
+ *
+ * @param contextPath The context of the webapp, e.g., /foo
+ * @param webappFilePath The file path of the webapp. Can be the path to a WAR file or a
+ * directory,
+ * e.g.,
+ * 1. /home/azeez/bettertomcat/foo.war
+ * 2. /home/azeez/bettertomcat/foo
+ * @return new Context The Context of the deployed webapp
+ * @throws BetterTomcatException If webapp deployment fails
+ */
+ public Context addWebapp(String contextPath,
+ String webappFilePath) throws BetterTomcatException {
+
+ Context context;
+ try {
+ context = tomcat.addWebapp(contextPath, webappFilePath);
+ if (context.getState().equals(LifecycleState.STOPPED)) {
+ throw new BetterTomcatException("Webapp " + context + " failed to deploy");
+ }
+ if (!unpackWars) {
+ context.addParameter("antiJARLocking", "false");
+ context.addParameter("antiResourceLocking", "false");
+ }
+ return context;
+ } catch (ServletException e) {
+ throw new BetterTomcatException("Webapp failed to deploy", e);
+ }
+ }
+
+ /**
+ * Add a webapp to a particular Host
+ *
+ * @param host The Host to which this webapp is added to
+ * @param contextPath The context of the webapp, e.g., /foo
+ * @param webappFilePath The file path of the webapp. Can be the path to a WAR file or a
+ * directory,
+ * e.g.,
+ * 1. /home/azeez/bettertomcat/foo.war
+ * 2. /home/azeez/bettertomcat/foo
+ * @return new Context The Context of the deployed webapp
+ */
+ public Context addWebapp(Host host, String contextPath, String webappFilePath) {
+ return tomcat.addWebapp(host, contextPath, webappFilePath);
+ }
+
+ /**
+ * Add a context - programmatic mode, no web.xml used.
+ * <p/>
+ * API calls equivalent with web.xml:
+ * <p/>
+ * context-param
+ * ctx.addParameter("name", "value");
+ * <p/>
+ * <p/>
+ * error-page
+ * ErrorPage ep = new ErrorPage();
+ * ep.setErrorCode(500);
+ * ep.setLocation("/error.html");
+ * ctx.addErrorPage(ep);
+ * <p/>
+ * ctx.addMimeMapping("ext", "type");
+ * <p/>
+ * Note: If you reload the Context, all your configuration will be lost. If
+ * you need reload support, consider using a LifecycleListener to provide
+ * your configuration.
+ * <p/>
+ *
+ * @param contextPath The context of the webapp. "" for root context.
+ * @param baseDir base dir for the context, for static files. Must exist,
+ * relative to the server home
+ * @return new Context The Context of the deployed webapp
+ */
+ public Context addContext(String contextPath, String baseDir) {
+ return tomcat.addContext(contextPath, baseDir);
+ }
+
+ public Context addContext(Host host, String contextPath, String dir) {
+ return tomcat.addContext(host, contextPath, dir);
+ }
+
+ /**
+ * Equivalent with
+ * <servlet><servlet-name><servlet-class>.
+ * <p/>
+ * In general it is better/faster to use the method that takes a
+ * Servlet as param - this one can be used if the servlet is not
+ * commonly used, and want to avoid loading all deps.
+ * ( for example: jsp servlet )
+ * <p/>
+ * You can customize the returned servlet, ex:
+ * <p/>
+ * wrapper.addInitParameter("name", "value");
+ *
+ * @param contextPath Context to add Servlet to
+ * @param servletName Servlet name (used in mappings)
+ * @param servletClass The class to be used for the Servlet
+ * @return The wrapper for the servlet
+ */
+ public Wrapper addServlet(String contextPath,
+ String servletName,
+ String servletClass) {
+ return tomcat.addServlet(contextPath, servletName, servletClass);
+ }
+
+ /**
+ * Add an existing Servlet to the context with no class.forName or
+ * initialisation.
+ *
+ * @param contextPath Context to add Servlet to
+ * @param servletName Servlet name (used in mappings)
+ * @param servlet The Servlet to add
+ * @return The wrapper for the servlet
+ */
+ public Wrapper addServlet(String contextPath,
+ String servletName,
+ Servlet servlet) {
+ return tomcat.addServlet(contextPath, servletName, servlet);
+ }
+
+ /**
+ * Enables JNDI naming which is disabled by default. Server must implement
+ * {@link org.apache.catalina.Lifecycle} in order for the
+ * {@link org.apache.catalina.core.NamingContextListener} to be used.
+ */
+ public void enableNaming() {
+ tomcat.enableNaming();
+ }
+
+ public Connector addConnector(int port) {
+ return addConnector(Protocol.HTTP_11, null, port);
+ }
+
+ /**
+ * Get a Tomcat Connector. If a connector with the Tomcat connector does not exist, create a new
+ * one.
+ *
+ * @param protocol The protocol of the connector.
+ * @param address The IP address of the network interface to which this connector should bind
+ * to. Specify this as null if the connector should bind to all network interfaces.
+ * @param port The port on which this connector has to be run
+ * @return The Tomcat connector
+ */
+ public Connector addConnector(Protocol protocol, String address, int port) {
+ Connector connector = connectors.get(protocol + "-" + address + "-" + port);
+ if (connector == null) {
+ connector = new Connector(protocol.getProtocolClass());
+ if (address != null) {
+ IntrospectionUtils.setProperty(connector, "address", address);
+ }
+ connector.setPort(port);
+ connector.setEnableLookups(true);
+ connector.setProperty("bindOnInit", "false");
+ if (protocol.equals(Protocol.HTTPS_11) || protocol.equals(Protocol.HTTPS_11_NIO)) {
+ connector.setSecure(true);
+ connector.setAttribute("SSLEnabled", "true");
+ connector.setScheme("https");
+ }
+ tomcat.getService().addConnector(connector);
+ }
+ return connector;
+ }
+
+ public void setClientAuth(Connector connector, String clientAuth) {
+ ((AbstractHttp11JsseProtocol)connector.getProtocolHandler()).setClientAuth(clientAuth);
+ }
+
+ public Connector getConnector(Protocol protocol, String address, int port) {
+ return addConnector(protocol, address, port);
+ }
+
+ public void setBaseDir(String baseDir) {
+ tomcat.setBaseDir(baseDir);
+ }
+
+ public void setDefaultHost(String defaultHostName) {
+ tomcat.setHostname(defaultHostName);
+ tomcat.getEngine().setDefaultHost(defaultHostName);
+ }
+
+ public void setDefaultRealm(Realm realm) {
+ tomcat.setDefaultRealm(realm);
+ }
+
+ /**
+ * The valid protocol types
+ */
+ @SuppressWarnings("unused")
+ public static enum Protocol {
+ HTTP_11("HTTP/1.1", "HTTP/1.1"),
+ HTTPS_11("HTTPS/1.1", "HTTP/1.1"),
+ HTTP_11_NIO("HTTP/1.1/NIO", "org.apache.coyote.http11.Http11NioProtocol"),
+ HTTPS_11_NIO("HTTPS/1.1/NIO", "org.apache.coyote.http11.Http11NioProtocol"),
+ HTTP_11_APR("HTTP/1.1/APR","org.apache.coyote.http11.Http11AprProtocol"),
+ HTTPS_11_APR("HTTPS/1.1/APR", "org.apache.coyote.http11.Http11AprProtocol"),
+ MEMORY("memory", "org.apache.coyote.memory.MemoryProtocolHandler"),
+ AJP("ajp", "org.apache.coyote.ajp.AjpProtocol");
+
+ private String protocolName;
+ private String protocolClass;
+
+ Protocol(String protocolName, String protocolClass) {
+ this.protocolName = protocolName;
+ this.protocolClass = protocolClass;
+ }
+
+ public String getProtocolName() {
+ return protocolName;
+ }
+
+ public String getProtocolClass() {
+ return protocolClass;
+ }
+ }
+
+ /**
+ * Returns the wrapped Tomcat instance. This should be used only when advanced functionality
+ * is required
+ *
+ * @return The Tomcat instance which can be used by advanced users who wish to gain more control
+ */
+ public Tomcat getTomcat() {
+ return tomcat;
+ }
+}
Added: airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcatException.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcatException.java?rev=1416623&view=auto
==============================================================================
--- airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcatException.java (added)
+++ airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/BetterTomcatException.java Mon Dec 3 18:26:39 2012
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. 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.airavata.server;
+
+
+/**
+ * BetterTomcatException
+ */
+public class BetterTomcatException extends Exception {
+ public BetterTomcatException() {
+ super();
+ }
+
+ public BetterTomcatException(String message) {
+ super(message);
+ }
+
+ public BetterTomcatException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public BetterTomcatException(Throwable cause) {
+ super(cause);
+ }
+}
Added: airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java?rev=1416623&view=auto
==============================================================================
--- airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java (added)
+++ airavata/trunk/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java Mon Dec 3 18:26:39 2012
@@ -0,0 +1,93 @@
+/*
+ *
+ * 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.airavata.server;
+
+import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.catalina.Wrapper;
+import java.io.File;
+import org.apache.catalina.Host;
+import org.apache.catalina.startup.Tomcat;
+
+public class ServerMain {
+
+ private String path = null;
+ private Tomcat embedded = null;
+ private Host host = null;
+
+ /**
+ * Default Constructor
+ */
+ public ServerMain() {
+ }
+
+
+ /**
+ * This method Starts the Tomcat server.
+ */
+ public void startTomcat() throws Exception {
+
+ BetterTomcat tomcat = new BetterTomcat(Integer.parseInt(ServerSettings.getTomcatPort()));
+ tomcat.addContext("/axis2", System.getenv("AIRAVATA_HOME"));
+ Wrapper axis2Servlet = tomcat.addServlet("/axis2", "AxisServlet", "org.apache.axis2.transport.http.AxisServlet");
+ axis2Servlet.addMapping("/servlet/AxisServlet");
+ axis2Servlet.addMapping("*.jws");
+ axis2Servlet.addMapping("/services/*");
+ axis2Servlet.addInitParameter("axis2.repository.path",System.getenv("AIRAVATA_HOME") + File.separator + "repository");
+ axis2Servlet.addInitParameter("axis2.xml.path", System.getenv("AIRAVATA_HOME") +
+ File.separator + "bin" + File.separator + "axis2.xml");
+ axis2Servlet.setLoadOnStartup(1);
+
+// Wrapper registryServlet = tomcat.addServlet("/registry", "Airavata Web Application", "com.sun.jersey.spi.container.servlet.ServletContainer");
+// registryServlet.addInitParameter("com.sun.jersey.config.property.packages","org.apache.airavata.services.registry.rest;org.codehaus.jackson.jaxrs");
+// registryServlet.setLoadOnStartup(1);
+ tomcat.start();
+ }
+
+ /**
+ * This method Stops the Tomcat server.
+ */
+ public void stopTomcat() throws Exception {
+ // Stop the embedded server
+ embedded.stop();
+ }
+
+
+ public static void main(String args[]) {
+ try {
+ new Thread(){
+ public void run(){
+ ServerMain tomcat = new ServerMain();
+ try {
+ tomcat.startTomcat();
+ } catch (Exception e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+ }
+ }.start();
+ while(true){
+ Thread.sleep(10000);
+ }
+ } catch (Exception e) {
+
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
Modified: airavata/trunk/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/pom.xml?rev=1416623&r1=1416622&r2=1416623&view=diff
==============================================================================
--- airavata/trunk/pom.xml (original)
+++ airavata/trunk/pom.xml Mon Dec 3 18:26:39 2012
@@ -309,6 +309,10 @@
</dependencyManagement>
<repositories>
+ <repository>
+ <id>java.net</id>
+ <url> http://repository.jboss.com/maven2/</url>
+ </repository>
<repository>
<id>central</id>
<name>Maven Central</name>
@@ -596,6 +600,7 @@
<module>samples/simple-math-service</module>
<module>samples/complex-math-service</module>
<module>samples/levenshtein-distance-service</module>
+ <module>modules/server</module>
<module>modules/distribution</module>
<module>modules/test-suite</module>
</modules>