Ver código fonte

add java framework simple-server (#5340)

* add java framework simple-server

* update: use framework release version

* chore: append framework in the similar existing framework line in order to reuse docker layer in full runs
ptaboas 5 anos atrás
pai
commit
8a04962f0c

+ 1 - 1
.travis.yml

@@ -47,7 +47,7 @@ env:
     - 'TESTDIR="Java/gemini Java/greenlightning Java/grizzly Java/helidon Java/httpserver Java/jetty Java/jhttp Java/jooby2 Java/wicket"'
     - 'TESTDIR="Java/light-java Java/minijax Java/nanohttpd Java/netty Java/ninja-standalone Java/officefloor Java/proteus Java/quarkus"'
     - 'TESTDIR="Java/rapidoid Java/redkale Java/restexpress Java/revenj-jvm Java/servlet Java/servlet3 Java/smart-socket Java/spark"'
-    - 'TESTDIR="Java/spring Java/spring-webflux Java/t-io Java/tapestry Java/undertow Java/undertow-jersey Java/vertx Java/vertx-web"'
+    - 'TESTDIR="Java/spring Java/spring-webflux Java/t-io Java/tapestry Java/undertow Java/undertow-jersey Java/vertx Java/vertx-web Java/simple-server"'
     - 'TESTDIR="Java/javalin Java/jawn Java/ratpack Java/wizzardo-http"'
     - 'TESTDIR="Java/play1 Java/play2-java Java/wildfly-ee"'
     - 'TESTDIR="JavaScript/0http JavaScript/express JavaScript/fastify JavaScript/hapi JavaScript/koa"'

+ 21 - 0
frameworks/Java/simple-server/README.md

@@ -0,0 +1,21 @@
+# simple-server Benchmarking Test
+
+### Test Type Implementation Source Code
+
+* [JSON](src/main/java/com/simplyti/cloud/server/benchmark/tests/JsonSerialization.java)
+* [PLAINTEXT](src/main/java/com/simplyti/cloud/server/benchmark/tests/Plaintext.java)
+
+## Important Libraries
+The tests were run with:
+* [simple-server](https://github.com/simplyti/simple-server)
+* [Netty](https://netty.io/)
+* [dsl-json](https://github.com/ngs-doo/dsl-json)
+
+## Test URLs
+### JSON
+
+http://localhost:8080/json
+
+### PLAINTEXT
+
+http://localhost:8080/plaintext

+ 26 - 0
frameworks/Java/simple-server/benchmark_config.json

@@ -0,0 +1,26 @@
+{
+  "framework": "simple-server",
+  "tests": [
+    {
+      "default": {
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
+        "port": 8080,
+        "approach": "Realistic",
+        "classification": "Micro",
+        "database": "postgres",
+        "framework": "simple-server",
+        "language": "Java",
+        "flavor": "None",
+        "orm": "Raw",
+        "platform": "Netty",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "simple-server",
+        "notes": "",
+        "versus": "None"
+      }
+    }
+  ]
+}

+ 106 - 0
frameworks/Java/simple-server/pom.xml

@@ -0,0 +1,106 @@
+<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.simpyti.cloud</groupId>
+	<artifactId>simple-server-benchmark</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<java.version>1.8</java.version>
+		
+		<maven-compiler-plugin.version>3.6.1</maven-compiler-plugin.version>
+		<appassembler-maven-plugin.version>2.0.0</appassembler-maven-plugin.version>
+		<docker-maven-plugin.version>0.26.1</docker-maven-plugin.version>
+		
+		<mainClass>com.simplyti.cloud.server.benchmark.Main</mainClass>
+
+		<!-- Simple Server -->
+		<simple-server.version>0.0.4-rc3</simple-server.version>
+		
+		<!-- Lombok -->
+		<lombok.version>1.18.4</lombok.version>
+
+		<!-- Logging -->
+		<log4j.version>2.10.0</log4j.version>
+	</properties>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>${maven-compiler-plugin.version}</version>
+					<configuration>
+						<source>${java.version}</source>
+						<target>${java.version}</target>
+					</configuration>
+				</plugin>
+				<plugin>
+					<groupId>org.codehaus.mojo</groupId>
+					<artifactId>appassembler-maven-plugin</artifactId>
+					<version>${appassembler-maven-plugin.version}</version>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>appassembler-maven-plugin</artifactId>
+				<configuration>
+					<programs>
+						<program>
+							<mainClass>${mainClass}</mainClass>
+						</program>
+					</programs>
+					<repositoryName>lib</repositoryName>
+					<repositoryLayout>flat</repositoryLayout>
+					<includeConfigurationDirectoryInClasspath>false</includeConfigurationDirectoryInClasspath>
+				</configuration>
+				<executions>
+					<execution>
+						<id>app-assembly</id>
+						<phase>package</phase>
+						<goals>
+							<goal>assemble</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+
+	<dependencies>
+		<!-- Lombok -->
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>${lombok.version}</version>
+			<scope>provided</scope>
+		</dependency>
+		
+		<!-- Simple Server -->
+		<dependency>
+			<groupId>com.simplyti.cloud</groupId>
+			<artifactId>simple-server-di-guice</artifactId>
+			<version>${simple-server.version}</version>
+		</dependency>
+
+		<!-- Logging -->
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+	</dependencies>
+
+</project>

+ 9 - 0
frameworks/Java/simple-server/simple-server.dockerfile

@@ -0,0 +1,9 @@
+FROM maven:3.6.1-jdk-11-slim as maven
+WORKDIR /build
+COPY src src
+COPY pom.xml pom.xml
+RUN mvn package -q
+
+FROM openjdk:11.0.3-jdk-slim
+COPY --from=maven /build/target/appassembler /server
+CMD ["/server/bin/main"]

+ 22 - 0
frameworks/Java/simple-server/src/main/java/com/simplyti/cloud/server/benchmark/Main.java

@@ -0,0 +1,22 @@
+package com.simplyti.cloud.server.benchmark;
+
+import java.util.concurrent.ExecutionException;
+
+import com.google.inject.AbstractModule;
+import com.simplyti.cloud.server.benchmark.tests.JsonSerialization;
+import com.simplyti.cloud.server.benchmark.tests.Plaintext;
+import com.simplyti.service.builder.di.guice.GuiceService;
+
+public class Main extends  AbstractModule {
+	
+	public static void main(String...strings) throws InterruptedException, ExecutionException {
+		GuiceService.builder()
+			.withLog4J2Logger()
+			.withName("simple-server")
+			.withApi(JsonSerialization.class)
+			.withApi(Plaintext.class)
+			.build().start().get()
+			.stopFuture().await();
+	}
+	
+}

+ 16 - 0
frameworks/Java/simple-server/src/main/java/com/simplyti/cloud/server/benchmark/tests/JsonResponse.java

@@ -0,0 +1,16 @@
+package com.simplyti.cloud.server.benchmark.tests;
+
+import com.dslplatform.json.CompiledJson;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.experimental.Accessors;
+
+@AllArgsConstructor(onConstructor=@__(@CompiledJson))
+@Getter
+@Accessors(fluent=true)
+public class JsonResponse {
+
+	private final String message;
+
+}

+ 15 - 0
frameworks/Java/simple-server/src/main/java/com/simplyti/cloud/server/benchmark/tests/JsonSerialization.java

@@ -0,0 +1,15 @@
+package com.simplyti.cloud.server.benchmark.tests;
+
+import com.simplyti.service.api.builder.ApiBuilder;
+import com.simplyti.service.api.builder.ApiProvider;
+
+public class JsonSerialization implements ApiProvider {
+
+	@Override
+	public void build(ApiBuilder builder) {
+		builder.when()
+			.get("/json")
+			.then(ctx->ctx.send(new JsonResponse("Hello, World!")));
+	}
+
+}

+ 15 - 0
frameworks/Java/simple-server/src/main/java/com/simplyti/cloud/server/benchmark/tests/Plaintext.java

@@ -0,0 +1,15 @@
+package com.simplyti.cloud.server.benchmark.tests;
+
+import com.simplyti.service.api.builder.ApiBuilder;
+import com.simplyti.service.api.builder.ApiProvider;
+
+public class Plaintext implements ApiProvider {
+
+	@Override
+	public void build(ApiBuilder builder) {
+		builder.when()
+			.get("/plaintext")
+			.then(ctx->ctx.send("Hello, World!"));
+	}
+
+}

+ 13 - 0
frameworks/Java/simple-server/src/main/resources/log4j2.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN">
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
+    </Console>
+  </Appenders>
+  <Loggers>
+    <Root level="info">
+      <AppenderRef ref="Console"/>
+    </Root>
+  </Loggers>
+</Configuration>