Browse Source

Initial Jetty Implementation

Supports /json and /plaintext tests only
Greg Wilkins 11 years ago
parent
commit
bb19d4c529

+ 39 - 19
.gitignore

@@ -1,22 +1,42 @@
-.DS_Store
-*.pyc
-installs/
-*.log
-*.lock
-node_modules/
-*.war
+# eclipse
+.classpath
+.project
+.settings
+
+# maven
 target/
-*.out
-*.class
-mods/
-/.settings
-/.buildpath
-/.project
+*/src/main/java/META-INF/
+*.versionsBackup
+bin/
+
+# common junk
+*.log
+*.swp
+*.diff
+*.patch
+
+# intellij
 *.iml
+*.ipr
+*.iws
 .idea/
-.hsenv/
-azure.err
-php-kohana/application/logs/
-php-fuel/fuel/app/logs/
-results/
-benchmark.cfg
+
+# Mac filesystem dust
+.DS_Store
+
+# pmd
+.pmdruleset
+.pmd
+
+# netbeans
+/nbproject
+
+# vim
+.*.sw[a-p]
+
+# merge tooling
+*.orig
+
+#maven
+*.versionsBackup
+*.releaseBackup

+ 15 - 0
jetty-servlet/README.md

@@ -0,0 +1,15 @@
+# Jetty-9 Benchmarking Test
+
+This is the undertow portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
+
+### JSON Encoding Test
+* [JSON test source](src/main/java/hello/HelloWebServer.java)
+
+## Versions
+Jetty-9.1.0 (http://eclipse.org/jetty)
+
+## Test URLs
+
+### JSON Encoding Test
+
+    http://localhost:8080

+ 0 - 0
jetty-servlet/__init__.py


+ 25 - 0
jetty-servlet/benchmark_config

@@ -0,0 +1,25 @@
+{
+  "framework": "undertow",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
+      "cache_url": "/cache",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "None",
+      "framework": "Servlet-3.1",
+      "language": "Java",
+      "orm": "None",
+      "platform": "Jetty-9",
+      "webserver": "Jetty-9",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "Jetty-9-servlet",
+      "notes": "Jetty with servlet context",
+      "versus": ""
+    }
+  }]
+}

+ 64 - 0
jetty-servlet/pom.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+
+    <groupId>com.techempower</groupId>
+    <artifactId>jetty-servlet-example</artifactId>
+    <version>0.1</version>
+
+    <dependencies>
+        <!-- Web server -->
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlet</artifactId>
+            <version>9.1.0.v20131115</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-util-ajax</artifactId>
+            <version>9.1.0.v20131115</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <inherited>true</inherited>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.3.2</version>
+                <configuration>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                    <optimize>true</optimize>
+                    <debug>false</debug>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>hello.HelloWebServer</mainClass>
+                        </manifest>
+                    </archive>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
+                        <phase>package</phase> <!-- bind to the packaging phase -->
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 20 - 0
jetty-servlet/setup.py

@@ -0,0 +1,20 @@
+import subprocess
+import sys
+import setup_util
+import os
+
+def start(args, logfile, errfile):
+  try:
+    subprocess.check_call("mvn clean compile assembly:single", shell=True, cwd="jetty-servlet", stderr=errfile, stdout=logfile)
+    subprocess.Popen("java -jar jetty-servlet-example-0.1-jar-with-dependencies.jar".rsplit(" "), cwd="jetty-servlet/target", stderr=errfile, stdout=logfile)
+    return 0
+  except subprocess.CalledProcessError:
+    return 1
+def stop(logfile, errfile):
+  p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
+  out, err = p.communicate()
+  for line in out.splitlines():
+    if 'jetty-servlet-example' in line:
+      pid = int(line.split(None, 2)[1])
+      os.kill(pid, 9)
+  return 0

+ 4 - 0
jetty-servlet/source_code

@@ -0,0 +1,4 @@
+./jetty-servlet/src/main/java/hello/
+./jetty-servlet/src/main/java/hello/HelloWebServer.java
+./jetty-servlet/src/main/java/hello/JsonServlet.java
+./jetty-servlet/src/main/java/hello/FreetextServlet.java

+ 36 - 0
jetty-servlet/src/main/java/hello/HelloWebServer.java

@@ -0,0 +1,36 @@
+package hello;
+
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+
+
+/**
+ * An implementation of the TechEmpower benchmark tests using the Jetty web
+ * server.  
+ */
+public final class HelloWebServer 
+{
+
+    public static void main(String[] args) throws Exception
+    {
+        Server server = new Server(8080);
+        ServerConnector connector = server.getBean(ServerConnector.class);
+        HttpConfiguration config = connector.getBean(HttpConnectionFactory.class).getHttpConfiguration();
+        config.setSendDateHeader(true);
+        config.setSendServerVersion(true);
+
+        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SECURITY|ServletContextHandler.NO_SESSIONS);
+        context.setContextPath("/");
+        server.setHandler(context);
+
+        context.addServlet(org.eclipse.jetty.servlet.DefaultServlet.class,"/");
+        context.addServlet(JsonServlet.class,"/json");
+        context.addServlet(PlaintextServlet.class,"/plaintext");
+
+        server.start();
+        server.join();
+    }
+}

+ 31 - 0
jetty-servlet/src/main/java/hello/JsonServlet.java

@@ -0,0 +1,31 @@
+package hello;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.jetty.util.ajax.JSON;
+
+
+
+public class JsonServlet extends GenericServlet
+{
+    private JSON json = new JSON();
+    
+    @Override
+    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
+    {
+        HttpServletResponse response= (HttpServletResponse)res;
+        response.setContentType("application/json");
+        Map<String,String> map = Collections.singletonMap("message","Hello, World!");
+        
+        json.append(response.getWriter(),map);
+    }
+
+}

+ 28 - 0
jetty-servlet/src/main/java/hello/PlaintextServlet.java

@@ -0,0 +1,28 @@
+package hello;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.Map;
+
+import javax.activation.MimeType;
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.jetty.http.MimeTypes;
+
+public class PlaintextServlet extends GenericServlet
+{
+    byte[] helloWorld = "Hello, World!".getBytes(StandardCharsets.ISO_8859_1);
+    @Override
+    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
+    {
+        HttpServletResponse response= (HttpServletResponse)res;
+        response.setContentType(MimeTypes.Type.TEXT_PLAIN.asString());
+        response.getOutputStream().write(helloWorld);
+    }
+}