Sfoglia il codice sorgente

[java] Add solon-vertx (#9371)

* Update Solon Version To 2.9.1

* Update Solon Version To 2.9.1

* Update Solon Jdk To 21

* Update Solon Jdk To 21

* Update Solon Jdk To 21

* Update Solon Jdk To 21

* Update Solon Jdk To 21

* Update Solon Version To 2.9.2

* Add Solon-Virtual

* Remove solon-virtual

* Update Solon Version To 3.0.2

* Add Solon-Vertx

* Tweak description

* Tweak the dockerfile

* Tweak the dockerfile

* Tweak config

* Tweak dockefile name

* Add FilterImpl

* Add FilterImpl

* The json plugin is changed to jackson

* Update Solon Jdk To 23

* Update Solon-Vertx Jdk To 23

* Solon-vertx is restored to jdk 21

* Solon is restored to jdk 21

* Solon-vertx adjusts the Date output format

* Solon is restored to jdk 21
西东 9 mesi fa
parent
commit
fb4a84fbcd

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

@@ -0,0 +1,23 @@
+# solon-vertx Benchmarking Test
+
+
+This is the solon-vertx portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
+
+### JSON Encoding Test
+* [JSON test source](src/main/java/hello/Main.java)
+* [Plaintext test source](src/main/java/hello/Main.java)
+
+## Versions
+
+* [Java OpenJDK 21](http://openjdk.java.net/)
+* [solon 3.0.2](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-vertx/benchmark_config.json

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

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

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

+ 61 - 0
frameworks/Java/solon-vertx/pom.xml

@@ -0,0 +1,61 @@
+<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>
+
+    <parent>
+        <groupId>org.noear</groupId>
+        <artifactId>solon-parent</artifactId>
+        <version>3.0.2</version>
+    </parent>
+
+    <groupId>hello</groupId>
+    <artifactId>hello-solon</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
+
+    <properties>
+        <java.version>21</java.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.noear</groupId>
+            <artifactId>solon-boot-vertx</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.noear</groupId>
+            <artifactId>solon-serialization-jackson</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                    <archive>
+                        <manifest>
+                            <mainClass>hello.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-vertx/solon-vertx.dockerfile

@@ -0,0 +1,13 @@
+FROM maven:3.9.7-amazoncorretto-21 as maven
+WORKDIR /solon
+COPY pom.xml pom.xml
+COPY src src
+RUN mvn compile assembly:single -q
+
+FROM openjdk:21-jdk-slim
+WORKDIR /solon
+COPY --from=maven /solon/target/hello-solon.jar app.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-cp", "app.jar", "hello.Main"]

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

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

+ 23 - 0
frameworks/Java/solon-vertx/src/main/java/hello/controller/FilterImpl.java

@@ -0,0 +1,23 @@
+package hello.controller;
+
+import org.noear.solon.annotation.Component;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.handle.Filter;
+import org.noear.solon.core.handle.FilterChain;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Component
+public class FilterImpl implements Filter {
+    private static DateFormat DATE_FORMAT = new SimpleDateFormat("EEE, d MMM yyyyy HH:mm:ss z");
+
+    @Override
+    public void doFilter(Context ctx, FilterChain chain) throws Throwable {
+        String dateString = DATE_FORMAT.format(new Date());
+        ctx.headerSet("Date", dateString);
+        ctx.headerSet("Server", "solon-boot-vertx");
+        chain.doFilter(ctx);
+    }
+}

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

@@ -0,0 +1,25 @@
+package hello.controller;
+
+import org.noear.solon.annotation.Controller;
+import org.noear.solon.annotation.Get;
+import org.noear.solon.annotation.Mapping;
+import hello.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-vertx/src/main/java/hello/model/Message.java

@@ -0,0 +1,21 @@
+package hello.model;
+
+/**
+ * @author noear
+ * @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-vertx/src/main/resources/app.properties

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

+ 1 - 1
frameworks/Java/solon/pom.xml

@@ -25,7 +25,7 @@
 
         <dependency>
             <groupId>org.noear</groupId>
-            <artifactId>solon-serialization-snack3</artifactId>
+            <artifactId>solon-serialization-jackson</artifactId>
         </dependency>
     </dependencies>