Browse Source

Implement Gemini on Firenio platform (#5637)

* Implement Gemini on Firenio platform

Side-effect: moves Servlet implementation to its own folder.

* Be quieter

* Be EVEN quieter
Mike Smith 5 years ago
parent
commit
cef38e9f50
25 changed files with 208 additions and 30 deletions
  1. 3 3
      frameworks/Java/gemini/README.md
  2. 18 0
      frameworks/Java/gemini/benchmark_config.json
  3. 94 0
      frameworks/Java/gemini/firenio/pom.xml
  4. 13 0
      frameworks/Java/gemini/firenio/src/main/java/hello/GhApplication.java
  5. 24 0
      frameworks/Java/gemini/firenio/src/main/java/hello/GhHandler.java
  6. 18 0
      frameworks/Java/gemini/firenio/src/main/resources/log4j.properties
  7. 14 0
      frameworks/Java/gemini/gemini-firenio.dockerfile
  8. 8 9
      frameworks/Java/gemini/gemini-mysql.dockerfile
  9. 8 9
      frameworks/Java/gemini/gemini-postgres.dockerfile
  10. 8 9
      frameworks/Java/gemini/gemini.dockerfile
  11. 0 0
      frameworks/Java/gemini/servlet/pom.xml
  12. 0 0
      frameworks/Java/gemini/servlet/resin.xml
  13. 0 0
      frameworks/Java/gemini/servlet/src/main/java/hello/GhApplication.java
  14. 0 0
      frameworks/Java/gemini/servlet/src/main/java/hello/GhServlet.java
  15. 0 0
      frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/CachedWorld.java
  16. 0 0
      frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/Fortune.java
  17. 0 0
      frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/GhDataEntity.java
  18. 0 0
      frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/World.java
  19. 0 0
      frameworks/Java/gemini/servlet/src/main/java/hello/home/handler/HelloHandler.java
  20. 0 0
      frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/configuration/gemini-mysql.conf
  21. 0 0
      frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/configuration/gemini-postgres.conf
  22. 0 0
      frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/configuration/gemini.conf
  23. 0 0
      frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/mustache/fortunes.mustache
  24. 0 0
      frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/mustache/layout.mustache
  25. 0 0
      frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/web.xml

+ 3 - 3
frameworks/Java/gemini/README.md

@@ -4,12 +4,12 @@ This is the [Gemini](https://github.com/TechEmpower/gemini) portion of a [benchm
 
 ### JSON Encoding Test
 
-* [JSON test source](src/main/java/hello/home/handler/HelloHandler.java)
+* [JSON test source](frameworks/Java/gemini/servlet/src/main/java/hello/home/handler/HelloHandler.java)
 
 ### Data-Store/Database Mapping Test
 
-* [DB test controller](src/main/java/hello/home/handler/HelloHandler.java)
-* [DB test model](src/main/java/hello/home/entity/World.java)
+* [DB test controller](frameworks/Java/gemini/servlet/src/main/java/hello/home/handler/HelloHandler.java)
+* [DB test model](frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/World.java)
 
 
 ## Infrastructure Software Versions

+ 18 - 0
frameworks/Java/gemini/benchmark_config.json

@@ -63,6 +63,24 @@
         "display_name": "Gemini",
         "notes": "",
         "versus": "servlet"
+      },
+      "firenio": {
+        "plaintext_url": "/test/plaintext",
+        "port": 8300,
+        "approach": "Realistic",
+        "classification": "Fullstack",
+        "database": "None",
+        "framework": "Gemini",
+        "language": "Java",
+        "flavor": "None",
+        "orm": "Micro",
+        "platform": "Firenio",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "Gemini",
+        "notes": "",
+        "versus": "servlet"
       }
     }
   ]

+ 94 - 0
frameworks/Java/gemini/firenio/pom.xml

@@ -0,0 +1,94 @@
+<?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/maven-v4_0_0.xsd">
+
+    <name>GhApplication</name>
+    <groupId>hello</groupId>
+    <artifactId>GhApplication</artifactId>
+    <version>0.0.1</version>
+    <description>
+        GhApplication
+    </description>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    </properties>
+
+    <organization>
+        <name>TechEmpower, Inc.</name>
+        <url>https://www.techempower.com/</url>
+    </organization>
+
+    <repositories>
+        <repository>
+            <id>oss.sonatype.org-snapshot</id>
+            <url>http://oss.sonatype.org/content/repositories/snapshots</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.techempower</groupId>
+            <artifactId>gemini</artifactId>
+            <version>4.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.techempower</groupId>
+            <artifactId>gemini-firenio</artifactId>
+            <version>4.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>1.8.0-beta4</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>install</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <mainClass>hello.GhApplication</mainClass>
+                            <classpathPrefix>lib</classpathPrefix>
+                            <!-- Required to make snapshots work with Jar builds -->
+                            <!-- See: https://stackoverflow.com/questions/41982167/maven-jar-plugin-wrong-class-path-entry-for-snapshot-dependency -->
+                            <useUniqueVersions>false</useUniqueVersions>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
frameworks/Java/gemini/firenio/src/main/java/hello/GhApplication.java

@@ -0,0 +1,13 @@
+package hello;
+
+import com.techempower.gemini.FirenioGeminiApplication;
+
+public class GhApplication extends FirenioGeminiApplication {
+    public static final GhApplication INSTANCE = new GhApplication();
+
+    private GhApplication() { super(); }
+
+    public static void main(String[] args) throws Exception {
+        INSTANCE.start();
+    }
+}

+ 24 - 0
frameworks/Java/gemini/firenio/src/main/java/hello/GhHandler.java

@@ -0,0 +1,24 @@
+package hello;
+
+import com.techempower.gemini.Context;
+import com.techempower.gemini.path.annotation.Path;
+
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Path("test")
+public class GhHandler {
+
+    @Path("plaintext")
+    public String plaintext(Context context) {
+        // NOTE: This is WIP Hacky Stuff - do not rely on ANY version of Gemini
+        //       working this way until an official release. This is a proof of
+        //       concept build to measure performance ONLY.
+        context.headers().put("Server", "gemini-firenio");
+        context.headers().put("Date", DateTimeFormatter.RFC_1123_DATE_TIME.format(
+                ZonedDateTime.now(ZoneOffset.UTC)));
+
+        return "Hello, World!";
+    }
+}

+ 18 - 0
frameworks/Java/gemini/firenio/src/main/resources/log4j.properties

@@ -0,0 +1,18 @@
+# Default log level if not specified. May be customized by passing the VM arg -DLOG_LEVEL=
+LOG_LEVEL=TRACE
+# Default global log level if not specified. May be customized by passing the VM arg -DGLOBAL_LOG_LEVEL=
+# Note: This includes all libraries, etc. It's a lot.
+GLOBAL_LOG_LEVEL=INFO
+log4j.rootLogger=${GLOBAL_LOG_LEVEL}, A1
+
+# This will only work if we use classes for the logger refs.
+log4j.logger.com.fourzeroonesports=${LOG_LEVEL}
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+# Default log level if not specified. May be customized by passing the VM arg -DLogConversionPattern=
+LogConversionPattern=[%p] GA %d{HH:mm:ss} %c: %m%n
+log4j.appender.A1.layout.ConversionPattern=${LogConversionPattern}

+ 14 - 0
frameworks/Java/gemini/gemini-firenio.dockerfile

@@ -0,0 +1,14 @@
+FROM maven:3.6.1-jdk-11-slim as maven
+
+WORKDIR /gemini
+
+COPY firenio/src src
+COPY firenio/pom.xml pom.xml
+
+RUN mvn -q clean install
+
+WORKDIR target
+
+EXPOSE 8300
+
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AggressiveOpts", "-Dlite=false", "-Dcore=1", "-Dframe=16", "-DreadBuf=512", "-Dpool=true", "-Ddirect=true", "-Dinline=true", "-Dlevel=1", "-Dread=false", "-Depoll=true", "-Dnodelay=true", "-Dcachedurl=false", "-DunsafeBuf=true", "-jar", "GhApplication-0.0.1.jar"]

+ 8 - 9
frameworks/Java/gemini/gemini-mysql.dockerfile

@@ -2,8 +2,8 @@ FROM maven:3.6.1-jdk-11-slim as maven
 
 WORKDIR /gemini
 
-COPY src src
-COPY pom.xml pom.xml
+COPY servlet/src src
+COPY servlet/pom.xml pom.xml
 
 RUN mvn -q compile
 RUN mv src/main/webapp/WEB-INF/configuration/gemini-mysql.conf src/main/webapp/WEB-INF/configuration/Base.conf
@@ -16,9 +16,8 @@ WORKDIR /resin
 RUN curl -sL http://caucho.com/download/resin-4.0.63.tar.gz | tar xz --strip-components=1
 # Taken from buildpack-deps:stretch - Resin compilation requires JAVA_HOME
 # also added several missing dependencies
-RUN set -ex; \
-  apt-get update; \
-  apt-get install -y --no-install-recommends \
+RUN DEBIAN_FRONTEND=noninteractive apt-get update -yqq &> /dev/null; \
+  DEBIAN_FRONTEND=noninteractive apt-get install -yqq --no-install-recommends \
   autoconf \
   automake \
   build-essential \
@@ -62,11 +61,11 @@ RUN set -ex; \
   patch \
   unzip \
   xz-utils \
-  zlib1g-dev
+  zlib1g-dev > /dev/null
 
-RUN ./configure --prefix=`pwd` --enable-64bit
-RUN make
-RUN make install
+RUN ./configure --prefix=`pwd` --enable-64bit -q &> /dev/null
+RUN make -s &> /dev/null
+RUN make install -s &> /dev/null
 RUN rm -rf webapps/*
 RUN mkdir logs
 COPY --from=maven /gemini/target/HelloWorld-0.0.1.war webapps/ROOT.war

+ 8 - 9
frameworks/Java/gemini/gemini-postgres.dockerfile

@@ -2,8 +2,8 @@ FROM maven:3.6.1-jdk-11-slim as maven
 
 WORKDIR /gemini
 
-COPY src src
-COPY pom.xml pom.xml
+COPY servlet/src src
+COPY servlet/pom.xml pom.xml
 
 RUN mvn -q compile
 RUN mv src/main/webapp/WEB-INF/configuration/gemini-postgres.conf src/main/webapp/WEB-INF/configuration/Base.conf
@@ -16,9 +16,8 @@ WORKDIR /resin
 RUN curl -sL http://caucho.com/download/resin-4.0.63.tar.gz | tar xz --strip-components=1
 # Taken from buildpack-deps:stretch - Resin compilation requires JAVA_HOME
 # also added several missing dependencies
-RUN set -ex; \
-  apt-get update; \
-  apt-get install -y --no-install-recommends \
+RUN DEBIAN_FRONTEND=noninteractive apt-get update -yqq &> /dev/null; \
+  DEBIAN_FRONTEND=noninteractive apt-get install -yqq --no-install-recommends \
   autoconf \
   automake \
   build-essential \
@@ -62,11 +61,11 @@ RUN set -ex; \
   patch \
   unzip \
   xz-utils \
-  zlib1g-dev
+  zlib1g-dev > /dev/null
 
-RUN ./configure --prefix=`pwd` --enable-64bit
-RUN make
-RUN make install
+RUN ./configure --prefix=`pwd` --enable-64bit -q &> /dev/null
+RUN make -s &> /dev/null
+RUN make install -s &> /dev/null
 RUN rm -rf webapps/*
 RUN mkdir logs
 COPY --from=maven /gemini/target/HelloWorld-0.0.1.war webapps/ROOT.war

+ 8 - 9
frameworks/Java/gemini/gemini.dockerfile

@@ -2,8 +2,8 @@ FROM maven:3.6.1-jdk-11-slim as maven
 
 WORKDIR /gemini
 
-COPY src src
-COPY pom.xml pom.xml
+COPY servlet/src src
+COPY servlet/pom.xml pom.xml
 
 RUN mvn -q compile
 RUN mv src/main/webapp/WEB-INF/configuration/gemini.conf src/main/webapp/WEB-INF/configuration/Base.conf
@@ -16,9 +16,8 @@ WORKDIR /resin
 RUN curl -sL http://caucho.com/download/resin-4.0.63.tar.gz | tar xz --strip-components=1
 # Taken from buildpack-deps:stretch - Resin compilation requires JAVA_HOME
 # also added several missing dependencies
-RUN set -ex; \
-  apt-get update; \
-  apt-get install -y --no-install-recommends \
+RUN apt-get update -qqy &> /dev/null; \
+  apt-get install -qqy --no-install-recommends \
   autoconf \
   automake \
   build-essential \
@@ -62,11 +61,11 @@ RUN set -ex; \
   patch \
   unzip \
   xz-utils \
-  zlib1g-dev
+  zlib1g-dev &> /dev/null
 
-RUN ./configure --prefix=`pwd` --enable-64bit
-RUN make
-RUN make install
+RUN ./configure --prefix=`pwd` --enable-64bit -q &> /dev/null
+RUN make -s &> /dev/null
+RUN make install -s &> /dev/null
 RUN rm -rf webapps/*
 RUN mkdir logs
 COPY --from=maven /gemini/target/HelloWorld-0.0.1.war webapps/ROOT.war

+ 0 - 0
frameworks/Java/gemini/pom.xml → frameworks/Java/gemini/servlet/pom.xml


+ 0 - 0
frameworks/Java/gemini/resin.xml → frameworks/Java/gemini/servlet/resin.xml


+ 0 - 0
frameworks/Java/gemini/src/main/java/hello/GhApplication.java → frameworks/Java/gemini/servlet/src/main/java/hello/GhApplication.java


+ 0 - 0
frameworks/Java/gemini/src/main/java/hello/GhServlet.java → frameworks/Java/gemini/servlet/src/main/java/hello/GhServlet.java


+ 0 - 0
frameworks/Java/gemini/src/main/java/hello/home/entity/CachedWorld.java → frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/CachedWorld.java


+ 0 - 0
frameworks/Java/gemini/src/main/java/hello/home/entity/Fortune.java → frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/Fortune.java


+ 0 - 0
frameworks/Java/gemini/src/main/java/hello/home/entity/GhDataEntity.java → frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/GhDataEntity.java


+ 0 - 0
frameworks/Java/gemini/src/main/java/hello/home/entity/World.java → frameworks/Java/gemini/servlet/src/main/java/hello/home/entity/World.java


+ 0 - 0
frameworks/Java/gemini/src/main/java/hello/home/handler/HelloHandler.java → frameworks/Java/gemini/servlet/src/main/java/hello/home/handler/HelloHandler.java


+ 0 - 0
frameworks/Java/gemini/src/main/webapp/WEB-INF/configuration/gemini-mysql.conf → frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/configuration/gemini-mysql.conf


+ 0 - 0
frameworks/Java/gemini/src/main/webapp/WEB-INF/configuration/gemini-postgres.conf → frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/configuration/gemini-postgres.conf


+ 0 - 0
frameworks/Java/gemini/src/main/webapp/WEB-INF/configuration/gemini.conf → frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/configuration/gemini.conf


+ 0 - 0
frameworks/Java/gemini/src/main/webapp/WEB-INF/mustache/fortunes.mustache → frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/mustache/fortunes.mustache


+ 0 - 0
frameworks/Java/gemini/src/main/webapp/WEB-INF/mustache/layout.mustache → frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/mustache/layout.mustache


+ 0 - 0
frameworks/Java/gemini/src/main/webapp/WEB-INF/web.xml → frameworks/Java/gemini/servlet/src/main/webapp/WEB-INF/web.xml