|
@@ -7,6 +7,7 @@ package org.redkalex.benchmark;
|
|
|
|
|
|
import java.nio.ByteBuffer;
|
|
import java.nio.ByteBuffer;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
+import java.util.concurrent.CompletableFuture;
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import org.redkale.net.http.*;
|
|
import org.redkale.net.http.*;
|
|
import org.redkale.service.AbstractService;
|
|
import org.redkale.service.AbstractService;
|
|
@@ -19,7 +20,7 @@ import org.redkale.source.DataSource;
|
|
@RestService(name = " ", repair = false)
|
|
@RestService(name = " ", repair = false)
|
|
public class Service extends AbstractService {
|
|
public class Service extends AbstractService {
|
|
|
|
|
|
- private static final ByteBuffer helloBuffer = ((ByteBuffer)ByteBuffer.allocateDirect("Hello, world!".length()).put("Hello, world!".getBytes()).flip()).asReadOnlyBuffer();
|
|
|
|
|
|
+ private static final ByteBuffer helloBuffer = ((ByteBuffer) ByteBuffer.allocateDirect("Hello, world!".length()).put("Hello, world!".getBytes()).flip()).asReadOnlyBuffer();
|
|
|
|
|
|
private final Random random = new Random();
|
|
private final Random random = new Random();
|
|
|
|
|
|
@@ -37,39 +38,47 @@ public class Service extends AbstractService {
|
|
}
|
|
}
|
|
|
|
|
|
@RestMapping(name = "db")
|
|
@RestMapping(name = "db")
|
|
- public World findWorld() {
|
|
|
|
- return source.find(World.class, randomId());
|
|
|
|
|
|
+ public CompletableFuture<World> findWorld() {
|
|
|
|
+ return source.findAsync(World.class, randomId());
|
|
}
|
|
}
|
|
|
|
|
|
@RestMapping(name = "queries")
|
|
@RestMapping(name = "queries")
|
|
- public World[] queryWorld(@RestParam(name = "queries") int count) {
|
|
|
|
|
|
+ public CompletableFuture<World[]> queryWorld(@RestParam(name = "queries") int count) {
|
|
count = Math.min(500, Math.max(1, count));
|
|
count = Math.min(500, Math.max(1, count));
|
|
final World[] rs = new World[count];
|
|
final World[] rs = new World[count];
|
|
|
|
+ final CompletableFuture<World>[] futures = new CompletableFuture[count];
|
|
for (int i = 0; i < count; i++) {
|
|
for (int i = 0; i < count; i++) {
|
|
- rs[i] = source.find(World.class, randomId());
|
|
|
|
|
|
+ final int index = i;
|
|
|
|
+ futures[index] = source.findAsync(World.class, randomId()).whenComplete((w, t) -> rs[index] = w);
|
|
}
|
|
}
|
|
- return rs;
|
|
|
|
|
|
+ return CompletableFuture.allOf(futures).thenApply((r) -> rs);
|
|
}
|
|
}
|
|
|
|
|
|
@RestMapping(name = "updates")
|
|
@RestMapping(name = "updates")
|
|
- public World[] updateWorld(@RestParam(name = "queries") int count) {
|
|
|
|
|
|
+ public CompletableFuture<World[]> updateWorld(@RestParam(name = "queries") int count) {
|
|
count = Math.min(500, Math.max(1, count));
|
|
count = Math.min(500, Math.max(1, count));
|
|
final World[] rs = new World[count];
|
|
final World[] rs = new World[count];
|
|
|
|
+ final CompletableFuture<World>[] futures = new CompletableFuture[count];
|
|
for (int i = 0; i < count; i++) {
|
|
for (int i = 0; i < count; i++) {
|
|
- rs[i] = source.find(World.class, randomId());
|
|
|
|
- rs[i].setRandomNumber(randomId());
|
|
|
|
|
|
+ final int index = i;
|
|
|
|
+ futures[index] = source.findAsync(World.class, randomId()).whenComplete((w, t) -> {
|
|
|
|
+ rs[index] = w;
|
|
|
|
+ rs[index].setRandomNumber(randomId());
|
|
|
|
+ });
|
|
}
|
|
}
|
|
- source.update(rs);
|
|
|
|
- return rs;
|
|
|
|
|
|
+ return CompletableFuture.allOf(futures).thenCompose((r) -> {
|
|
|
|
+ return source.updateAsync(rs).thenApply((v) -> rs);
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
@RestMapping(name = "fortunes")
|
|
@RestMapping(name = "fortunes")
|
|
- public HttpResult<String> queryFortunes() {
|
|
|
|
- List<Fortune> fortunes = source.queryList(Fortune.class);
|
|
|
|
- fortunes.add(new Fortune(0, "Additional fortune added at request time."));
|
|
|
|
- Collections.sort(fortunes);
|
|
|
|
- String html = FortunesTemplate.template(fortunes).render().toString();
|
|
|
|
- return new HttpResult("text/html; charset=UTF-8", html);
|
|
|
|
|
|
+ public CompletableFuture<HttpResult<String>> queryFortunes() {
|
|
|
|
+ return source.queryListAsync(Fortune.class).thenApply((fortunes) -> {
|
|
|
|
+ fortunes.add(new Fortune(0, "Additional fortune added at request time."));
|
|
|
|
+ Collections.sort(fortunes);
|
|
|
|
+ String html = FortunesTemplate.template(fortunes).render().toString();
|
|
|
|
+ return new HttpResult("text/html; charset=UTF-8", html);
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
private int randomId() {
|
|
private int randomId() {
|