Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
ec495ab
Update Solon Version To 2.9.1
noear Aug 24, 2024
68230d6
Update Solon Version To 2.9.1
noear Aug 25, 2024
7716c14
Merge branch 'TechEmpower:master' into master
noear Aug 31, 2024
4f889c7
Update Solon Jdk To 21
noear Aug 31, 2024
a9fb8de
Update Solon Jdk To 21
noear Sep 1, 2024
9ae3b14
Update Solon Jdk To 21
noear Sep 1, 2024
c47ce32
Update Solon Jdk To 21
noear Sep 1, 2024
da9ba21
Update Solon Jdk To 21
noear Sep 1, 2024
72ca067
Update Solon Version To 2.9.2
noear Sep 8, 2024
9c8bf48
Merge branch 'master' of https://github.com/noear/FrameworkBenchmarks
noear Sep 8, 2024
940b673
Add Solon-Virtual
noear Sep 8, 2024
dcc414a
Remove solon-virtual
noear Sep 8, 2024
c39cf23
Merge branch 'TechEmpower:master' into master
noear Oct 23, 2024
d4bfde6
Update Solon Version To 3.0.2
noear Oct 24, 2024
a61b871
Merge branch 'master' of https://github.com/noear/FrameworkBenchmarks
noear Oct 24, 2024
574595c
Add Solon-Vertx
noear Oct 29, 2024
69ec85b
Tweak description
noear Oct 29, 2024
190ad20
Tweak the dockerfile
noear Oct 29, 2024
ccd3a29
Tweak the dockerfile
noear Oct 29, 2024
be86ab7
Tweak config
noear Oct 29, 2024
2e6fc3a
Tweak dockefile name
noear Oct 29, 2024
9ad4a99
Add FilterImpl
noear Oct 29, 2024
68d43a1
Add FilterImpl
noear Oct 29, 2024
8191627
The json plugin is changed to jackson
noear Oct 31, 2024
2440838
Update Solon Jdk To 23
noear Oct 31, 2024
5026b1d
Merge branch 'master' into master
noear Oct 31, 2024
6981e6a
Update Solon-Vertx Jdk To 23
noear Oct 31, 2024
263b4ca
Merge branch 'master' of https://github.com/noear/FrameworkBenchmarks
noear Oct 31, 2024
6316e88
Solon-vertx is restored to jdk 21
noear Oct 31, 2024
df26e43
Solon is restored to jdk 21
noear Oct 31, 2024
0698765
Solon-vertx adjusts the Date output format
noear Oct 31, 2024
d2c20e7
Solon is restored to jdk 21
noear Oct 31, 2024
70329ff
Remove solon-vertx
noear Nov 11, 2024
f1d8d24
[Java] Update Solon Version To 3.0.3
noear Nov 16, 2024
52a60f8
Merge branch 'master' into master
noear Nov 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 48 additions & 2 deletions frameworks/Java/solon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>3.0.2</version>
<version>3.0.3</version>
</parent>

<groupId>hello</groupId>
Expand All @@ -15,24 +15,70 @@

<properties>
<java.version>21</java.version>
<jstachio.version>1.3.6</jstachio.version>
</properties>

<dependencies>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-boot-smarthttp</artifactId>
<artifactId>solon-web</artifactId>
</dependency>

<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-serialization-jackson</artifactId>
</dependency>

<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-data-sqlutils</artifactId>
</dependency>

<dependency>
<groupId>io.jstach</groupId>
<artifactId>jstachio</artifactId>
<version>${jstachio.version}</version>
</dependency>

<dependency>
<groupId>io.jstach</groupId>
<artifactId>jstachio-apt</artifactId>
<version>${jstachio.version}</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>

<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>6.0.0</version>
</dependency>

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.4</version>
</dependency>
</dependencies>

<build>
<finalName>${project.artifactId}</finalName>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.jstach</groupId>
<artifactId>jstachio-apt</artifactId>
<version>${jstachio.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
Expand Down
4 changes: 0 additions & 4 deletions frameworks/Java/solon/src/main/java/hello/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@

import org.noear.solon.Solon;

/**
* @author pmg1991
* @version V1.0
*/
public class Main {
public static void main(String[] args) {
Solon.start(Main.class, args);
Expand Down
17 changes: 17 additions & 0 deletions frameworks/Java/solon/src/main/java/hello/Utils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package hello;

import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.IntStream;

abstract public class Utils {
private static final int MIN_WORLD_NUMBER = 1;
private static final int MAX_WORLD_NUMBER_PLUS_ONE = 10_001;

public static int randomWorldNumber() {
return ThreadLocalRandom.current().nextInt(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE);
}

public static IntStream randomWorldNumbers() {
return ThreadLocalRandom.current().ints(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE).distinct();
}
}

This file was deleted.

16 changes: 16 additions & 0 deletions frameworks/Java/solon/src/main/java/hello/model/Fortune.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package hello.model;

public final class Fortune implements Comparable<Fortune>{
public final int id;
public final String message;

public Fortune(int id, String message) {
this.id = id;
this.message = message;
}

@Override
public int compareTo(final Fortune other) {
return message.compareTo(other.message);
}
}
21 changes: 0 additions & 21 deletions frameworks/Java/solon/src/main/java/hello/model/Message.java

This file was deleted.

12 changes: 12 additions & 0 deletions frameworks/Java/solon/src/main/java/hello/model/World.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package hello.model;


public final class World {
public int id;
public int randomNumber;
public World(int id, int randomNumber) {
this.id = id;
this.randomNumber = randomNumber;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package hello.repository;

import hello.model.Fortune;
import hello.model.World;

import java.util.List;

public interface DbRepository {

World getWorld(int id) throws Exception;

void updateWorlds(List<World> worlds) throws Exception;

List<Fortune> fortunes() throws Exception;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package hello.repository;

import hello.model.Fortune;
import hello.model.World;
import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Inject;
import org.noear.solon.data.sql.SqlUtils;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@Component
public class JdbcDbRepository implements DbRepository {
@Inject
SqlUtils sqlUtils;

@Override
public World getWorld(int id) {
try {
return sqlUtils.sql("SELECT id, randomnumber FROM world WHERE id = ?", id)
.queryRow()
.toBean(World.class, (r, t) -> new World((int) r.getObject(1), (int) r.getObject(2)));
} catch (Exception e) {
return null;
}
}

@Override
public void updateWorlds(List<World> worlds) throws SQLException {
List<Object[]> values = new ArrayList<>();
for (World w : worlds) {
values.add(new Object[]{w.randomNumber, w.id});
}

sqlUtils.sql("UPDATE world SET randomnumber = ? WHERE id = ?")
.updateBatch(values);
}

@Override
public List<Fortune> fortunes() throws SQLException {
return sqlUtils.sql("SELECT id, message FROM fortune")
.queryRowList()
.toBeanList(Fortune.class, (r, t) -> new Fortune((int) r.getObject(1), (String) r.getObject(2)));
}
}
61 changes: 61 additions & 0 deletions frameworks/Java/solon/src/main/java/hello/web/DbHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package hello.web;

import hello.Utils;
import hello.model.Fortune;
import hello.model.World;
import hello.repository.JdbcDbRepository;
import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Inject;
import org.noear.solon.core.handle.Context;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

@Component
public class DbHandler {
@Inject
JdbcDbRepository dbRepository;

public void db(Context ctx) throws Throwable {
ctx.render(dbRepository.getWorld(Utils.randomWorldNumber()));
}

public void queries(Context ctx) throws Throwable {
int queries = ctx.paramAsInt("queries", 0);

World[] worlds = Utils.randomWorldNumbers()
.mapToObj(dbRepository::getWorld).limit(queries)
.toArray(World[]::new);

ctx.render(worlds);
}

public void updates(Context ctx) throws Throwable {
int queries = ctx.paramAsInt("queries", 0);

List<World> worlds = Utils.randomWorldNumbers()
.mapToObj(id -> {
World world = dbRepository.getWorld(id);
int randomNumber;
do {
randomNumber = Utils.randomWorldNumber();
} while (randomNumber == world.randomNumber);
world.randomNumber = randomNumber;
return world;
}).limit(queries)
.sorted(Comparator.comparingInt(w -> w.id))
.toList();
dbRepository.updateWorlds(worlds);

ctx.render(worlds);
}

public void fortunes(Context ctx) throws Throwable {
List<Fortune> fortunes = dbRepository.fortunes();
fortunes.add(new Fortune(0, "Additional fortune added at request time."));
Collections.sort(fortunes);

ctx.render(new Fortunes(fortunes));
}
}
10 changes: 10 additions & 0 deletions frameworks/Java/solon/src/main/java/hello/web/Fortunes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package hello.web;

import hello.model.Fortune;
import io.jstach.jstache.JStache;

import java.util.List;

@JStache(path = "fortunes.mustache")
public record Fortunes(List<Fortune> fortunes) {
}
27 changes: 27 additions & 0 deletions frameworks/Java/solon/src/main/java/hello/web/JsonHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package hello.web;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import org.noear.solon.annotation.Component;
import org.noear.solon.boot.web.MimeType;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.Handler;

import java.util.Map;

@Component
public class JsonHandler implements Handler {
private final ObjectWriter writer;

public JsonHandler() {
this.writer = new ObjectMapper().writerFor(Map.class);
}

@Override
public void handle(Context ctx) throws Throwable {
byte[] body = this.writer.writeValueAsBytes(Map.of("message", "Hello, world!"));
ctx.contentLength(body.length);
ctx.contentType(MimeType.APPLICATION_JSON_VALUE);
ctx.output(body);
}
}
25 changes: 25 additions & 0 deletions frameworks/Java/solon/src/main/java/hello/web/TextHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package hello.web;

import org.noear.solon.annotation.Component;
import org.noear.solon.boot.web.MimeType;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.Handler;

import java.nio.charset.StandardCharsets;

@Component
public class TextHandler implements Handler {
private static final byte[] TEXT_BODY = "Hello, World!".getBytes(StandardCharsets.UTF_8);

private static final String TEXT_BODY_LENGTH = String.valueOf(TEXT_BODY.length);
private static final String CONTENT_LENGTH = "Content-Length";
private static final String CONTENT_TYPE = "Content-Type";

@Override
public void handle(Context ctx) throws Throwable {
ctx.headerSet(CONTENT_LENGTH, TEXT_BODY_LENGTH);
ctx.headerSet(CONTENT_TYPE, MimeType.TEXT_PLAIN_VALUE);
ctx.output("Hello, World!".getBytes());
}
}

Loading
Loading