Package controllers

Source Code of controllers.Application

package controllers;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ExecutionException;

import models.World;
import play.db.jpa.JPAPlugin;
import play.jobs.Job;
import play.libs.F.Promise;
import play.mvc.Controller;

public class Application extends Controller {

  private static final int TEST_DATABASE_ROWS = 10000;

  // FIXME: should this test be consistent - ie set seed or not?
  private static Random random = new Random();

  public static void index() {
    render();
  }

  public static void hello() {
    renderText("hello world");
  }

  public static void json() {
    Map<String, String> result = new HashMap<String, String>();
    result.put("message", "Hello, World!");
    renderJSON(result);
  }

  /**
   * this version is used in the tests. it is the simplest and fastest.
   *
   * @param queries
   */
  public static void dbSync(int queries) {
    if (queries == 0)
      queries = 1;
    final List<World> worlds = new ArrayList<World>();
    for (int i = 0; i < queries; ++i) {
      Long id = Long.valueOf(random.nextInt(TEST_DATABASE_ROWS) + 1);
      World result = World.findById(id);
      worlds.add(result);
    }
    renderJSON(worlds);
  }

  @play.db.jpa.NoTransaction
  public static void setup() {
    JPAPlugin plugin = play.Play.plugin(JPAPlugin.class);
    plugin.startTx(true);

    // clean out the old
    World.deleteAll();
    System.out.println("DELETED");
    // in with the new
    for (long i = 0; i <= TEST_DATABASE_ROWS; i++) {
      int randomNumber = random.nextInt(TEST_DATABASE_ROWS) + 1;
      new World(i, randomNumber).save();
      if (i % 100 == 0) {

        World.em().flush();
        World.em().clear();
        System.out.println("FLUSHED : " + i + "/" + TEST_DATABASE_ROWS);

      }
    }
    System.out.println("ADDED");
    plugin.closeTx(false);
  }

  /**
   * note this is method is much slower than the synchronous version
   */
  public static void dbAsyncEachQuery(int queries)
      throws InterruptedException, ExecutionException {
    if (queries == 0)
      queries = 1;
    final int queryCount = queries;
    List<Promise<World>> promises = new ArrayList<Promise<World>>();
    for (int i = 0; i < queryCount; ++i) {
      final Long id = Long
          .valueOf(random.nextInt(TEST_DATABASE_ROWS) + 1);
      Job<World> job = new Job<World>() {
        public World doJobWithResult() throws Exception {
          World result = World.findById(id);
          return result;
        };
      };
      promises.add(job.now());
    }
    List<World> result = await(Promise.waitAll(promises));
    renderJSON(result);
  }

  /**
   * note this is method is a bit slower than the synchronous version
   */
  public static void dbAsyncAllQueries(int queries)
      throws InterruptedException, ExecutionException {
    if (queries == 0)
      queries = 1;
    final int queryCount = queries;
    final List<World> worlds = new ArrayList<World>();
    Job<List<World>> job = new Job<List<World>>() {
      public java.util.List<World> doJobWithResult() throws Exception {
        for (int i = 0; i < queryCount; ++i) {
          Long id = Long
              .valueOf(random.nextInt(TEST_DATABASE_ROWS) + 1);
          World result = World.findById(id);
          worlds.add(result);
        }
        return worlds;
      };
    };
    List<World> result = job.now().get();
    renderJSON(result);
  }

}
TOP

Related Classes of controllers.Application

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.