Browse Source

updating for a newer version of the framework

MTD 9 years ago
parent
commit
4611de0b96

+ 3 - 1
frameworks/Java/jawn/README.md

@@ -26,6 +26,8 @@ toolset/run-tests.py --test jawn
 toolset/run-tests.py --test jawn --type fortune --sleep 5
 
 
+
 ### Problems with the mounting of FrameworkBenchmarks?
 * **On host**:     vagrant gem install vagrant-vbguest
-* **In guest OS**: sudo mount.vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3`,dmode=777,fmode=777 FrameworkBenchmarks /FrameworkBenchmarks
+* **In guest OS**: sudo mount.vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3`,dmode=777,fmode=777 FrameworkBenchmarks /FrameworkBenchmarks
+export FWROOT=/FrameworkBenchmarks

+ 3 - 2
frameworks/Java/jawn/build.gradle

@@ -19,7 +19,8 @@ repositories {
 
 dependencies {
 	// Framework
-	compile 'net.javapla.jawn:jawn-server-undertow:0.8.10'
+    def framework_version = '0.9.0'
+	compile "net.javapla.jawn:jawn-server-undertow:${framework_version}"
 
 	
 	// Database
@@ -36,7 +37,7 @@ run {
     if(project.hasProperty('args')){
         args project.args.split(',')
     }
-    jvmArgs = ['-XX:+UseNUMA','-XX:+UseParallelGC','-XX:+AggressiveOpts']
+    jvmArgs = ['-server','-XX:+UseNUMA','-XX:+AggressiveHeap']//['-XX:+UseNUMA','-XX:+UseParallelGC','-XX:+AggressiveOpts']
 }
 applicationDistribution.from("webapp") {
     into "webapp"

+ 1 - 1
frameworks/Java/jawn/setup.sh

@@ -6,4 +6,4 @@ fw_depends java
 
 sed -i 's|127.0.0.1|'${DBHOST}'|g' src/main/java/app/config/Database.java
 
-./gradlew run --refresh-dependencies -Pargs=production
+./gradlew --refresh-dependencies run -Pargs=production

+ 0 - 2
frameworks/Java/jawn/source_code

@@ -9,8 +9,6 @@
 ./jawn/src/main/java/app/controllers
 ./jawn/src/main/java/app/controllers/DbController.java
 ./jawn/src/main/java/app/controllers/FortunesController.java
-./jawn/src/main/java/app/controllers/JsonController.java
-./jawn/src/main/java/app/controllers/PlaintextController.java
 ./jawn/src/main/java/app/db
 ./jawn/src/main/java/app/db/DbManager.java
 ./jawn/src/main/java/app/db/DbModule.java

+ 4 - 3
frameworks/Java/jawn/src/main/java/app/UndertowMain.java

@@ -1,8 +1,8 @@
 package app;
 
 import net.javapla.jawn.server.UndertowServer;
-import net.javapla.jawn.server.spi.ServerConfig;
-import net.javapla.jawn.server.spi.ServerConfig.PERFORMANCE_MODE;
+import net.javapla.jawn.server.api.ServerConfig;
+import net.javapla.jawn.server.api.ServerConfig.PERFORMANCE_MODE;
 
 public class UndertowMain {
 
@@ -18,7 +18,8 @@ public class UndertowMain {
         config.setContextPath("/")
             .setPort(8080)
             .setWebappPath("webapp")
-            .setServerPerformance(PERFORMANCE_MODE.HIGHEST);
+            .setServerPerformance(PERFORMANCE_MODE.HIGHEST)
+            ;
         
         UndertowServer server = new UndertowServer();
         server.setupAndStartServer(config);

+ 1 - 1
frameworks/Java/jawn/src/main/java/app/config/Bootstrap.java

@@ -1,7 +1,7 @@
 package app.config;
 
 import net.javapla.jawn.core.ApplicationConfig;
-import net.javapla.jawn.core.spi.ApplicationBootstrap;
+import net.javapla.jawn.core.api.ApplicationBootstrap;
 import app.db.DbModule;
 
 public class Bootstrap implements ApplicationBootstrap {

+ 10 - 1
frameworks/Java/jawn/src/main/java/app/config/Database.java

@@ -1,7 +1,7 @@
 package app.config;
 
+import net.javapla.jawn.core.api.ApplicationDatabaseBootstrap;
 import net.javapla.jawn.core.database.DatabaseConnections;
-import net.javapla.jawn.core.spi.ApplicationDatabaseBootstrap;
 import net.javapla.jawn.core.util.Modes;
 
 public class Database implements ApplicationDatabaseBootstrap {
@@ -38,6 +38,15 @@ public class Database implements ApplicationDatabaseBootstrap {
             .maxPoolSize(256)
             .minPoolSize(256);
         
+        connections
+            .environment(Modes.TEST)
+            .jdbc()
+            .driver("com.mysql.jdbc.Driver")
+            .url("jdbc:mysql://172.16.0.16/hello_world?" + jdbcParams)
+            .user("benchmarkdbuser")
+            .password("benchmarkdbpass")
+            ;
+        
         connections
             .environment(Modes.DEV)
             .jdbc()

+ 10 - 4
frameworks/Java/jawn/src/main/java/app/config/Routing.java

@@ -1,18 +1,24 @@
 package app.config;
 
-import net.javapla.jawn.core.spi.ApplicationRoutes;
-import net.javapla.jawn.core.spi.Routes;
+import net.javapla.jawn.core.Responses;
+import net.javapla.jawn.core.api.ApplicationRoutes;
+import net.javapla.jawn.core.api.Routes;
 import app.controllers.DbController;
+import app.models.Message;
 
 
 public class Routing implements ApplicationRoutes {
     
+    private static final String message = "Hello, World!";
+    private static final byte[] bytemessage = message.getBytes();
+    
     @Override
     public void router(Routes routes) {
-//        routes.GET().route("/json").to(IndexController.class, "json");
-//        routes.GET().route("/plaintext").to(IndexController.class, "plaintext");
         routes.GET().route("/queries").to(DbController.class, "queries");
         routes.GET().route("/updates").to(DbController.class, "updates");
+        
+        routes.GET().route("/json").with(Responses.json(new Message(message)));
+        routes.GET().route("/plaintext").with(Responses.text(bytemessage));
     }
 
 }

+ 8 - 18
frameworks/Java/jawn/src/main/java/app/controllers/DbController.java

@@ -1,52 +1,42 @@
 package app.controllers;
 
-import java.util.concurrent.ThreadLocalRandom;
-
 import net.javapla.jawn.core.Controller;
 import net.javapla.jawn.core.Param;
 import app.db.DbManager;
+import app.helpers.Helper;
 import app.models.World;
 
 import com.google.inject.Inject;
 
 public class DbController extends Controller {
 
-    private static final int NUMBER_OF_ROWS = 10_000;
-    
     @Inject
     private DbManager db;
     
+    // /db
     public void index() {
-        respond().json(db.getWorld(getRandomNumber()));
+        respond().json(db.getWorld(Helper.getRandomNumber()));
     }
     
+    // /queries?queries=
     public void getQueries() {
         int param = parseQueryParam();
         
-        World[] worlds = new World[param];
-        for (int i = 0; i < param; i++) {
-            worlds[i] = db.getWorld(getRandomNumber());
-        }
-        respond().json(worlds);
+        respond().json(db.getWorlds(param));
     }
     
+    // /updates?queries=
     public void getUpdates() {
         int param = parseQueryParam();
         
-        World[] worlds = new World[param];
+        World[] worlds = db.getWorlds(param);
         for (int i = 0; i < param; i++) {
-            World world = db.getWorld(getRandomNumber());
-            world.randomNumber = getRandomNumber();
-            worlds[i] = world;
+            worlds[i].randomNumber = Helper.getRandomNumber();
         }
         db.updateWorlds(worlds);
         respond().json(worlds);
     }
     
-    private int getRandomNumber() {
-        return ThreadLocalRandom.current().nextInt(NUMBER_OF_ROWS) + 1;
-    }
-    
     private int parseQueryParam() {
         Param queries = param("queries");
         Integer param = queries.asInt(1);

+ 0 - 12
frameworks/Java/jawn/src/main/java/app/controllers/JsonController.java

@@ -1,12 +0,0 @@
-package app.controllers;
-
-import app.models.Message;
-import net.javapla.jawn.core.Controller;
-
-public class JsonController extends Controller {
-
-    private static final String message = "Hello, World!";
-    public void index() {
-        respond().json(new Message(message));
-    }
-}

+ 0 - 12
frameworks/Java/jawn/src/main/java/app/controllers/PlaintextController.java

@@ -1,12 +0,0 @@
-package app.controllers;
-
-import net.javapla.jawn.core.Controller;
-
-public class PlaintextController extends Controller {
-
-    private static final String message = "Hello, World!";
-    private static final byte[] bytemessage = message.getBytes();
-    public void index() {
-        respond().text(bytemessage);
-    }
-}

+ 41 - 9
frameworks/Java/jawn/src/main/java/app/db/DbManager.java

@@ -12,6 +12,7 @@ import javax.sql.DataSource;
 
 import net.javapla.jawn.core.database.DatabaseConnection;
 import net.javapla.jawn.core.exceptions.InitException;
+import app.helpers.Helper;
 import app.models.Fortune;
 import app.models.World;
 
@@ -32,16 +33,42 @@ public class DbManager {
     
     public World getWorld(int id) {
         try (Connection connection = source.getConnection()) {
-            PreparedStatement statement = connection.prepareStatement("SELECT id, randomNumber FROM World WHERE id = ?");
+            PreparedStatement statement = connection.prepareStatement("SELECT id, randomNumber FROM World WHERE id = ?",
+                    ResultSet.TYPE_FORWARD_ONLY,
+                    ResultSet.CONCUR_READ_ONLY);
             statement.setInt(1, id);
-            try (ResultSet set = statement.executeQuery()) {
-                if (!set.next()) return null;
+            ResultSet set = statement.executeQuery();
+            
+            // we always expect a response in this test environment
+            //if (!set.next()) return null;
+            set.next();
+            
+            return new World(set.getInt(1), set.getInt(2));
+        } catch (SQLException e) {}
+        return null;
+    }
+    
+    public final World[] getWorlds(int number) {
+        World[] worlds = new World[number];
+        
+        try (final Connection connection = source.getConnection()) {
+            
+            for (int i = 0; i < number; i++) {
+                try(PreparedStatement statement = connection.prepareStatement("SELECT id, randomNumber FROM World WHERE id = ?",
+                        ResultSet.TYPE_FORWARD_ONLY,
+                        ResultSet.CONCUR_READ_ONLY)) {
                 
-                return new World(set.getInt(1), set.getInt(2));
+                    statement.setInt(1, Helper.getRandomNumber());
+                    ResultSet set = statement.executeQuery();
+                    set.next();
+                    
+                    worlds[i] = new World(set.getInt(1), set.getInt(2));
+                }
             }
-        } catch (SQLException e) {
-            return null;
-        }
+            
+        } catch (SQLException e) {}
+        
+        return worlds;
     }
     
     public boolean updateWorlds(World[] worlds) {
@@ -62,8 +89,13 @@ public class DbManager {
     public List<Fortune> fetchAllFortunes() {
         List<Fortune> list = new ArrayList<>();
         try (Connection connection = source.getConnection()) {
-            PreparedStatement fetch = connection.prepareStatement("SELECT id, message FROM Fortune");
-            ResultSet set = fetch.executeQuery();
+//            PreparedStatement fetch = connection.prepareStatement("SELECT id, message FROM Fortune",
+//                    ResultSet.TYPE_FORWARD_ONLY,
+//                    ResultSet.CONCUR_READ_ONLY);
+//            ResultSet set = fetch.executeQuery();
+            ResultSet set = connection
+                    .createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
+                    .executeQuery("SELECT id, message FROM Fortune");
             while (set.next()) {
                 list.add(new Fortune(set.getInt(1), escape(set.getString(2))));
             }

+ 13 - 0
frameworks/Java/jawn/src/main/java/app/helpers/Helper.java

@@ -0,0 +1,13 @@
+package app.helpers;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+public final class Helper {
+    
+    public static final int NUMBER_OF_ROWS = 10_000;
+
+    public static final int getRandomNumber() {
+        return ThreadLocalRandom.current().nextInt(Helper.NUMBER_OF_ROWS) + 1;
+    }
+
+}

+ 4 - 1
frameworks/Java/jawn/src/main/resources/logback.xml

@@ -6,9 +6,12 @@
         </encoder>
     </appender>
 
+    <logger name="com.mchange.v2.c3p0.impl.NewProxyPreparedStatement" level="WARN" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
     
     <!-- Disables all logging -->
-    <root level="OFF">
+    <root level="off">
         <appender-ref ref="STDOUT" />
     </root>