Redkale 7 лет назад
Родитель
Сommit
d725cf92f1

+ 1 - 19
frameworks/Java/redkale/benchmark_config.json

@@ -5,24 +5,6 @@
       "setup_file": "setup",
       "setup_file": "setup",
       "json_url": "/json",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
       "plaintext_url": "/plaintext",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Platform",
-      "database": "None",
-      "framework": "None",
-      "language": "Java",
-      "flavor": "None",
-      "orm": "Raw",
-      "platform": "Redkale",
-      "webserver": "Redkale",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "redkale",
-      "notes": "",
-      "versus": ""
-    },
-    "postgres": {
-      "setup_file": "setup_postgres",
       "db_url": "/db",
       "db_url": "/db",
       "query_url": "/queries?queries=",
       "query_url": "/queries?queries=",
       "fortune_url": "/fortunes",
       "fortune_url": "/fortunes",
@@ -39,7 +21,7 @@
       "webserver": "Redkale",
       "webserver": "Redkale",
       "os": "Linux",
       "os": "Linux",
       "database_os": "Linux",
       "database_os": "Linux",
-      "display_name": "redkale-postgres",
+      "display_name": "redkale",
       "notes": "",
       "notes": "",
       "versus": ""
       "versus": ""
     }
     }

+ 2 - 0
frameworks/Java/redkale/conf/application.xml

@@ -18,6 +18,8 @@
 
 
         <services autoload="true"/>
         <services autoload="true"/>
         
         
+        <rest autoload="true"/>
+
         <servlets autoload="true"/>
         <servlets autoload="true"/>
         
         
     </server>
     </server>

+ 2 - 2
frameworks/Java/redkale/pom.xml

@@ -7,7 +7,7 @@
 
 
 	<properties>
 	<properties>
 		<!-- the main class -->
 		<!-- the main class -->
-		<main.class>org.redkalex.benchmark.Servlet</main.class>
+		<main.class>org.redkale.boot.Application</main.class>
 		<stack.version>0.0.1</stack.version>
 		<stack.version>0.0.1</stack.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.source>1.8</maven.compiler.source>
@@ -18,7 +18,7 @@
 		<dependency>
 		<dependency>
 			<groupId>org.redkale</groupId>
 			<groupId>org.redkale</groupId>
 			<artifactId>redkale</artifactId>
 			<artifactId>redkale</artifactId>
-			<version>1.9.2</version>
+			<version>1.9.2.1</version>
 		</dependency>
 		</dependency>
 		<dependency>
 		<dependency>
 			<groupId>org.postgresql</groupId>
 			<groupId>org.postgresql</groupId>

+ 0 - 7
frameworks/Java/redkale/redkale-postgres.dockerfile

@@ -1,7 +0,0 @@
-FROM maven:3.5.3-jdk-10-slim
-WORKDIR /redkale
-COPY src src
-COPY conf conf
-COPY pom.xml pom.xml
-RUN mvn package -q
-CMD ["java", "-DAPP_HOME=./", "-jar", "target/redkale-benchmark-0.0.1.jar"]

+ 0 - 1
frameworks/Java/redkale/source_code

@@ -1,4 +1,3 @@
-./redkale/src/main/java/org/redkalex/benchmark/Servlet.java
 ./redkale/src/main/java/org/redkalex/benchmark/Service.java
 ./redkale/src/main/java/org/redkalex/benchmark/Service.java
 ./redkale/src/main/java/org/redkalex/benchmark/Fortune.java
 ./redkale/src/main/java/org/redkalex/benchmark/Fortune.java
 ./redkale/src/main/java/org/redkalex/benchmark/Message.java
 ./redkale/src/main/java/org/redkalex/benchmark/Message.java

+ 36 - 13
frameworks/Java/redkale/src/main/java/org/redkalex/benchmark/Service.java

@@ -5,57 +5,80 @@
  */
  */
 package org.redkalex.benchmark;
 package org.redkalex.benchmark;
 
 
+import java.nio.ByteBuffer;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletableFuture;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import org.redkale.net.http.*;
+import org.redkale.service.AbstractService;
 import org.redkale.source.DataSource;
 import org.redkale.source.DataSource;
 
 
 /**
 /**
  *
  *
  * @author zhangjx
  * @author zhangjx
  */
  */
-@SuppressWarnings("unchecked")
-public class Service extends org.redkale.service.AbstractService {
+@RestService(name = " ", repair = false)
+public class Service extends AbstractService {
+
+    private static final ByteBuffer helloBuffer = ByteBuffer.wrap("Hello, world!".getBytes()).asReadOnlyBuffer();
 
 
     private final Random random = new Random();
     private final Random random = new Random();
 
 
     @Resource
     @Resource
     private DataSource source;
     private DataSource source;
 
 
-    public World findWorld() {
-        return source.find(World.class, randomId());
+    @RestMapping(name = "json")
+    public Message getHelloMessage() {
+        return new Message("Hello, World!");
+    }
+
+    @RestMapping(name = "plaintext")
+    public ByteBuffer getHelloBuffer() {
+        return helloBuffer.duplicate();
     }
     }
 
 
-    public CompletableFuture<World[]> queryWorld(int count) {
+    @RestMapping(name = "db")
+    public CompletableFuture<World> findWorld() {
+        return source.findAsync(World.class, randomId());
+    }
+
+    @RestMapping(name = "queries")
+    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];
         final CompletableFuture<World>[] futures = new CompletableFuture[count];
         for (int i = 0; i < count; i++) {
         for (int i = 0; i < count; i++) {
             final int index = i;
             final int index = i;
-            futures[i] = source.findAsync(World.class, randomId()).whenComplete((w, t) -> rs[index] = w);
+            futures[index] = source.findAsync(World.class, randomId()).whenComplete((w, t) -> rs[index] = w);
         }
         }
         return CompletableFuture.allOf(futures).thenApply((r) -> rs);
         return CompletableFuture.allOf(futures).thenApply((r) -> rs);
     }
     }
 
 
-    public CompletableFuture<World[]> updateWorld(int count) {
+    @RestMapping(name = "updates")
+    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];
         final CompletableFuture<World>[] futures = new CompletableFuture[count];
         for (int i = 0; i < count; i++) {
         for (int i = 0; i < count; i++) {
             final int index = i;
             final int index = i;
-            futures[i] = source.findAsync(World.class, randomId()).whenComplete((w, t) -> {
+            futures[index] = source.findAsync(World.class, randomId()).whenComplete((w, t) -> {
                 rs[index] = w;
                 rs[index] = w;
                 rs[index].setRandomNumber(randomId());
                 rs[index].setRandomNumber(randomId());
             });
             });
         }
         }
-        return CompletableFuture.allOf(futures).thenApply((r) -> {
-            source.update(rs);
-            return rs;
+        return CompletableFuture.allOf(futures).thenCompose((r) -> {
+            return source.updateAsync(rs).thenApply((v) -> rs);
         });
         });
     }
     }
 
 
-    public List<Fortune> queryFortune() {
-        return source.queryList(Fortune.class);
+    @RestMapping(name = "fortunes")
+    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() {

+ 0 - 89
frameworks/Java/redkale/src/main/java/org/redkalex/benchmark/Servlet.java

@@ -1,89 +0,0 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-package org.redkalex.benchmark;
-
-import java.io.*;
-import java.nio.ByteBuffer;
-import java.util.*;
-import javax.annotation.Resource;
-import org.redkale.convert.json.JsonConvert;
-import org.redkale.net.http.*;
-
-/**
- *
- * @author zhangjx
- */
-@WebServlet(value = {"/json", "/plaintext", "/db", "/queries", "/updates", "/fortunes"}, repair = false)
-public class Servlet extends HttpServlet {
-
-    private static final ByteBuffer helloBuffer = ByteBuffer.wrap("Hello, world!".getBytes()).asReadOnlyBuffer();
-
-    @Resource
-    private JsonConvert convert;
-
-    @Resource
-    private Service service;
-
-    @HttpMapping(url = "/json")
-    public void json(HttpRequest request, HttpResponse response) throws IOException {
-        ByteBuffer[] buffers = convert.convertTo(response.getBufferSupplier(), new Message("Hello, World!"));
-        response.setContentType("application/json").finish(buffers);
-    }
-
-    @HttpMapping(url = "/plaintext")
-    public void plaintext(HttpRequest request, HttpResponse response) throws IOException {
-        response.setContentType("text/plain").finish(helloBuffer.duplicate());
-    }
-
-    @HttpMapping(url = "/db")
-    public void db(HttpRequest request, HttpResponse response) throws IOException {
-        ByteBuffer[] buffers = convert.convertTo(response.getBufferSupplier(), service.findWorld());
-        response.setContentType("application/json").finish(buffers);
-    }
-
-    @HttpMapping(url = "/queries")
-    public void queries(HttpRequest request, HttpResponse response) throws IOException {
-        int count = getQueries(request);
-        service.queryWorld(count).whenComplete((obj, t) -> {
-            ByteBuffer[] buffers = convert.convertTo(response.getBufferSupplier(), obj);
-            response.setContentType("application/json").finish(buffers);
-        });
-    }
-
-    @HttpMapping(url = "/updates")
-    public void updates(HttpRequest request, HttpResponse response) throws IOException {
-        int count = getQueries(request);
-        service.updateWorld(count).whenComplete((obj, t) -> {
-            ByteBuffer[] buffers = convert.convertTo(response.getBufferSupplier(), obj);
-            response.setContentType("application/json").finish(buffers);
-        });
-    }
-
-    @HttpMapping(url = "/fortunes")
-    public void fortunes(HttpRequest request, HttpResponse response) throws IOException {
-        List<Fortune> fortunes = service.queryFortune();
-        fortunes.add(new Fortune(0, "Additional fortune added at request time."));
-        Collections.sort(fortunes);
-        response.setContentType("text/html; charset=UTF-8").finish(FortunesTemplate.template(fortunes).render().toString());
-    }
-
-    private static int getQueries(HttpRequest request) {
-        try {
-            return request.getIntParameter("queries", 1);
-        } catch (Exception e) {
-            return 1;
-        }
-    }
-
-    public static void main(String[] args) throws Throwable {
-        org.redkale.boot.Application.main(args);
-//        JavaGeneratorRunnable jgr = new JavaGeneratorRunnable();
-//        jgr.setTemplateDirectory(new File("D:\\Java-Projects\\FrameworkBenchmarks\\frameworks\\Java\\redkale\\src\\main\\templates"));
-//        jgr.setOutputDirectory(new File("D:\\Java-Projects\\RedkaleBenchmarkProject\\src"));
-//        jgr.run();
-    }
-
-}

+ 0 - 65
frameworks/Java/redkale/src/main/resources/create-postgres.sql

@@ -1,65 +0,0 @@
-
-DROP TABLE IF EXISTS world;
-CREATE TABLE  world (
-  id integer NOT NULL default 0,
-  randomNumber integer NOT NULL default 0,
-  PRIMARY KEY  (id)
-);
-GRANT SELECT, UPDATE ON world to benchmarkdbuser;
-
-INSERT INTO world (id, randomnumber)
-SELECT x.id, random() * 10000 + 1 FROM generate_series(1,10000) as x(id);
-
-DROP TABLE IF EXISTS fortune;
-CREATE TABLE fortune (
-  id integer NOT NULL default 0,
-  message varchar(2048) NOT NULL default '',
-  PRIMARY KEY  (id)
-);
-GRANT SELECT ON fortune to benchmarkdbuser;
-
-INSERT INTO fortune (id, message) VALUES (1, 'fortune: No such file or directory');
-INSERT INTO fortune (id, message) VALUES (2, 'A computer scientist is someone who fixes things that aren''t broken.');
-INSERT INTO fortune (id, message) VALUES (3, 'After enough decimal places, nobody gives a damn.');
-INSERT INTO fortune (id, message) VALUES (4, 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1');
-INSERT INTO fortune (id, message) VALUES (5, 'A computer program does what you tell it to do, not what you want it to do.');
-INSERT INTO fortune (id, message) VALUES (6, 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen');
-INSERT INTO fortune (id, message) VALUES (7, 'Any program that runs right is obsolete.');
-INSERT INTO fortune (id, message) VALUES (8, 'A list is only as strong as its weakest link. — Donald Knuth');
-INSERT INTO fortune (id, message) VALUES (9, 'Feature: A bug with seniority.');
-INSERT INTO fortune (id, message) VALUES (10, 'Computers make very fast, very accurate mistakes.');
-INSERT INTO fortune (id, message) VALUES (11, '<script>alert("This should not be displayed in a browser alert box.");</script>');
-INSERT INTO fortune (id, message) VALUES (12, 'フレームワークのベンチマーク');
-
-
-DROP TABLE IF EXISTS "world";
-CREATE TABLE  "world" (
-  id integer NOT NULL default 0,
-  randomNumber integer NOT NULL default 0,
-  PRIMARY KEY  (id)
-);
-GRANT SELECT, UPDATE ON "world" to benchmarkdbuser;
-
-INSERT INTO "world" (id, randomnumber)
-SELECT x.id, random() * 10000 + 1 FROM generate_series(1,10000) as x(id);
-
-DROP TABLE IF EXISTS "fortune";
-CREATE TABLE "fortune" (
-  id integer NOT NULL default 0,
-  message varchar(2048) NOT NULL default '',
-  PRIMARY KEY  (id)
-);
-GRANT SELECT ON "fortune" to benchmarkdbuser;
-
-INSERT INTO "fortune" (id, message) VALUES (1, 'fortune: No such file or directory');
-INSERT INTO "fortune" (id, message) VALUES (2, 'A computer scientist is someone who fixes things that aren''t broken.');
-INSERT INTO "fortune" (id, message) VALUES (3, 'After enough decimal places, nobody gives a damn.');
-INSERT INTO "fortune" (id, message) VALUES (4, 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1');
-INSERT INTO "fortune" (id, message) VALUES (5, 'A computer program does what you tell it to do, not what you want it to do.');
-INSERT INTO "fortune" (id, message) VALUES (6, 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen');
-INSERT INTO "fortune" (id, message) VALUES (7, 'Any program that runs right is obsolete.');
-INSERT INTO "fortune" (id, message) VALUES (8, 'A list is only as strong as its weakest link. — Donald Knuth');
-INSERT INTO "fortune" (id, message) VALUES (9, 'Feature: A bug with seniority.');
-INSERT INTO "fortune" (id, message) VALUES (10, 'Computers make very fast, very accurate mistakes.');
-INSERT INTO "fortune" (id, message) VALUES (11, '<script>alert("This should not be displayed in a browser alert box.");</script>');
-INSERT INTO "fortune" (id, message) VALUES (12, 'フレームワークのベンチマーク');