Explorar el Código

Wicket: implement "Test type 5: Database updates"

Martin Tzvetanov Grigorov hace 11 años
padre
commit
13a7d01217

+ 2 - 1
wicket/benchmark_config

@@ -5,6 +5,7 @@
       "setup_file": "setup",
       "json_url": "/wicket/json",
       "db_url": "/wicket/db",
+      "update_url": "/wicket/updates?queries=",
       "query_url": "/wicket/db?queries=",
       "port": 8080,
       "approach": "Realistic",
@@ -22,4 +23,4 @@
       "versus": "servlet"
     }
   }]
-}
+}

+ 2 - 0
wicket/source_code

@@ -11,6 +11,8 @@
 ./wicket/src/main/java/hellowicket/BasePage.html
 ./wicket/src/main/java/hellowicket/HomePage.html
 ./wicket/src/main/java/hellowicket/World.java
+./wicket/src/main/java/hellowicket/dbupdates/HelloDbUpdatesResource.java
+./wicket/src/main/java/hellowicket/dbupdates/HelloDbUpdatesReference.java
 ./wicket/src/main/webapp/
 ./wicket/src/main/webapp/logo.png
 ./wicket/src/main/webapp/style.css

+ 2 - 0
wicket/src/main/java/hellowicket/WicketApplication.java

@@ -1,5 +1,6 @@
 package hellowicket;
 
+import hellowicket.dbupdates.HelloDbUpdatesReference;
 import org.apache.wicket.protocol.http.WebApplication;
 
 /**
@@ -31,6 +32,7 @@ public class WicketApplication extends WebApplication
 		// mount the resources under test
 		mountResource("/json", new HelloJsonReference());
 		mountResource("/db", new HelloDbReference());
+		mountResource("/updates", new HelloDbUpdatesReference());
 
 		// disable response caching to be more close to other
 		// test applications' behavior

+ 22 - 0
wicket/src/main/java/hellowicket/dbupdates/HelloDbUpdatesReference.java

@@ -0,0 +1,22 @@
+package hellowicket.dbupdates;
+
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.ResourceReference;
+
+public class HelloDbUpdatesReference extends ResourceReference
+{
+  private static final long serialVersionUID = 1L;
+
+  private final HelloDbUpdatesResource resource = new HelloDbUpdatesResource();
+
+  public HelloDbUpdatesReference()
+  {
+    super(HelloDbUpdatesReference.class, "dbupdates");
+  }
+
+  @Override
+  public IResource getResource()
+  {
+	  return resource;
+  }
+}

+ 83 - 0
wicket/src/main/java/hellowicket/dbupdates/HelloDbUpdatesResource.java

@@ -0,0 +1,83 @@
+package hellowicket.dbupdates;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Random;
+
+import org.apache.wicket.request.resource.AbstractResource;
+import org.hibernate.Query;
+import org.hibernate.Session;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import hellowicket.HibernateUtil;
+import hellowicket.World;
+
+/**
+ * A resource that implements the requirements for
+ * <a href="http://www.techempower.com/benchmarks/#section=code">Test type 5: Database updates</a>
+ */
+public class HelloDbUpdatesResource extends AbstractResource
+{
+  private static final long serialVersionUID = 1L;
+
+  private static final int DB_ROWS = 10000;
+
+  private static final ObjectMapper mapper = new ObjectMapper();
+
+  protected ResourceResponse newResourceResponse(Attributes attributes)
+  {
+    int _queries = attributes.getRequest().getQueryParameters().getParameterValue("queries").toInt(1);
+    if (_queries < 1)
+    {
+      _queries = 1;
+    }
+    else if (_queries > 500)
+    {
+      _queries = 500;
+    }
+    final int queries = _queries;
+
+    final ResourceResponse response = new ResourceResponse();
+    response.setContentType("application/json");
+
+    response.setWriteCallback(new WriteCallback() {
+      public void writeData(Attributes attributes)
+      {
+        Random random = new Random();
+
+        Session session = HibernateUtil.getSessionFactory().openSession();
+        Query query = session
+          .createQuery("from World")
+          .setMaxResults(queries);
+        List<World> worlds = query.list();
+        for (World world : worlds)
+        {
+          world.randomNumber = random.nextInt(DB_ROWS) + 1;
+          session.update(world);
+        }
+
+        session.close();
+
+        try
+        {
+          String data;
+          if (queries == 1)
+          {
+              data = HelloDbUpdatesResource.mapper.writeValueAsString(worlds.get(0));
+          }
+          else
+          {
+              data = HelloDbUpdatesResource.mapper.writeValueAsString(worlds);
+          }
+          attributes.getResponse().write(data);
+        }
+        catch (IOException ex)
+        {
+          // do nothing
+        }
+      }
+    });
+    return response;
+  }
+}