Browse Source

[ci fw-only Java/act-beetlsql] Add actframework with beetlsql as database ORM tool (#2698)

* add act-beetlsql

* WIP

* WIP

* update to act-1.1.2; use mustache template

* WIP

* Update act-beetlsql to act-1.1.2; act-beetlsql-1.1.0

* rename the test display name for act-beetlsql

* take out mysql tests

* merge act-beetlsql project into act

* take act-beetlsql out of .travis.yml file
Green Luo 8 năm trước cách đây
mục cha
commit
214855004c

+ 1 - 0
frameworks/Java/act/.gitignore

@@ -7,6 +7,7 @@
 *.jar
 *.war
 *.ear
+*.pid
 lib
 target
 .idea

+ 23 - 0
frameworks/Java/act/benchmark_config.json

@@ -86,6 +86,29 @@
       "display_name": "act-morphia",
       "notes": "",
       "versus": "undertow"
+    },
+    "beetlsql": {
+      "setup_file": "setup",
+      "db_url": "/beetlsql/db",
+      "query_url": "/beetlsql/queries?queries=",
+      "fortune_url": "/beetlsql/fortunes",
+      "update_url": "/beetlsql/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "Postgres",
+      "framework": "actframework",
+      "language": "Java",
+      "flavor": "None",
+      "orm": "Full",
+      "platform": "Undertow",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "act-beetlsql",
+      "notes": "",
+      "versus": "undertow"
     }
+
   }]
 }

+ 12 - 0
frameworks/Java/act/pom.xml

@@ -21,6 +21,8 @@
         <postgres-jdbc.version>9.4.1212</postgres-jdbc.version>
         <HikariCP.version>2.6.1</HikariCP.version>
         <act-mustache.version>1.0.0</act-mustache.version>
+        <act-beetlsql.version>1.1.0</act-beetlsql.version>
+        <beetlsql.version>2.8.9</beetlsql.version>
         <app.entry>com.techempower.act.AppEntry</app.entry>
     </properties>
 
@@ -65,6 +67,16 @@
             <artifactId>act-mustache</artifactId>
             <version>${act-mustache.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.actframework</groupId>
+            <artifactId>act-beetlsql</artifactId>
+            <version>${act-beetlsql.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ibeetl</groupId>
+            <artifactId>beetlsql</artifactId>
+            <version>${beetlsql.version}</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 83 - 0
frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/BeetlSqlController.java

@@ -0,0 +1,83 @@
+package com.techempower.act.beetlsql;
+
+import act.app.conf.AutoConfig;
+import act.controller.Controller;
+import org.osgl.$;
+import org.osgl.mvc.annotation.GetAction;
+import org.osgl.mvc.result.Result;
+import org.osgl.util.Const;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static com.techempower.act.controller.WorldControllerBase.randomWorldNumber;
+import static com.techempower.act.controller.WorldControllerBase.regulateQueries;
+
+/**
+ * Testing for Act on BeetlSQL
+ */
+@Controller("beetlsql")
+@AutoConfig
+@SuppressWarnings("unused")
+public class BeetlSqlController extends Controller.Util {
+
+    /**
+     * This constant will get populated with the value set in
+     * `app.world.max_row` configuration item
+     */
+    public static final Const<Integer> WORLD_MAX_ROW = $.constant();
+
+    @GetAction("db")
+    public final void singleQuery(World.Mapper worldDao) {
+        json(findOne(worldDao));
+    }
+
+    @GetAction("queries")
+    public final Result multipleQueries(String queries, World.Mapper worldDao) {
+        int q = regulateQueries(queries);
+
+        World[] worlds = new World[q];
+        for (int i = 0; i < q; ++i) {
+            worlds[i] = findOne(worldDao);
+        }
+        return json(worlds);
+    }
+
+    @GetAction("updates")
+    public final void updateQueries(String queries, World.Mapper worldDao) {
+        int q = regulateQueries(queries);
+        List<World> retVal = doUpdate(q, worldDao);
+        json(retVal);
+    }
+
+    @GetAction("fortunes")
+    public void fortunes(Fortune.Mapper fortuneDao) {
+        List<Fortune> fortunes = fortuneDao.all();
+        fortunes.add(new Fortune(0, "Additional fortune added at request time."));
+        Collections.sort(fortunes);
+        template("fortunes.mustache", fortunes);
+    }
+
+    protected List<World> doUpdate(int q, World.Mapper worldDao) {
+        List<World> retVal = new ArrayList<>(q);
+        for (int i = 0; i < q; ++i) {
+            retVal.add(findAndModifyOne(worldDao));
+        }
+        return retVal;
+    }
+
+    private World findOne(World.Mapper worldDao) {
+        return worldDao.single(randomWorldNumber());
+    }
+
+    private World findAndModifyOne(World.Mapper worldDao) {
+        World world = findOne(worldDao);
+        notFoundIfNull(world);
+        world.setRandomNumber(randomWorldNumber());
+        worldDao.updateById(world);
+        return world;
+    }
+
+
+}

+ 20 - 0
frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/Fortune.java

@@ -0,0 +1,20 @@
+package com.techempower.act.beetlsql;
+
+
+import act.db.DB;
+import org.beetl.sql.core.mapper.BaseMapper;
+
+import javax.persistence.Entity;
+
+@DB("beetl")
+@Entity
+public class Fortune extends com.techempower.act.sql.domain.Fortune {
+
+    public Fortune(Integer id, String message) {
+        super(id, message);
+    }
+
+    public interface Mapper extends BaseMapper<Fortune> {
+    }
+
+}

+ 17 - 0
frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/World.java

@@ -0,0 +1,17 @@
+package com.techempower.act.beetlsql;
+
+
+import act.db.DB;
+import org.beetl.sql.core.mapper.BaseMapper;
+
+import javax.persistence.Entity;
+
+@DB("beetl")
+@Entity
+public class World extends com.techempower.act.sql.domain.World {
+    public World(Integer id, Integer randomNumber) {
+        super(id, randomNumber);
+    }
+
+    public interface Mapper extends BaseMapper<World> {}
+}

+ 2 - 2
frameworks/Java/act/src/main/java/com/techempower/act/controller/WorldControllerBase.java

@@ -76,7 +76,7 @@ public abstract class WorldControllerBase<MODEL_TYPE extends IWorld,
 		return world;
 	}
 
-	private int regulateQueries(String param) {
+	public static int regulateQueries(String param) {
 		if (null == param) {
 			return 1;
 		}
@@ -91,7 +91,7 @@ public abstract class WorldControllerBase<MODEL_TYPE extends IWorld,
 		}
 	}
 
-	protected final int randomWorldNumber() {
+	public static int randomWorldNumber() {
 		return ThreadLocalRandom.current().nextInt(WORLD_MAX_ROW.get()) + 1;
 	}
 

+ 2 - 0
frameworks/Java/act/src/main/java/com/techempower/act/pgsql/domain/Fortune.java

@@ -3,6 +3,7 @@ package com.techempower.act.pgsql.domain;
 
 import act.db.DB;
 import act.db.ebean2.EbeanDao;
+import org.beetl.sql.core.mapper.BaseMapper;
 
 import javax.persistence.Entity;
 
@@ -15,4 +16,5 @@ public class Fortune extends com.techempower.act.sql.domain.Fortune {
     }
 
     public static class Dao extends EbeanDao<Integer, Fortune> {}
+
 }

+ 7 - 0
frameworks/Java/act/src/main/java/com/techempower/act/sql/domain/Fortune.java

@@ -29,4 +29,11 @@ public class Fortune implements IFortune, SimpleBean {
         return this.message;
     }
 
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
 }

+ 4 - 0
frameworks/Java/act/src/main/java/com/techempower/act/sql/domain/World.java

@@ -25,6 +25,10 @@ public class World implements IWorld {
         this.randomNumber = randomNumber;
     }
 
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
     public Integer getId() {
         return id;
     }

+ 16 - 2
frameworks/Java/act/src/main/resources/conf/common/db.properties

@@ -1,4 +1,4 @@
-db.instances=mongo,mysql,pgsql
+db.instances=mongo,mysql,pgsql,beetl
 
 mongo.host=localhost
 
@@ -22,5 +22,19 @@ db.pgsql.url=jdbc:postgresql://${pgsql.host}:5432/hello_world
 db.pgsql.username=benchmarkdbuser
 db.pgsql.password=benchmarkdbpass
 db.pgsql.maxConnections=256
-db.pgsql.minConnections=128
+db.pgsql.minConnections=64
 db.pgsql.useServerPrepStmts=true
+db.pgsql.beetlsql.nc=org.beetl.sql.core.DefaultNameConversion
+
+beetl.host=localhost
+
+db.beetl.impl=act.db.beetlsql.BeetlSqlPlugin
+db.beetl.url=jdbc:postgresql://${pgsql.host}:5432/hello_world
+db.beetl.username=benchmarkdbuser
+db.beetl.password=benchmarkdbpass
+db.beetl.maxConnections=256
+db.beetl.minConnections=64
+db.beetl.useServerPrepStmts=true
+db.beetl.beetlsql.nc=org.beetl.sql.core.DefaultNameConversion
+db.ddl.create=false
+db.interceptor.debug=true

+ 2 - 2
frameworks/Java/act/src/main/resources/logback.xml

@@ -11,7 +11,7 @@
         </encoder>
     </appender>
 
-    <logger name="act" level="OFF" additivity="false">
+    <logger name="act" level="INFO" additivity="false">
         <appender-ref ref="STDOUT" />
     </logger>
 
@@ -20,7 +20,7 @@
     </logger>
 
     <!-- By default, the level of the root level is set to DEBUG -->
-    <root level="OFF">
+    <root level="INFO">
         <appender-ref ref="STDOUT" />
     </root>
 </configuration>