You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@edgent.apache.org by cd...@apache.org on 2018/08/01 12:56:05 UTC

[2/3] incubator-edgent git commit: - Added multiple alternatives for server modules with different servlet engines.

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server-undertow/src/test/java/org/apache/edgent/test/console/server/HttpServerTest.java
----------------------------------------------------------------------
diff --git a/console/server-undertow/src/test/java/org/apache/edgent/test/console/server/HttpServerTest.java b/console/server-undertow/src/test/java/org/apache/edgent/test/console/server/HttpServerTest.java
new file mode 100644
index 0000000..46bd511
--- /dev/null
+++ b/console/server-undertow/src/test/java/org/apache/edgent/test/console/server/HttpServerTest.java
@@ -0,0 +1,172 @@
+/*
+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.edgent.test.console.server;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.edgent.console.server.HttpServer;
+import org.junit.Test;
+
+public class HttpServerTest {
+	
+	public static final String consoleWarNotFoundMessage =  
+			"console.war not found.  Run 'ant' from the top level edgent directory, or 'ant' from 'console/servlets' to create console.war under the webapps directory.";
+
+
+    @Test
+    public void testGetInstance()  {
+    	HttpServer myHttpServer = null;
+    	boolean warNotFoundExceptionThrown = false;
+        try {
+        	myHttpServer = HttpServer.getInstance();
+        } catch (Exception warNotFoundException) {
+        	System.out.println(warNotFoundException.getMessage());
+        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
+        		warNotFoundExceptionThrown = true;
+        		assertEquals("", "");
+        	}
+        } finally {
+        	if (!warNotFoundExceptionThrown) {
+        		assertNotNull("HttpServer getInstance is null", myHttpServer);
+        	} else {
+        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
+        	}
+        }
+    }
+
+    @Test
+    public void startServer() throws Exception {
+    	HttpServer myHttpServer = null;
+    	boolean warNotFoundExceptionThrown = false;
+        try {
+        	myHttpServer = HttpServer.getInstance();
+        } catch (Exception warNotFoundException) {
+        	System.out.println(warNotFoundException.getMessage());
+        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
+        		warNotFoundExceptionThrown = true;
+        		assertEquals("", "");
+        	}
+        } finally {
+        	if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
+                myHttpServer.startServer();
+                assertTrue(myHttpServer.isServerStarted());
+        	} else {
+        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
+        	}
+        }
+    }
+
+    @Test
+    public void isServerStopped() throws Exception {
+    	HttpServer myHttpServer = null;
+    	boolean warNotFoundExceptionThrown = false;
+        try {
+        	myHttpServer = HttpServer.getInstance();
+        } catch (Exception warNotFoundException) {
+        	System.out.println(warNotFoundException.getMessage());
+        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
+        		warNotFoundExceptionThrown = true;
+        		assertEquals("", "");
+        	}
+        } finally {
+			if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
+                myHttpServer.startServer();
+                assertFalse(myHttpServer.isServerStopped());
+        	} else {
+        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
+        	}
+        }
+    }
+
+    @Test
+    public void getConsolePath() throws Exception {
+    	HttpServer myHttpServer = null;
+    	boolean warNotFoundExceptionThrown = false;
+        try {
+        	myHttpServer = HttpServer.getInstance();
+        } catch (Exception warNotFoundException) {
+        	System.out.println(warNotFoundException.getMessage());
+        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
+        		warNotFoundExceptionThrown = true;
+        		assertEquals("", "");
+        	}
+        } finally {
+			if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
+        		assertEquals("/console", myHttpServer.getConsoleContextPath());
+        	} else {
+        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
+        	}
+        }
+        
+    }
+
+    @Test
+    public void getConsoleUrl() throws Exception {
+    	
+    	HttpServer myHttpServer = null;
+    	boolean warNotFoundExceptionThrown = false;
+        try {
+        	myHttpServer = HttpServer.getInstance();
+        } catch (Exception warNotFoundException) {
+        	System.out.println(warNotFoundException.getMessage());
+        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
+        		warNotFoundExceptionThrown = true;
+        		assertEquals("", "");
+        	}
+        } finally {
+			if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
+                myHttpServer.startServer();
+                int portNum = myHttpServer.getConsolePortNumber();
+                String context = myHttpServer.getConsoleContextPath();
+                assertEquals("http://localhost:" + portNum + context, myHttpServer.getConsoleUrl());
+        	} else {
+        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
+        	}
+        }
+    }
+
+    @Test
+    public void getConsolePortNumber() throws Exception {
+    	HttpServer myHttpServer = null;
+    	boolean warNotFoundExceptionThrown = false;
+        try {
+        	myHttpServer = HttpServer.getInstance();
+        } catch (Exception warNotFoundException) {
+        	System.out.println(warNotFoundException.getMessage());
+        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
+        		warNotFoundExceptionThrown = true;
+        		assertEquals("", "");
+        	}
+        } finally {
+			if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
+                myHttpServer.startServer();
+                int portNum = myHttpServer.getConsolePortNumber();
+                assertTrue("the port number is not in integer range: " + Integer.toString(portNum),
+                        (Integer.MAX_VALUE > portNum) && (0 < portNum));
+        	} else {
+        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
+        	}
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server/pom.xml
----------------------------------------------------------------------
diff --git a/console/server/pom.xml b/console/server/pom.xml
deleted file mode 100644
index 956ff17..0000000
--- a/console/server/pom.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<?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">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.edgent</groupId>
-    <artifactId>edgent-console</artifactId>
-    <version>1.3.0-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>edgent-console-server</artifactId>
-
-  <name>Apache Edgent (Java 8): Console: Server</name>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>${project.basedir}/src/main/resources</directory>
-        <targetPath>${project.build.outputDirectory}/</targetPath>
-      </resource>
-      <resource>
-        <!--  bundle the licenses of the artifacts we are bundling -->
-        <directory>${project.basedir}/../../src/main/appended-resources/licenses</directory>
-        <targetPath>${project.build.outputDirectory}/META-INF/licenses</targetPath>
-      </resource>
-    </resources>
-    <plugins>
-      <!--
-        Copy the servlets.war into the build output so it is embedded as
-        resource into the jar.
-      -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-               <!--  Bundle these dependencies in the jar.
-                    
-                  You must maintain the corresponding info if you
-                  add/remove artifacts or change their versions:
-                    - entry in src/main/resources/META-INF/LICENSE
-                    - entry in src/main/resources/META-INF/NOTICE when appropriate                    
- 
-                  See console/servlets and its pom,LICENSE,NOTICE.
-                  
-                  You must maintain the info in this project's
-                  corresponding platforms/java7 files.
-               -->
-              <artifactItems>
-                <artifactItem>
-                  <groupId>org.apache.edgent</groupId>
-                  <artifactId>edgent-console-servlets</artifactId>
-                  <version>${project.version}</version>
-                  <type>war</type>
-                  <outputDirectory>${project.build.outputDirectory}/resources</outputDirectory>
-                  <destFileName>servlets.war</destFileName>
-                </artifactItem>
-              </artifactItems>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-	 <plugin>
-	    <groupId>org.apache.maven.plugins</groupId>
-	    <artifactId>maven-surefire-plugin</artifactId>
-	    <configuration>
-	        <!-- needed because of HttpServer impl and HttpServerPortTest -->
-	        <reuseForks>false</reuseForks>
-	    </configuration>
-	  </plugin>
-   </plugins>
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-http</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-io</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-security</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-server</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlet</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-util</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-webapp</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-xml</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>1.7.12</version>
-    </dependency>
-
-    <!--
-        This artifact is needed by the maven-dependency-plugin
-        by marking this dependency optional, it is not included
-        in the resulting artifact, but Maven ensures it is built
-        prior to this module.
-    -->
-    <dependency>
-      <groupId>org.apache.edgent</groupId>
-      <artifactId>edgent-console-servlets</artifactId>
-      <version>1.3.0-SNAPSHOT</version>
-      <type>war</type>
-      <optional>true</optional>
-    </dependency>
-  </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server/src/main/java/org/apache/edgent/console/server/HttpServer.java
----------------------------------------------------------------------
diff --git a/console/server/src/main/java/org/apache/edgent/console/server/HttpServer.java b/console/server/src/main/java/org/apache/edgent/console/server/HttpServer.java
deleted file mode 100644
index dd89093..0000000
--- a/console/server/src/main/java/org/apache/edgent/console/server/HttpServer.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-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.edgent.console.server;
-
-import java.io.File;
-
-import org.eclipse.jetty.server.Handler;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.AllowSymLinkAliasChecker;
-import org.eclipse.jetty.server.handler.ContextHandlerCollection;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The "Edgent Console".
- * <p>
- * The Console's HTTP server starts with a random available port unless
- * a port is specified via the {@code edgent.console.port} system property. 
- */
-public class HttpServer {
-
-  private static final Logger logger = LoggerFactory.getLogger(HttpServer.class);
-
-	/**
-	 * The only constructor.  A private no-argument constructor.  Called only once from the static HttpServerHolder class.
-	 */
-    private HttpServer() {
-    }
-    
-    /** 
-	 * The static class that creates the singleton HttpServer object.
-	 */
-    private static class HttpServerHolder {
-        // use port 0 if system prop not set, so we know the server will always start
-        private static final Server JETTYSERVER = new Server(Integer.getInteger("edgent.console.port", 0));
-        private static final WebAppContext WEBAPP = new WebAppContext();
-        private static final HttpServer INSTANCE = new HttpServer();
-        private static boolean INITIALIZED = false;
-    }
-
-    /**
-     * Gets the jetty server associated with this class
-     * @return the org.eclipse.jetty.server.Server
-     */
-    private static Server getJettyServer() {
-        return HttpServerHolder.JETTYSERVER;
-    }
-    /**
-     * Initialization of the context path for the web application "/console" occurs in this method
-     * and the handler for the web application is set.  This only occurs once.
-     * @return HttpServer: the singleton instance of this class
-     * @throws Exception on failure
-     */
-    public static HttpServer getInstance() throws Exception {
-        if (!HttpServerHolder.INITIALIZED) {
-            logger.info("initializing");
-            HttpServerHolder.WEBAPP.setContextPath("/console");
-            ServletContextHandler contextJobs = new ServletContextHandler(ServletContextHandler.SESSIONS);
-            contextJobs.setContextPath("/jobs");
-            ServletContextHandler contextMetrics = new ServletContextHandler(ServletContextHandler.SESSIONS);
-            contextMetrics.setContextPath("/metrics");
-            ServerUtil sUtil = new ServerUtil();
-            File servletsJarFile = sUtil.getWarFilePath();
-            if (servletsJarFile.exists()){
-            	HttpServerHolder.WEBAPP.setWar(servletsJarFile.getAbsolutePath());
-            } else {
-                throw new RuntimeException("Unable to find WAR archive in " + servletsJarFile.getAbsolutePath());
-            }
-
-            HttpServerHolder.WEBAPP.addAliasCheck(new AllowSymLinkAliasChecker());
-            ContextHandlerCollection contexts = new ContextHandlerCollection();
-            contexts.setHandlers(new Handler[] { contextJobs, contextMetrics, HttpServerHolder.WEBAPP });
-            HttpServerHolder.JETTYSERVER.setHandler(contexts);
-            HttpServerHolder.INITIALIZED = true;
-        }
-        return HttpServerHolder.INSTANCE;
-    }
-
-    /**
-     * 
-     * @return the ServerConnector object for the jetty server
-     */
-    private static ServerConnector getServerConnector() {
-        return (ServerConnector) HttpServerHolder.JETTYSERVER.getConnectors()[0];
-    }
-
-    /**
-     * 
-     * @return a String containing the context path to the console web application
-     * @throws Exception on failure
-     */
-    public String getConsoleContextPath() throws Exception {
-        return HttpServerHolder.WEBAPP.getContextPath();
-    }
-
-    /**
-     * Starts the jetty web server
-     * @throws Exception on failure
-     */
-    public void startServer() throws Exception {
-        getJettyServer().start();
-    }
-
-    /**
-     * Stops the jetty web server
-     * @throws Exception
-     */
-    @SuppressWarnings("unused")
-    private static void stopServer() throws Exception {
-        getJettyServer().stop();
-    }
-
-    /**
-     * Checks to see if the jetty web server is started
-     * @return a boolean: true if the server is started, false if not
-     */
-    public boolean isServerStarted() {
-        if (getJettyServer().isStarted() || getJettyServer().isStarting() || getJettyServer().isRunning()) {
-            return true;
-        }
-        else {
-            return false;
-        }
-    }
-
-    /**
-     * Checks to see if the server is in a "stopping" or "stopped" state
-     * @return a boolean: true if the server is stopping or stopped, false otherwise
-     */
-    public boolean isServerStopped() {
-        if (getJettyServer().isStopping() || getJettyServer().isStopped()) {
-            return true;
-        }
-        else {
-            return false;
-        }
-    }
-    /**
-     * Returns the port number the console is running on.  Each time the console is started a different port number may be returned.
-     * @return an int: the port number the jetty server is listening on
-     */
-    public int getConsolePortNumber() {
-        return getServerConnector().getLocalPort();
-    }
-    
-    /**
-     * Returns the url for the web application at the "console" context path.  Localhost is always assumed
-     * @return the url for the web application at the "console" context path.
-     * @throws Exception on failure
-     */
-    public String getConsoleUrl() throws Exception {
-        return new String("http://localhost" + ":" + getConsolePortNumber() + getConsoleContextPath());
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server/src/main/java/org/apache/edgent/console/server/ServerUtil.java
----------------------------------------------------------------------
diff --git a/console/server/src/main/java/org/apache/edgent/console/server/ServerUtil.java b/console/server/src/main/java/org/apache/edgent/console/server/ServerUtil.java
deleted file mode 100644
index f8c6fde..0000000
--- a/console/server/src/main/java/org/apache/edgent/console/server/ServerUtil.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-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.edgent.console.server;
-
-import java.io.*;
-
-public class ServerUtil {
-
-	/**
-	 *  The public constructor of this utility class for use by the HttpServer class.
-	 */
-    public ServerUtil() {
-    }
-
-    /**
-     * Returns the File object representing the "webapps" directory
-     * @return a File object or null if the "webapps" directory is not found
-     */
-    public File getWarFilePath() {
-        File war = new File("target/war-resources/servlets.war");
-        if(!war.exists()) {
-            // Eventually create the directory for serving the war.
-            if(!war.getParentFile().exists()) {
-                if(!war.getParentFile().mkdirs()) {
-                    throw new RuntimeException("Could not create output directory at " + war.getAbsolutePath());
-                }
-            }
-
-            // Dump the servlet.war into the output directory.
-            InputStream stream = null;
-            FileOutputStream fileOutputStream = null;
-            try {
-                stream = ServerUtil.class.getResourceAsStream("/resources/servlets.war");
-                if(stream == null) {
-                    throw new RuntimeException("Could not get resource '/resources/servlets.war' from classpath.");
-                }
-
-                int readBytes;
-                byte[] buffer = new byte[4096];
-                fileOutputStream = new FileOutputStream(war);
-                while ((readBytes = stream.read(buffer)) > 0) {
-                    fileOutputStream.write(buffer, 0, readBytes);
-                }
-            } catch (IOException e) {
-                throw new RuntimeException("Could not dump resource 'resources/servlets.war' from classpath.", e);
-            } finally {
-                if(stream != null) {
-                    try {
-                        stream.close();
-                    } catch (IOException e) {
-                        // Ignore.
-                    }
-                }
-                if(fileOutputStream != null) {
-                    try {
-                        fileOutputStream.close();
-                    } catch (IOException e) {
-                        // Ignore.
-                    }
-                }
-            }
-        }
-
-        return war;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server/src/main/remote-resources/META-INF/LICENSE
----------------------------------------------------------------------
diff --git a/console/server/src/main/remote-resources/META-INF/LICENSE b/console/server/src/main/remote-resources/META-INF/LICENSE
deleted file mode 100644
index 8d0e1a0..0000000
--- a/console/server/src/main/remote-resources/META-INF/LICENSE
+++ /dev/null
@@ -1,42 +0,0 @@
-
-===============================================================================
-APACHE EDGENT SUBCOMPONENTS:
-
-This binary includes a number of subcomponents with separate
-copyright notices and license terms.  Your use of this binary
-is subject to the terms and conditions of the following licenses.
-
-===============================================================================
-License: Apache License Version 2.0
-For details, see META-INF/licenses/apache-license-version-2.0.txt
-
-gson (com.google.code.gson:gson:2.2.4)
-metrics-core (io.dropwizard.metrics:metrics-core:3.1.2)
-
-===============================================================================
-License: MIT
-
-jquery (org.webjars:jquery:1.11.2)
-    For details, see META-INF/licenses/jquery-1_11_2-MIT.txt.
-
-jquery-ui (org.webjars:jquery-ui:1.11.4)
-    For details, see META-INF/licenses/jquery-ui-1_11_4-MIT.txt.
-
-d3.legend.js (included inside the resources/servlets.war!/js/ext/d3.legend/d3.legend.js)
-    https://gist.githubusercontent.com/ZJONSSON/3918369/raw/bf9bce6b68a3b70f87450f155436ca4a84af1ba4/d3.legend.js
-    With Edgent specific modifications.
-    For details, see META-INF/licenses/d3.legend-MIT.txt.
-
-===============================================================================
-License: BSD 3-Clause
-
-d3 (org.webjars.bower:d3:3.3.9)
-    For details, see META-INF/licenses/d3-3_3_9-BSD.txt.
-
-===============================================================================
-License: BSD 2-Clause
-
-d3-plugins-sankey (org.webjars.bower:d3-plugins-sankey:1.1.0)
-    For details, see META-INF/licenses/d3-plugins-sankey-1_1_0-BSD.txt.
-
-===============================================================================

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server/src/main/remote-resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/console/server/src/main/remote-resources/META-INF/NOTICE b/console/server/src/main/remote-resources/META-INF/NOTICE
deleted file mode 100644
index 9c9e7e9..0000000
--- a/console/server/src/main/remote-resources/META-INF/NOTICE
+++ /dev/null
@@ -1,28 +0,0 @@
-===============================================================================
-
-Portions of this software were developed by IBM Corp.
-Copyright IBM Corp. 2015, 2016
-
-===============================================================================
-
-APACHE EDGENT SUBCOMPONENTS:
-
-This product includes a number of subcomponents with separate
-copyright notices and license terms.  The following notices apply.
-
--------------------------------------------------------------------------------
-metrics-core (io.dropwizard.metrics:metrics-core:3.1.2)
-
-Metrics
-Copyright 2010-2013 Coda Hale and Yammer, Inc.
-
-This product includes software developed by Coda Hale and Yammer, Inc.
-
-This product includes code derived from the JSR-166 project (ThreadLocalRandom,
-Striped64, LongAdder) with the following comments:
-
-          Written by Doug Lea with assistance from members of JCP JSR-166
-          Expert Group and released to the public domain, as explained at
-          http://creativecommons.org/publicdomain/zero/1.0/
-
-===============================================================================

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server/src/test/java/org/apache/edgent/test/console/server/HttpServerPortTest.java
----------------------------------------------------------------------
diff --git a/console/server/src/test/java/org/apache/edgent/test/console/server/HttpServerPortTest.java b/console/server/src/test/java/org/apache/edgent/test/console/server/HttpServerPortTest.java
deleted file mode 100644
index 64e8b22..0000000
--- a/console/server/src/test/java/org/apache/edgent/test/console/server/HttpServerPortTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-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.edgent.test.console.server;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assume.assumeTrue;
-
-import java.io.IOException;
-import java.net.Socket;
-
-import org.apache.edgent.console.server.HttpServer;
-import org.junit.Test;
-
-/**
- * This is a separate test because the HttpServer implementation
- * precludes changing the console port within a jvm instance.
- */
-public class HttpServerPortTest {
-	
-	  int getAvailablePort() throws IOException {
-	    try (Socket s = new Socket()) {
-	      s.bind(null);
-	      return s.getLocalPort();
-	    }
-	  }
-
-    @Test
-    public void testOverridePortNumber() throws Exception {
-      // count on the OS not immediately reusing an available local port.
-    	int port = getAvailablePort();
-      int port2 = getAvailablePort();
-      assumeTrue(port != port2);
-      
-      System.setProperty("edgent.console.port", String.valueOf(port));
-      HttpServer myHttpServer = HttpServer.getInstance();
-      myHttpServer.startServer();
-      
-      int portNum = myHttpServer.getConsolePortNumber();
-      assertEquals(port, portNum);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server/src/test/java/org/apache/edgent/test/console/server/HttpServerTest.java
----------------------------------------------------------------------
diff --git a/console/server/src/test/java/org/apache/edgent/test/console/server/HttpServerTest.java b/console/server/src/test/java/org/apache/edgent/test/console/server/HttpServerTest.java
deleted file mode 100644
index 46bd511..0000000
--- a/console/server/src/test/java/org/apache/edgent/test/console/server/HttpServerTest.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
-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.edgent.test.console.server;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import org.apache.edgent.console.server.HttpServer;
-import org.junit.Test;
-
-public class HttpServerTest {
-	
-	public static final String consoleWarNotFoundMessage =  
-			"console.war not found.  Run 'ant' from the top level edgent directory, or 'ant' from 'console/servlets' to create console.war under the webapps directory.";
-
-
-    @Test
-    public void testGetInstance()  {
-    	HttpServer myHttpServer = null;
-    	boolean warNotFoundExceptionThrown = false;
-        try {
-        	myHttpServer = HttpServer.getInstance();
-        } catch (Exception warNotFoundException) {
-        	System.out.println(warNotFoundException.getMessage());
-        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
-        		warNotFoundExceptionThrown = true;
-        		assertEquals("", "");
-        	}
-        } finally {
-        	if (!warNotFoundExceptionThrown) {
-        		assertNotNull("HttpServer getInstance is null", myHttpServer);
-        	} else {
-        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
-        	}
-        }
-    }
-
-    @Test
-    public void startServer() throws Exception {
-    	HttpServer myHttpServer = null;
-    	boolean warNotFoundExceptionThrown = false;
-        try {
-        	myHttpServer = HttpServer.getInstance();
-        } catch (Exception warNotFoundException) {
-        	System.out.println(warNotFoundException.getMessage());
-        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
-        		warNotFoundExceptionThrown = true;
-        		assertEquals("", "");
-        	}
-        } finally {
-        	if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
-                myHttpServer.startServer();
-                assertTrue(myHttpServer.isServerStarted());
-        	} else {
-        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
-        	}
-        }
-    }
-
-    @Test
-    public void isServerStopped() throws Exception {
-    	HttpServer myHttpServer = null;
-    	boolean warNotFoundExceptionThrown = false;
-        try {
-        	myHttpServer = HttpServer.getInstance();
-        } catch (Exception warNotFoundException) {
-        	System.out.println(warNotFoundException.getMessage());
-        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
-        		warNotFoundExceptionThrown = true;
-        		assertEquals("", "");
-        	}
-        } finally {
-			if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
-                myHttpServer.startServer();
-                assertFalse(myHttpServer.isServerStopped());
-        	} else {
-        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
-        	}
-        }
-    }
-
-    @Test
-    public void getConsolePath() throws Exception {
-    	HttpServer myHttpServer = null;
-    	boolean warNotFoundExceptionThrown = false;
-        try {
-        	myHttpServer = HttpServer.getInstance();
-        } catch (Exception warNotFoundException) {
-        	System.out.println(warNotFoundException.getMessage());
-        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
-        		warNotFoundExceptionThrown = true;
-        		assertEquals("", "");
-        	}
-        } finally {
-			if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
-        		assertEquals("/console", myHttpServer.getConsoleContextPath());
-        	} else {
-        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
-        	}
-        }
-        
-    }
-
-    @Test
-    public void getConsoleUrl() throws Exception {
-    	
-    	HttpServer myHttpServer = null;
-    	boolean warNotFoundExceptionThrown = false;
-        try {
-        	myHttpServer = HttpServer.getInstance();
-        } catch (Exception warNotFoundException) {
-        	System.out.println(warNotFoundException.getMessage());
-        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
-        		warNotFoundExceptionThrown = true;
-        		assertEquals("", "");
-        	}
-        } finally {
-			if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
-                myHttpServer.startServer();
-                int portNum = myHttpServer.getConsolePortNumber();
-                String context = myHttpServer.getConsoleContextPath();
-                assertEquals("http://localhost:" + portNum + context, myHttpServer.getConsoleUrl());
-        	} else {
-        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
-        	}
-        }
-    }
-
-    @Test
-    public void getConsolePortNumber() throws Exception {
-    	HttpServer myHttpServer = null;
-    	boolean warNotFoundExceptionThrown = false;
-        try {
-        	myHttpServer = HttpServer.getInstance();
-        } catch (Exception warNotFoundException) {
-        	System.out.println(warNotFoundException.getMessage());
-        	if (warNotFoundException.getMessage().equals(consoleWarNotFoundMessage)) {
-        		warNotFoundExceptionThrown = true;
-        		assertEquals("", "");
-        	}
-        } finally {
-			if ((!warNotFoundExceptionThrown) && (myHttpServer != null)){
-                myHttpServer.startServer();
-                int portNum = myHttpServer.getConsolePortNumber();
-                assertTrue("the port number is not in integer range: " + Integer.toString(portNum),
-                        (Integer.MAX_VALUE > portNum) && (0 < portNum));
-        	} else {
-        		assertNull("HttpServer getInstance is null because console.war could not be found", myHttpServer);
-        	}
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/server/src/test/java/org/apache/edgent/test/console/server/ServerUtilTest.java
----------------------------------------------------------------------
diff --git a/console/server/src/test/java/org/apache/edgent/test/console/server/ServerUtilTest.java b/console/server/src/test/java/org/apache/edgent/test/console/server/ServerUtilTest.java
deleted file mode 100644
index cea0ac4..0000000
--- a/console/server/src/test/java/org/apache/edgent/test/console/server/ServerUtilTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-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.edgent.test.console.server;
-
-import static org.junit.Assert.assertNotNull;
-
-import java.io.IOException;
-
-import org.apache.edgent.console.server.ServerUtil;
-import org.junit.Test;
-
-
-public class ServerUtilTest {
-
-    @Test
-    public void testServerUtil() {
-        ServerUtil serverUtil = new ServerUtil();
-        assertNotNull("ServerUtil is null", serverUtil);
-    }
-
-    @Test
-    public void testGetPath() throws IOException {
-        ServerUtil serverUtil = new ServerUtil();
-        assertNotNull("Get AbsoluteWarFilePath is null", serverUtil.getWarFilePath());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/console/servlets/pom.xml
----------------------------------------------------------------------
diff --git a/console/servlets/pom.xml b/console/servlets/pom.xml
index afd4376..13b62ff 100644
--- a/console/servlets/pom.xml
+++ b/console/servlets/pom.xml
@@ -129,6 +129,14 @@
           </execution>
         </executions>
       </plugin>
+      <!-- Additionally create a jar version containing only the classes -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <configuration>
+          <attachClasses>true</attachClasses>
+        </configuration>
+      </plugin>
       <!-- Download JavaScript form GitHub -->
       <!--plugin>
         <groupId>com.googlecode.maven-download-plugin</groupId>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/distribution/pom.xml
----------------------------------------------------------------------
diff --git a/distribution/pom.xml b/distribution/pom.xml
index 43bc4dc..0fadefc 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -205,8 +205,8 @@
 
     <!-- Include console-servlets.war to enable a user to run
          it in their own Servlets engine.
-         It's bundled in the edgent-console-server.jar.
-         Note, edgent-console-server is pulled in as a dependency
+         It's bundled in the edgent-console-server-jetty.jar.
+         Note, edgent-console-server-jetty is pulled in as a dependency
          of the development provider.
     -->
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/android/hardware/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/android/hardware/pom.xml b/platforms/android/android/hardware/pom.xml
index afcd62d..c832ccb 100644
--- a/platforms/android/android/hardware/pom.xml
+++ b/platforms/android/android/hardware/pom.xml
@@ -48,4 +48,15 @@
     </dependency>
   </dependencies>
 
+  <dependencyManagement>
+    <dependencies>
+      <!-- The default version pulled in by the android dependency has vulnerabilities -->
+      <dependency>
+        <groupId>org.apache.httpcomponents</groupId>
+        <artifactId>httpclient</artifactId>
+        <version>4.5.5</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/android/topology/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/android/topology/pom.xml b/platforms/android/android/topology/pom.xml
index 2739efe..0a54f06 100644
--- a/platforms/android/android/topology/pom.xml
+++ b/platforms/android/android/topology/pom.xml
@@ -53,4 +53,15 @@
     </dependency>
   </dependencies>
 
+  <dependencyManagement>
+    <dependencies>
+      <!-- The default version pulled in by the android dependency has vulnerabilities -->
+      <dependency>
+        <groupId>org.apache.httpcomponents</groupId>
+        <artifactId>httpclient</artifactId>
+        <version>4.5.5</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/api/execution/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/api/execution/pom.xml b/platforms/android/api/execution/pom.xml
index 113dadd..578b824 100644
--- a/platforms/android/api/execution/pom.xml
+++ b/platforms/android/api/execution/pom.xml
@@ -72,7 +72,6 @@
     <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
-      <version>2.8.0</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/connectors/csv/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/connectors/csv/pom.xml b/platforms/android/connectors/csv/pom.xml
index 1b2cb14..79aceac 100644
--- a/platforms/android/connectors/csv/pom.xml
+++ b/platforms/android/connectors/csv/pom.xml
@@ -63,7 +63,6 @@
     <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
-      <version>2.8.0</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/connectors/kafka/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/connectors/kafka/pom.xml b/platforms/android/connectors/kafka/pom.xml
index 8473f4a..2aa3e6c 100644
--- a/platforms/android/connectors/kafka/pom.xml
+++ b/platforms/android/connectors/kafka/pom.xml
@@ -130,7 +130,7 @@
     <dependency>
       <groupId>org.scala-lang</groupId>
       <artifactId>scala-library</artifactId>
-      <version>2.10.4</version>
+      <version>2.10.7</version>
       <exclusions>
         <exclusion> <!-- not transitive -->
           <groupId>*</groupId>
@@ -152,7 +152,7 @@
     <dependency>
       <groupId>org.apache.zookeeper</groupId>
       <artifactId>zookeeper</artifactId>
-      <version>3.4.6</version>
+      <version>3.4.13</version>
       <exclusions>
         <exclusion> <!-- not transitive -->
           <groupId>*</groupId>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/connectors/websocket-jetty/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/connectors/websocket-jetty/pom.xml b/platforms/android/connectors/websocket-jetty/pom.xml
index 8ef8776..f1c2c34 100644
--- a/platforms/android/connectors/websocket-jetty/pom.xml
+++ b/platforms/android/connectors/websocket-jetty/pom.xml
@@ -72,7 +72,7 @@
     <dependency>
       <groupId>org.eclipse.jetty.websocket</groupId>
       <artifactId>javax-websocket-client-impl</artifactId>
-      <version>9.3.6.v20151106</version>
+      <version>9.4.8.v20180619</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/connectors/websocket-server/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/connectors/websocket-server/pom.xml b/platforms/android/connectors/websocket-server/pom.xml
index 3b4cb63..8551195 100644
--- a/platforms/android/connectors/websocket-server/pom.xml
+++ b/platforms/android/connectors/websocket-server/pom.xml
@@ -72,7 +72,7 @@
     <dependency>
       <groupId>org.eclipse.jetty.websocket</groupId>
       <artifactId>javax-websocket-server-impl</artifactId>
-      <version>9.3.6.v20151106</version>
+      <version>9.4.8.v20180619</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/distribution/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/distribution/pom.xml b/platforms/android/distribution/pom.xml
index cacd83b..158ed85 100644
--- a/platforms/android/distribution/pom.xml
+++ b/platforms/android/distribution/pom.xml
@@ -219,8 +219,8 @@
 
     <!-- Include console-servlets.war to enable a user to run
          it in their own Servlets engine.
-         It's bundled in the edgent-console-server.jar.
-         Note, edgent-console-server is pulled in as a dependency
+         It's bundled in the edgent-console-server-jetty.jar.
+         Note, edgent-console-server-jetty is pulled in as a dependency
          of the development provider.
     -->
     <!-- Not on android <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/android/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/android/pom.xml b/platforms/android/pom.xml
index 57171dd..f52d006 100644
--- a/platforms/android/pom.xml
+++ b/platforms/android/pom.xml
@@ -57,7 +57,7 @@
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <version>1.15</version>
+        <version>1.16</version>
         <executions>
           <execution>
             <id>check-jdk-signatures</id>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/api/execution/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/api/execution/pom.xml b/platforms/java7/api/execution/pom.xml
index 880d89f..5d98c60 100644
--- a/platforms/java7/api/execution/pom.xml
+++ b/platforms/java7/api/execution/pom.xml
@@ -91,7 +91,6 @@
     <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
-      <version>2.8.0</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/connectors/csv/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/connectors/csv/pom.xml b/platforms/java7/connectors/csv/pom.xml
index c45d83b..d86314f 100644
--- a/platforms/java7/connectors/csv/pom.xml
+++ b/platforms/java7/connectors/csv/pom.xml
@@ -82,7 +82,6 @@
     <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
-      <version>2.8.0</version>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/connectors/jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/connectors/jdbc/pom.xml b/platforms/java7/connectors/jdbc/pom.xml
index a9cf716..8cd199b 100644
--- a/platforms/java7/connectors/jdbc/pom.xml
+++ b/platforms/java7/connectors/jdbc/pom.xml
@@ -100,6 +100,27 @@
           </execution>
         </executions>
       </plugin>
+      <!--
+        We are using derby for some tests. Unfortunately the latest version
+        runnable with Java 7 contains a vulnerability, making it problematic
+        to use in an application.
+
+        As we are simply using derby inside a test and not using it in production
+        code, we have to tell the audit tool not to complain about this.
+      -->
+      <plugin>
+        <groupId>org.sonatype.ossindex.maven</groupId>
+        <artifactId>ossindex-maven-plugin</artifactId>
+        <configuration>
+          <excludeCoordinates>
+            <exclude>
+              <groupId>org.apache.derby</groupId>
+              <artifactId>derby</artifactId>
+              <version>10.12.1.1</version>
+            </exclude>
+          </excludeCoordinates>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
 
@@ -146,7 +167,7 @@
     <dependency>
       <groupId>org.apache.derby</groupId>
       <artifactId>derby</artifactId>
-      <!--  requires java8: <version>10.13.1.1</version-->
+      <!--  requires java8: <version>10.14.2.0</version-->
       <version>10.12.1.1</version> <!-- latest Java 6 and Higher -->
       <scope>test</scope>
     </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/connectors/kafka/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/connectors/kafka/pom.xml b/platforms/java7/connectors/kafka/pom.xml
index 94823ef..36d841f 100644
--- a/platforms/java7/connectors/kafka/pom.xml
+++ b/platforms/java7/connectors/kafka/pom.xml
@@ -149,7 +149,7 @@
     <dependency>
       <groupId>org.scala-lang</groupId>
       <artifactId>scala-library</artifactId>
-      <version>2.10.4</version>
+      <version>2.10.7</version>
       <exclusions>
         <exclusion> <!-- not transitive -->
           <groupId>*</groupId>
@@ -171,7 +171,7 @@
     <dependency>
       <groupId>org.apache.zookeeper</groupId>
       <artifactId>zookeeper</artifactId>
-      <version>3.4.6</version>
+      <version>3.4.13</version>
       <exclusions>
         <exclusion> <!-- not transitive -->
           <groupId>*</groupId>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/connectors/websocket-jetty/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/connectors/websocket-jetty/pom.xml b/platforms/java7/connectors/websocket-jetty/pom.xml
index 70ba1d5..aaabe0a 100644
--- a/platforms/java7/connectors/websocket-jetty/pom.xml
+++ b/platforms/java7/connectors/websocket-jetty/pom.xml
@@ -98,7 +98,7 @@
     <dependency>
       <groupId>org.eclipse.jetty.websocket</groupId>
       <artifactId>javax-websocket-client-impl</artifactId>
-      <version>9.3.6.v20151106</version>
+      <version>9.4.8.v20180619</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/connectors/websocket-server/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/connectors/websocket-server/pom.xml b/platforms/java7/connectors/websocket-server/pom.xml
index abac9bf..eb77649 100644
--- a/platforms/java7/connectors/websocket-server/pom.xml
+++ b/platforms/java7/connectors/websocket-server/pom.xml
@@ -91,7 +91,7 @@
     <dependency>
       <groupId>org.eclipse.jetty.websocket</groupId>
       <artifactId>javax-websocket-server-impl</artifactId>
-      <version>9.3.6.v20151106</version>
+      <version>9.4.8.v20180619</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/console/pom.xml b/platforms/java7/console/pom.xml
index 26eca84..34ab87e 100644
--- a/platforms/java7/console/pom.xml
+++ b/platforms/java7/console/pom.xml
@@ -32,7 +32,9 @@
   <name>Apache Edgent (Java 7): Console</name>
 
   <modules>
-    <module>server</module>
+    <!--module>server-jetty</module>
+    <module>server-tomcat</module-->
+    <module>server-undertow</module>
     <module>servlets</module>
   </modules>
 

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-jetty/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-jetty/pom.xml b/platforms/java7/console/server-jetty/pom.xml
new file mode 100644
index 0000000..c386f4d
--- /dev/null
+++ b/platforms/java7/console/server-jetty/pom.xml
@@ -0,0 +1,198 @@
+<?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">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.edgent.java7</groupId>
+    <artifactId>edgent-console</artifactId>
+    <version>1.3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>edgent-console-server-jetty</artifactId>
+
+  <name>Apache Edgent (Java 7): Console: Server (Jetty)</name>
+
+  <build>
+    <resources>
+      <resource>
+        <directory>${project.basedir}/src/main/resources</directory>
+        <targetPath>${project.build.outputDirectory}/</targetPath>
+      </resource>
+      <resource>
+        <directory>${project.basedir}/../../../../src/main/appended-resources/licenses</directory>
+        <targetPath>${project.build.outputDirectory}/META-INF/licenses</targetPath>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <!--
+           Copy the servlets.war into the build output so it is embedded as
+           resource into the jar.
+          -->
+          <execution>
+            <id>copy-war</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.edgent.java7</groupId>
+                  <artifactId>edgent-console-servlets</artifactId>
+                  <version>${project.version}</version>
+                  <type>war</type>
+                  <outputDirectory>${project.build.outputDirectory}/resources</outputDirectory>
+                  <destFileName>servlets.war</destFileName>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.edgent</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <outputDirectory>${project.build.directory}/classes</outputDirectory>
+                  <excludes>META-INF/**,resources/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-test</id>
+            <phase>test-compile</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.edgent</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <classifier>tests</classifier>
+                  <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+            <!-- needed because of HttpServer impl and HttpServerPortTest -->
+            <reuseForks>false</reuseForks>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <reporting>
+    <plugins>
+      <!-- For some strange reason this report is causing trouble -->
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+        <version>0.7.9</version>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-http</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-io</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-security</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-server</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-servlet</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-util</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-webapp</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-xml</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.25</version>
+    </dependency>
+
+    <!--
+        This artifact is needed by the maven-dependency-plugin
+        by marking this dependency optional, it is not included
+        in the resulting artifact, but Maven ensures it is built
+        prior to this module.
+    -->
+    <dependency>
+      <groupId>org.apache.edgent.java7</groupId>
+      <artifactId>edgent-console-servlets</artifactId>
+      <version>1.3.0-SNAPSHOT</version>
+      <type>war</type>
+      <optional>true</optional>
+    </dependency>
+  </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-jetty/src/main/remote-resources/META-INF/LICENSE
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-jetty/src/main/remote-resources/META-INF/LICENSE b/platforms/java7/console/server-jetty/src/main/remote-resources/META-INF/LICENSE
new file mode 100644
index 0000000..bc4b691
--- /dev/null
+++ b/platforms/java7/console/server-jetty/src/main/remote-resources/META-INF/LICENSE
@@ -0,0 +1,41 @@
+
+===============================================================================
+APACHE EDGENT SUBCOMPONENTS:
+
+This binary includes a number of subcomponents with separate
+copyright notices and license terms.  Your use of this binary
+is subject to the terms and conditions of the following licenses.
+
+===============================================================================
+License: Apache License Version 2.0
+For details, see META-INF/licenses/apache-license-version-2.0.txt
+
+gson (com.google.code.gson:gson:2.2.4)
+metrics-core (io.dropwizard.metrics:metrics-core:3.1.2)
+
+===============================================================================
+License: MIT
+
+jquery (org.webjars:jquery:1.11.2)
+    For details, see META-INF/licenses/jquery-1_11_2-MIT.txt.
+
+jquery-ui (org.webjars:jquery-ui:1.11.4)
+    For details, see META-INF/licenses/jquery-ui-1_11_4-MIT.txt.
+
+d3.legend.js (https://gist.githubusercontent.com/ZJONSSON/3918369/raw/bf9bce6b68a3b70f87450f155436ca4a84af1ba4/d3.legend.js)
+    For details, see META-INF/licenses/d3.legend-MIT.txt.
+
+===============================================================================
+License: BSD 3-Clause
+
+d3 (org.webjars.bower:d3:3.3.9)
+    For details, see META-INF/licenses/d3-3_3_9-BSD.txt.
+
+===============================================================================
+License: BSD 2-Clause
+
+d3-plugins-sankey (org.webjars.bower:d3-plugins-sankey:1.1.0)
+    For details, see META-INF/licenses/d3-plugins-sankey-1_1_0-BSD.txt.
+
+===============================================================================
+

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-jetty/src/main/remote-resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-jetty/src/main/remote-resources/META-INF/NOTICE b/platforms/java7/console/server-jetty/src/main/remote-resources/META-INF/NOTICE
new file mode 100644
index 0000000..9c9e7e9
--- /dev/null
+++ b/platforms/java7/console/server-jetty/src/main/remote-resources/META-INF/NOTICE
@@ -0,0 +1,28 @@
+===============================================================================
+
+Portions of this software were developed by IBM Corp.
+Copyright IBM Corp. 2015, 2016
+
+===============================================================================
+
+APACHE EDGENT SUBCOMPONENTS:
+
+This product includes a number of subcomponents with separate
+copyright notices and license terms.  The following notices apply.
+
+-------------------------------------------------------------------------------
+metrics-core (io.dropwizard.metrics:metrics-core:3.1.2)
+
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom,
+Striped64, LongAdder) with the following comments:
+
+          Written by Doug Lea with assistance from members of JCP JSR-166
+          Expert Group and released to the public domain, as explained at
+          http://creativecommons.org/publicdomain/zero/1.0/
+
+===============================================================================

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-tomcat/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-tomcat/pom.xml b/platforms/java7/console/server-tomcat/pom.xml
new file mode 100644
index 0000000..36e9117
--- /dev/null
+++ b/platforms/java7/console/server-tomcat/pom.xml
@@ -0,0 +1,145 @@
+<?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">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.edgent.java7</groupId>
+    <artifactId>edgent-console</artifactId>
+    <version>1.3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>edgent-console-server-tomcat</artifactId>
+
+  <name>Apache Edgent (Java 7): Console: Server (Tomcat)</name>
+
+  <properties>
+    <tomcat.version>7.0.90</tomcat.version>
+  </properties>
+
+  <build>
+    <resources>
+      <resource>
+        <directory>${project.basedir}/src/main/resources</directory>
+        <targetPath>${project.build.outputDirectory}/</targetPath>
+      </resource>
+      <resource>
+        <directory>${project.basedir}/../../../../src/main/appended-resources/licenses</directory>
+        <targetPath>${project.build.outputDirectory}/META-INF/licenses</targetPath>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.edgent</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <outputDirectory>${project.build.directory}/classes</outputDirectory>
+                  <excludes>META-INF/**,resources/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-test</id>
+            <phase>test-compile</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.edgent</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <classifier>tests</classifier>
+                  <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <!-- needed because of HttpServer impl and HttpServerPortTest -->
+          <reuseForks>false</reuseForks>
+          <!-- Make tomcat start within the target directory -->
+          <workingDirectory>${project.build.directory}</workingDirectory>
+          <basedir>${project.build.directory}</basedir>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <reporting>
+    <plugins>
+      <!-- For some strange reason this report is causing trouble -->
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+        <version>0.7.9</version>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+
+  <dependencies>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>javax.servlet-api</artifactId>
+      <version>3.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat.embed</groupId>
+      <artifactId>tomcat-embed-core</artifactId>
+      <version>${tomcat.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.25</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.edgent.java7</groupId>
+      <artifactId>edgent-console-servlets</artifactId>
+      <version>1.3.0-SNAPSHOT</version>
+      <classifier>classes</classifier>
+    </dependency>
+  </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-tomcat/src/main/remote-resources/META-INF/LICENSE
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-tomcat/src/main/remote-resources/META-INF/LICENSE b/platforms/java7/console/server-tomcat/src/main/remote-resources/META-INF/LICENSE
new file mode 100644
index 0000000..bc4b691
--- /dev/null
+++ b/platforms/java7/console/server-tomcat/src/main/remote-resources/META-INF/LICENSE
@@ -0,0 +1,41 @@
+
+===============================================================================
+APACHE EDGENT SUBCOMPONENTS:
+
+This binary includes a number of subcomponents with separate
+copyright notices and license terms.  Your use of this binary
+is subject to the terms and conditions of the following licenses.
+
+===============================================================================
+License: Apache License Version 2.0
+For details, see META-INF/licenses/apache-license-version-2.0.txt
+
+gson (com.google.code.gson:gson:2.2.4)
+metrics-core (io.dropwizard.metrics:metrics-core:3.1.2)
+
+===============================================================================
+License: MIT
+
+jquery (org.webjars:jquery:1.11.2)
+    For details, see META-INF/licenses/jquery-1_11_2-MIT.txt.
+
+jquery-ui (org.webjars:jquery-ui:1.11.4)
+    For details, see META-INF/licenses/jquery-ui-1_11_4-MIT.txt.
+
+d3.legend.js (https://gist.githubusercontent.com/ZJONSSON/3918369/raw/bf9bce6b68a3b70f87450f155436ca4a84af1ba4/d3.legend.js)
+    For details, see META-INF/licenses/d3.legend-MIT.txt.
+
+===============================================================================
+License: BSD 3-Clause
+
+d3 (org.webjars.bower:d3:3.3.9)
+    For details, see META-INF/licenses/d3-3_3_9-BSD.txt.
+
+===============================================================================
+License: BSD 2-Clause
+
+d3-plugins-sankey (org.webjars.bower:d3-plugins-sankey:1.1.0)
+    For details, see META-INF/licenses/d3-plugins-sankey-1_1_0-BSD.txt.
+
+===============================================================================
+

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-tomcat/src/main/remote-resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-tomcat/src/main/remote-resources/META-INF/NOTICE b/platforms/java7/console/server-tomcat/src/main/remote-resources/META-INF/NOTICE
new file mode 100644
index 0000000..9c9e7e9
--- /dev/null
+++ b/platforms/java7/console/server-tomcat/src/main/remote-resources/META-INF/NOTICE
@@ -0,0 +1,28 @@
+===============================================================================
+
+Portions of this software were developed by IBM Corp.
+Copyright IBM Corp. 2015, 2016
+
+===============================================================================
+
+APACHE EDGENT SUBCOMPONENTS:
+
+This product includes a number of subcomponents with separate
+copyright notices and license terms.  The following notices apply.
+
+-------------------------------------------------------------------------------
+metrics-core (io.dropwizard.metrics:metrics-core:3.1.2)
+
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom,
+Striped64, LongAdder) with the following comments:
+
+          Written by Doug Lea with assistance from members of JCP JSR-166
+          Expert Group and released to the public domain, as explained at
+          http://creativecommons.org/publicdomain/zero/1.0/
+
+===============================================================================

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-undertow/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-undertow/pom.xml b/platforms/java7/console/server-undertow/pom.xml
new file mode 100644
index 0000000..a8a75a1
--- /dev/null
+++ b/platforms/java7/console/server-undertow/pom.xml
@@ -0,0 +1,140 @@
+<?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">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.edgent.java7</groupId>
+    <artifactId>edgent-console</artifactId>
+    <version>1.3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>edgent-console-server-undertow</artifactId>
+
+  <name>Apache Edgent (Java 7): Console: Server (Undertow)</name>
+
+  <properties>
+    <undertow.version>1.4.25.Final</undertow.version>
+  </properties>
+
+  <build>
+    <resources>
+      <resource>
+        <directory>${project.basedir}/src/main/resources</directory>
+        <targetPath>${project.build.outputDirectory}/</targetPath>
+      </resource>
+      <resource>
+        <directory>${project.basedir}/../../../../src/main/appended-resources/licenses</directory>
+        <targetPath>${project.build.outputDirectory}/META-INF/licenses</targetPath>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.edgent</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <outputDirectory>${project.build.directory}/classes</outputDirectory>
+                  <excludes>META-INF/**,resources/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-test</id>
+            <phase>test-compile</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.edgent</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <classifier>tests</classifier>
+                  <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <!-- needed because of HttpServer impl and HttpServerPortTest -->
+          <reuseForks>false</reuseForks>
+          <!-- Make tomcat start within the target directory -->
+          <workingDirectory>${project.build.directory}</workingDirectory>
+          <basedir>${project.build.directory}</basedir>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <reporting>
+    <plugins>
+      <!-- For some strange reason this report is causing trouble -->
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+        <version>0.7.9</version>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+
+  <dependencies>
+    <dependency>
+      <groupId>io.undertow</groupId>
+      <artifactId>undertow-servlet</artifactId>
+      <version>${undertow.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.25</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.edgent.java7</groupId>
+      <artifactId>edgent-console-servlets</artifactId>
+      <version>1.3.0-SNAPSHOT</version>
+      <classifier>classes</classifier>
+    </dependency>
+  </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-undertow/src/main/remote-resources/META-INF/LICENSE
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-undertow/src/main/remote-resources/META-INF/LICENSE b/platforms/java7/console/server-undertow/src/main/remote-resources/META-INF/LICENSE
new file mode 100644
index 0000000..bc4b691
--- /dev/null
+++ b/platforms/java7/console/server-undertow/src/main/remote-resources/META-INF/LICENSE
@@ -0,0 +1,41 @@
+
+===============================================================================
+APACHE EDGENT SUBCOMPONENTS:
+
+This binary includes a number of subcomponents with separate
+copyright notices and license terms.  Your use of this binary
+is subject to the terms and conditions of the following licenses.
+
+===============================================================================
+License: Apache License Version 2.0
+For details, see META-INF/licenses/apache-license-version-2.0.txt
+
+gson (com.google.code.gson:gson:2.2.4)
+metrics-core (io.dropwizard.metrics:metrics-core:3.1.2)
+
+===============================================================================
+License: MIT
+
+jquery (org.webjars:jquery:1.11.2)
+    For details, see META-INF/licenses/jquery-1_11_2-MIT.txt.
+
+jquery-ui (org.webjars:jquery-ui:1.11.4)
+    For details, see META-INF/licenses/jquery-ui-1_11_4-MIT.txt.
+
+d3.legend.js (https://gist.githubusercontent.com/ZJONSSON/3918369/raw/bf9bce6b68a3b70f87450f155436ca4a84af1ba4/d3.legend.js)
+    For details, see META-INF/licenses/d3.legend-MIT.txt.
+
+===============================================================================
+License: BSD 3-Clause
+
+d3 (org.webjars.bower:d3:3.3.9)
+    For details, see META-INF/licenses/d3-3_3_9-BSD.txt.
+
+===============================================================================
+License: BSD 2-Clause
+
+d3-plugins-sankey (org.webjars.bower:d3-plugins-sankey:1.1.0)
+    For details, see META-INF/licenses/d3-plugins-sankey-1_1_0-BSD.txt.
+
+===============================================================================
+

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/d07dff67/platforms/java7/console/server-undertow/src/main/remote-resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/platforms/java7/console/server-undertow/src/main/remote-resources/META-INF/NOTICE b/platforms/java7/console/server-undertow/src/main/remote-resources/META-INF/NOTICE
new file mode 100644
index 0000000..9c9e7e9
--- /dev/null
+++ b/platforms/java7/console/server-undertow/src/main/remote-resources/META-INF/NOTICE
@@ -0,0 +1,28 @@
+===============================================================================
+
+Portions of this software were developed by IBM Corp.
+Copyright IBM Corp. 2015, 2016
+
+===============================================================================
+
+APACHE EDGENT SUBCOMPONENTS:
+
+This product includes a number of subcomponents with separate
+copyright notices and license terms.  The following notices apply.
+
+-------------------------------------------------------------------------------
+metrics-core (io.dropwizard.metrics:metrics-core:3.1.2)
+
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom,
+Striped64, LongAdder) with the following comments:
+
+          Written by Doug Lea with assistance from members of JCP JSR-166
+          Expert Group and released to the public domain, as explained at
+          http://creativecommons.org/publicdomain/zero/1.0/
+
+===============================================================================