Browse Source

New framework: Solon (#7914)

* added solon

 Committer: pmg1991

* Adjust the code

* Adjust the test code to the mvc style

* Replace the json framework with my snack3 (it's very small)

* docker file update

 Committer: pmg1991

---------

Co-authored-by: Prakhar <[email protected]>
Co-authored-by: noear <[email protected]>
pmg1991 2 years ago
parent
commit
e0cb325154

+ 23 - 0
frameworks/Java/solon/README.md

@@ -0,0 +1,23 @@
+# solon Benchmarking Test
+
+
+This is the solon portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
+
+### JSON Encoding Test
+* [JSON test source](src/main/java/pmg/Main.java)
+* [Plaintext test source](src/main/java/pmg/Main.java)
+
+## Versions
+
+* [Java OpenJDK 1.8](http://openjdk.java.net/)
+* [solon 2.0.0](https://github.com/noear/solon)
+
+## Test URLs
+
+### JSON Encoding Test
+
+    http://localhost:8080/json
+    
+### Plaintext Encoding Test
+
+    http://localhost:8080/plaintext

+ 26 - 0
frameworks/Java/solon/benchmark_config.json

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

+ 15 - 0
frameworks/Java/solon/config.toml

@@ -0,0 +1,15 @@
+[framework]
+name = "solon"
+
+[main]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "solon"
+webserver = "smarthttp"
+versus = "None"

+ 105 - 0
frameworks/Java/solon/pom.xml

@@ -0,0 +1,105 @@
+<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>org.noear.solon</groupId>
+    <artifactId>solon-benchmark</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <solon.version>2.0.0</solon.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.noear</groupId>
+            <artifactId>solon.boot.smarthttp</artifactId>
+            <version>${solon.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.noear</groupId>
+            <artifactId>solon.serialization.snack3</artifactId>
+            <version>${solon.version}</version>
+        </dependency>
+    </dependencies>
+
+    <repositories>
+        <repository>
+            <id>central</id>
+            <name>Central Repository</name>
+            <url>https://repo.maven.apache.org/maven2</url>
+        </repository>
+        <repository>
+            <id>sonatype-nexus-snapshots</id>
+            <name>Sonatype Nexus Snapshots</name>
+            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>central</id>
+            <name>Central Repository</name>
+            <url>https://repo.maven.apache.org/maven2</url>
+        </pluginRepository>
+        <pluginRepository>
+            <id>sonatype-nexus-snapshots</id>
+            <name>Sonatype Nexus Snapshots</name>
+            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <compilerArgument>-parameters</compilerArgument>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                    <debug>false</debug>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.3.0</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                    <archive>
+                        <manifest>
+                            <mainClass>pmg.Main</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 13 - 0
frameworks/Java/solon/solon.dockerfile

@@ -0,0 +1,13 @@
+FROM maven:3.6.1-jdk-11-slim as maven
+WORKDIR /solon
+COPY pom.xml pom.xml
+COPY src src
+RUN mvn compile assembly:single -q
+
+FROM openjdk:11.0.3-jdk-slim
+WORKDIR /solon
+COPY --from=maven /solon/target/solon-benchmark-jar-with-dependencies.jar app.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AggressiveOpts", "-cp", "app.jar", "pmg.Main"]

+ 13 - 0
frameworks/Java/solon/src/main/java/pmg/Main.java

@@ -0,0 +1,13 @@
+package pmg;
+
+import org.noear.solon.Solon;
+
+/**
+ * @author pmg1991
+ * @version V1.0
+ */
+public class Main {
+	public static void main(String[] args) {
+		Solon.start(Main.class, args);
+	}
+}

+ 25 - 0
frameworks/Java/solon/src/main/java/pmg/controller/HelloController.java

@@ -0,0 +1,25 @@
+package pmg.controller;
+
+import org.noear.solon.annotation.Controller;
+import org.noear.solon.annotation.Get;
+import org.noear.solon.annotation.Mapping;
+import pmg.model.Message;
+
+/**
+ * @author noear
+ * @version V1.0
+ */
+@Controller
+public class HelloController {
+    @Get
+    @Mapping("plaintext")
+    public String plaintext() {
+        return "Hello, World!";
+    }
+
+    @Get
+    @Mapping("json")
+    public Message json() {
+        return new Message("Hello, World!");
+    }
+}

+ 21 - 0
frameworks/Java/solon/src/main/java/pmg/model/Message.java

@@ -0,0 +1,21 @@
+package pmg.model;
+
+/**
+ * @author pmg1991
+ * @version V1.0
+ */
+public class Message {
+    private String message;
+
+    public Message(String message) {
+        this.message = message;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 1 - 0
frameworks/Java/solon/src/main/resources/app.properties

@@ -0,0 +1 @@
+server.http.ioBound=false