Browse Source

Merge pull request #1920 from zhong-j-yu/bayou1

add a new framework -- Java/bayou
ssmith-techempower 9 years ago
parent
commit
9514973ea1

+ 1 - 0
.travis.yml

@@ -69,6 +69,7 @@ env:
     - "TESTDIR=Haskell/wai"
     - "TESTDIR=Haskell/yesod"
     - "TESTDIR=Java/activeweb"
+    - "TESTDIR=Java/bayou"
     - "TESTDIR=Java/comsat-servlet"
     - "TESTDIR=Java/comsat-webactors"
     - "TESTDIR=Java/curacao"

+ 33 - 0
frameworks/Java/bayou/README.md

@@ -0,0 +1,33 @@
+# bayou.io Benchmarking Test
+
+This is the `bayou.io` portion of [TechEmpower/FrameworkBenchmarks](https://github.com/TechEmpower/FrameworkBenchmarks).
+
+
+
+## About bayou.io
+
+`bayou.io` is an async http server/client library for Java.
+
+Version: [bayou-1.0.0](http://bayou.io/code.html)
+
+GitHub: <https://github.com/zhong-j-yu/bayou>
+
+More Info: <http://bayou.io/info.html>
+
+
+
+
+## Source for Tests
+
+Json and Plaintext test source:
+
+* [BayouServer.java](src/main/java/bayou/BayouServer.java)
+
+
+
+## Test URLs
+
+* json: <http://localhost:8080/json>
+
+* plaintext: <http://localhost:8080/plaintext>
+

+ 24 - 0
frameworks/Java/bayou/benchmark_config.json

@@ -0,0 +1,24 @@
+{
+    "framework": "bayou",
+    "tests": [{
+        "default": {
+            "setup_file": "setup",
+            "json_url": "/json",
+            "plaintext_url": "/plaintext",
+            "port": 8080,
+            "approach": "Realistic",
+            "classification": "Platform",
+            "database": "None",
+            "framework": "bayou.io",
+            "language": "Java",
+            "orm": "Raw",
+            "platform": "bayou.io",
+            "webserver": "None",
+            "os": "Linux",
+            "database_os": "Linux",
+            "display_name": "bayou.io",
+            "notes": "",
+            "versus": ""
+        }
+    }]
+}

+ 81 - 0
frameworks/Java/bayou/pom.xml

@@ -0,0 +1,81 @@
+<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/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>io.bayou</groupId>
+    <artifactId>bayou_TFB</artifactId>
+    <version>0.1</version>
+
+
+
+    <!-- see https://jitpack.io/ -->
+    <repositories>
+        <repository>
+            <id>jitpack.io</id>
+            <url>https://jitpack.io</url>
+        </repository>
+    </repositories>
+
+    <dependencies>
+
+        <!-- see https://jitpack.io/ -->
+        <dependency>
+            <groupId>com.github.zhong-j-yu</groupId>
+            <artifactId>bayou</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.6.0</version>
+        </dependency>
+
+    </dependencies>
+
+
+
+    <build>
+        <plugins>
+
+            <!-- require Java 8 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.3</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>bayou.BayouServer</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>

+ 7 - 0
frameworks/Java/bayou/setup.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+fw_depends java maven
+
+mvn clean compile assembly:single
+cd target
+java -jar bayou_TFB-0.1-jar-with-dependencies.jar &

+ 1 - 0
frameworks/Java/bayou/source_code

@@ -0,0 +1 @@
+./bayou/src/main/java/bayou/BayouServer.java

+ 59 - 0
frameworks/Java/bayou/src/main/java/bayou/BayouServer.java

@@ -0,0 +1,59 @@
+package bayou;
+
+import bayou.http.*;
+import bayou.mime.ContentType;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.util.Collections;
+
+/**
+ *  bayou.io HTTP Server for TechEmpower/FrameworkBenchmarks
+ */
+public class BayouServer
+{
+    public static void main(String[] args) throws Exception
+    {
+        System.setProperty("bayou.http.server.pipeline", "true" ); // favor pipelined requests
+        System.setProperty("bayou.http.server.fiber",    "false"); // fiber not needed in this app
+
+        byte[] bytesHelloWorld = "Hello, World!".getBytes();
+
+        HttpServer server = new HttpServer(request->
+        {
+            switch(request.uri())
+            {
+                case "/json" :
+                    Object obj = Collections.singletonMap("message", "Hello, World!");
+                    return new SimpleHttpResponse(HttpStatus.c200_OK, ContentType.json, toJson(obj));
+
+                case "/plaintext" :
+                    return new SimpleHttpResponse(HttpStatus.c200_OK, ContentType.text_plain, bytesHelloWorld);
+
+                default :
+                    return HttpResponse.text(404, "Not Found -- ", request.uri() );
+            }
+        });
+
+        server.conf().setProxyDefaults();  // disable some non-essential features
+        //server.conf().trafficDump(System.out::print);
+
+        server.start();
+    }
+
+
+    // json - jackson -------------------------------------------------------------------------------------
+    // pretty slow; don't care much.
+
+    static final ObjectMapper objectMapper = new ObjectMapper();
+    static byte[] toJson(Object obj)
+    {
+        try{
+            return objectMapper.writeValueAsBytes(obj);
+        }catch (JsonProcessingException e){
+            throw new RuntimeException(e);  // HTTP 500 Internal Error
+        }
+    }
+
+}