Browse Source

Final changes for next round.

reyez 11 years ago
parent
commit
32c0d54cbf
29 changed files with 460 additions and 517 deletions
  1. 2 2
      ninja-standalone/pom.xml
  2. 1 1
      ninja/benchmark_config
  3. 141 141
      ninja/pom.xml
  4. 47 0
      ninja/src/main/java/META-INF/persistence.xml
  5. 22 10
      ninja/src/main/java/conf/Routes.java
  6. 3 7
      ninja/src/main/java/conf/application.conf
  7. 0 0
      ninja/src/main/java/conf/messages.properties
  8. 78 0
      ninja/src/main/java/controllers/HelloDbController.java
  9. 30 0
      ninja/src/main/java/controllers/HelloFortuneController.java
  10. 1 1
      ninja/src/main/java/controllers/HelloJsonController.java
  11. 1 1
      ninja/src/main/java/controllers/HelloPlaintextController.java
  12. 35 0
      ninja/src/main/java/controllers/SetupController.java
  13. 6 7
      ninja/src/main/java/dao/FortuneDao.java
  14. 29 25
      ninja/src/main/java/dao/SetupDao.java
  15. 7 8
      ninja/src/main/java/dao/WorldDao.java
  16. 0 0
      ninja/src/main/java/ehcache.xml
  17. 0 41
      ninja/src/main/java/hello/controllers/DatabaseAccess.java
  18. 0 86
      ninja/src/main/java/hello/controllers/HelloDbController.java
  19. 0 28
      ninja/src/main/java/hello/controllers/HelloFortuneController.java
  20. 0 20
      ninja/src/main/java/hello/views/HelloFortuneController/index.ftl.html
  21. 0 0
      ninja/src/main/java/logback.xml
  22. 7 6
      ninja/src/main/java/model/Fortune.java
  23. 2 1
      ninja/src/main/java/model/World.java
  24. 20 0
      ninja/src/main/java/views/HelloFortuneController/index.ftl.html
  25. 0 70
      ninja/src/main/resources/META-INF/persistence.xml
  26. 12 20
      ninja/src/test/java/controllers/HelloDbControllerTest.java
  27. 5 14
      ninja/src/test/java/controllers/HelloFortuneControllerTest.java
  28. 6 14
      ninja/src/test/java/controllers/HelloJsonControllerTest.java
  29. 5 14
      ninja/src/test/java/controllers/HelloPlaintextControllerTest.java

+ 2 - 2
ninja-standalone/pom.xml

@@ -4,12 +4,12 @@
 	<groupId>helo.world</groupId>
 	<groupId>helo.world</groupId>
 	<artifactId>hello-ninja-standalone</artifactId>
 	<artifactId>hello-ninja-standalone</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
 	<version>0.0.1-SNAPSHOT</version>
-	<name>ninja-techempower-standalone</name>
+	<name>ninja-standalone</name>
 	<description>Nnja test for the TechEmpower/FrameworkBenchmarks project</description>
 	<description>Nnja test for the TechEmpower/FrameworkBenchmarks project</description>
 
 
 	<properties>
 	<properties>
 		<java-version>1.7</java-version>
 		<java-version>1.7</java-version>
-		<ninja.version>2.4.0</ninja.version>
+		<ninja.version>2.5.0</ninja.version>
 		<mysql.version>5.1.26</mysql.version>
 		<mysql.version>5.1.26</mysql.version>
 		<jetty.version>9.0.5.v20130815</jetty.version>
 		<jetty.version>9.0.5.v20130815</jetty.version>
 	</properties>
 	</properties>

+ 1 - 1
ninja/benchmark_config

@@ -20,7 +20,7 @@
       "webserver": "Resin",
       "webserver": "Resin",
       "os": "Linux",
       "os": "Linux",
       "database_os": "Linux",
       "database_os": "Linux",
-      "display_name": "ninja",
+      "display_name": "ninja-resin",
       "notes": "",
       "notes": "",
       "versus": "servlet"
       "versus": "servlet"
     }
     }

+ 141 - 141
ninja/pom.xml

@@ -1,64 +1,64 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>helo.world</groupId>
-	<artifactId>hello-ninja</artifactId>
-	<version>0.0.1-SNAPSHOT</version>
-	<name>ninja-techempower-resin</name>
-	<description>Nnja test for the TechEmpower/FrameworkBenchmarks project</description>
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>helo.world</groupId>
+    <artifactId>hello-ninja</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>ninja-resin</name>
+    <description>Nnja test for the TechEmpower/FrameworkBenchmarks project</description>
 
 
-	<properties>
-		<java-version>1.7</java-version>
-		<ninja.version>2.4.0</ninja.version>
-		<mysql.version>5.1.26</mysql.version>
-		<jetty.version>9.0.5.v20130815</jetty.version>
-	</properties>
+    <properties>
+        <java.version>1.7</java.version>
+        <ninja.version>2.5.1</ninja.version>
+        <mysql.version>5.1.26</mysql.version>
+        <jetty.version>9.0.5.v20130815</jetty.version>
+    </properties>
 
 
-	<dependencies>
-		<dependency>
-			<groupId>org.ninjaframework</groupId>
-			<artifactId>ninja-standalone</artifactId>
-			<version>${ninja.version}</version>
-		</dependency>
+    <dependencies>
+        <dependency>
+            <groupId>org.ninjaframework</groupId>
+            <artifactId>ninja-standalone</artifactId>
+            <version>${ninja.version}</version>
+        </dependency>
 
 
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>javax.servlet-api</artifactId>
-			<version>3.0.1</version>
-			<scope>provided</scope>
-		</dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.0.1</version>
+            <scope>provided</scope>
+        </dependency>
 
 
-		<dependency>
-			<groupId>org.ninjaframework</groupId>
-			<artifactId>ninja-test-utilities</artifactId>
-			<version>${ninja.version}</version>
-			<scope>test</scope>
-		</dependency>
+        <dependency>
+            <groupId>org.ninjaframework</groupId>
+            <artifactId>ninja-test-utilities</artifactId>
+            <version>${ninja.version}</version>
+            <scope>test</scope>
+        </dependency>
 
 
-		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-			<version>${mysql.version}</version>
-		</dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql.version}</version>
+        </dependency>
                 
                 
-                <dependency>
-                    <groupId>com.h2database</groupId>
-                    <artifactId>h2</artifactId>
-                    <version>1.3.174</version>
-                </dependency>
-	</dependencies>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.3.174</version>
+        </dependency>
+    </dependencies>
 
 
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>3.1</version>
-				<configuration>
-					<source>${java-version}</source>
-					<target>${java-version}</target>
-				</configuration>
-			</plugin>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
 			
 			
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
@@ -75,96 +75,96 @@
                 <version>${ninja.version}</version>
                 <version>${ninja.version}</version>
             </plugin>
             </plugin>
 
 
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-enforcer-plugin</artifactId>
-				<version>1.0</version>
-				<executions>
-					<execution>
-						<id>enforce-banned-dependencies</id>
-						<goals>
-							<goal>enforce</goal>
-						</goals>
-						<configuration>
-							<rules>
-								<bannedDependencies>
-									<excludes>
-										<exclude>commons-logging</exclude>
-									</excludes>
-								</bannedDependencies>
-							</rules>
-							<fail>true</fail>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <version>1.0</version>
+                <executions>
+                    <execution>
+                        <id>enforce-banned-dependencies</id>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <bannedDependencies>
+                                    <excludes>
+                                        <exclude>commons-logging</exclude>
+                                    </excludes>
+                                </bannedDependencies>
+                            </rules>
+                            <fail>true</fail>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
 
 
-			<plugin>
-				<groupId>org.eclipse.jetty</groupId>
-				<artifactId>jetty-maven-plugin</artifactId>
-				<version>${jetty.version}</version>
-				<configuration>
-					<contextPath>/</contextPath>
-					<stopKey>stop</stopKey>
-					<stopPort>8889</stopPort>
-					<scanIntervalSeconds>1</scanIntervalSeconds>
-					<reload>automatic</reload>
-					<scanTargetPatterns>
-						<scanTargetPattern>
-							<directory>target/classes</directory>
-							<includes>
-								<include>**/*</include>
-							</includes>
-							<excludes>
-								<exclude>**/*.ftl.html</exclude>
-								<exclude>assets/**</exclude>
-							</excludes>
-						</scanTargetPattern>
-					</scanTargetPatterns>
-				</configuration>
-			</plugin>
+            <plugin>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>${jetty.version}</version>
+                <configuration>
+                    <contextPath>/</contextPath>
+                    <stopKey>stop</stopKey>
+                    <stopPort>8889</stopPort>
+                    <scanIntervalSeconds>1</scanIntervalSeconds>
+                    <reload>automatic</reload>
+                    <scanTargetPatterns>
+                        <scanTargetPattern>
+                            <directory>target/classes</directory>
+                            <includes>
+                                <include>**/*</include>
+                            </includes>
+                            <excludes>
+                                <exclude>**/*.ftl.html</exclude>
+                                <exclude>assets/**</exclude>
+                            </excludes>
+                        </scanTargetPattern>
+                    </scanTargetPatterns>
+                </configuration>
+            </plugin>
 
 
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-deploy-plugin</artifactId>
-				<version>2.7</version>
-				<configuration>
-					<skip>true</skip>
-				</configuration>
-			</plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>2.7</version>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
 
 
-			<plugin>
-				<artifactId>maven-assembly-plugin</artifactId>
-				<version>2.4</version>
-				<configuration>
-					<descriptorRefs>
-						<descriptorRef>jar-with-dependencies</descriptorRef>
-					</descriptorRefs>
-					<archive>
-						<manifest>
-							<mainClass>ninja.standalone.NinjaJetty</mainClass>
-						</manifest>
-					</archive>
-				</configuration>
-			</plugin>
-		</plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.4</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                    <archive>
+                        <manifest>
+                            <mainClass>ninja.standalone.NinjaJetty</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
 
 
-		<resources>
-			<resource>
-				<directory>src/main/java</directory>
-				<includes>
-					<include>**/*</include>
-				</includes>
-				<excludes>
-					<exclude>**/*.java</exclude>
-				</excludes>
-			</resource>
-			<resource>
-				<directory>src/main/resources</directory>
-				<includes>
-					<include>**/*</include>
-				</includes>
-			</resource>
-		</resources>
-	</build>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
 </project>
 </project>

+ 47 - 0
ninja/src/main/java/META-INF/persistence.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+             version="2.0">
+    
+    <!-- Resin datasource -->
+    <persistence-unit name="resin" transaction-type="RESOURCE_LOCAL">
+        <provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <jta-data-source>java:comp/env/jdbc/hello_world</jta-data-source>
+
+        <properties>
+            <property name="hibernate.connection.datasource" value="java:comp/env/jdbc/hello_world" />
+            <property name="hibernate.transaction.factory_class"
+                                  value="org.hibernate.transaction.JTATransactionFactory" />
+            <property name="hibernate.transaction.manager_lookup_class"
+                                  value="org.hibernate.transaction.ResinTransactionManagerLookup" />
+        </properties>
+    </persistence-unit>
+        
+    <!-- Database for tests and local dev mode... -->
+    <persistence-unit name="h2" transaction-type="RESOURCE_LOCAL">
+        <provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <properties>
+            <property name="javax.persistence.provider" value="org.hibernate.ejb.HibernatePersistence" />
+            <property name="hibernate.connection.driver_class" value="org.h2.Driver" />
+            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
+            <!-- you may want to enable the ddl if you do not use migrations. -->
+            <property name="hibernate.hbm2ddl.auto" value="create" />
+            <property name="hibernate.show_sql" value="false" />
+            <property name="hibernate.format_sql" value="false" />
+
+            <!-- Connection Pooling settings -->
+            <property name="hibernate.connection.provider_class"
+                          value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
+
+            <property name="hibernate.c3p0.max_size" value="100" />
+            <property name="hibernate.c3p0.min_size" value="0" />
+            <property name="hibernate.c3p0.acquire_increment" value="1" />
+            <property name="hibernate.c3p0.idle_test_period" value="300" />
+            <property name="hibernate.c3p0.max_statements" value="0" />
+            <property name="hibernate.c3p0.timeout" value="100" />     
+        </properties>
+    </persistence-unit>
+
+</persistence>

+ 22 - 10
ninja/src/main/java/conf/Routes.java

@@ -1,23 +1,35 @@
 package conf;
 package conf;
 
 
-import hello.controllers.HelloDbController;
-import hello.controllers.HelloFortuneController;
-import hello.controllers.HelloJsonController;
-import hello.controllers.HelloPlaintextController;
+import com.google.inject.Inject;
+import controllers.HelloDbController;
+import controllers.HelloFortuneController;
+import controllers.HelloJsonController;
+import controllers.HelloPlaintextController;
+import controllers.SetupController;
 import ninja.Router;
 import ninja.Router;
 import ninja.application.ApplicationRoutes;
 import ninja.application.ApplicationRoutes;
+import ninja.utils.NinjaProperties;
 
 
 public class Routes implements ApplicationRoutes {
 public class Routes implements ApplicationRoutes {
 
 
+    @Inject
+    NinjaProperties ninjaProperties;
+
     @Override
     @Override
     public void init(Router router) {
     public void init(Router router) {
 
 
-	router.GET().route("/plaintext").with(HelloPlaintextController.class, "index");
-	router.GET().route("/json").with(HelloJsonController.class, "index");
-	router.GET().route("/queries").with(HelloDbController.class, "multiGet");
-	router.GET().route("/db").with(HelloDbController.class, "singleGet");
-	router.GET().route("/fortunes").with(HelloFortuneController.class, "index");
+        router.GET().route("/plaintext").with(HelloPlaintextController.class, "index");
+        router.GET().route("/json").with(HelloJsonController.class, "index");
+        router.GET().route("/queries").with(HelloDbController.class, "multiGet");
+        router.GET().route("/db").with(HelloDbController.class, "singleGet");
+        router.GET().route("/fortunes").with(HelloFortuneController.class, "index");
         router.GET().route("/update").with(HelloDbController.class, "update");
         router.GET().route("/update").with(HelloDbController.class, "update");
 
 
+        // This route is only active when developing the app in dev mode
+        // e.g. when calling "mvn ninja:run".
+        if (ninjaProperties.isDev()) {
+            router.GET().route("/setupData").with(SetupController.class, "setupData");
+        }
+
     }
     }
-}
+}

+ 3 - 7
ninja/src/main/resources/conf/application.conf → ninja/src/main/java/conf/application.conf

@@ -17,7 +17,7 @@ application.name=ninja test application
 application.cookie.prefix=NINJA
 application.cookie.prefix=NINJA
 
 
 #ISO Language Code, optionally followed by a valid ISO Country Code. 
 #ISO Language Code, optionally followed by a valid ISO Country Code. 
-application.languages=en,de
+application.languages=en
 
 
 application.session.expire_time_in_seconds=3600
 application.session.expire_time_in_seconds=3600
 application.session.send_only_if_changed=true
 application.session.send_only_if_changed=true
@@ -32,13 +32,9 @@ ninja.migration.run=false
 
 
 %prod.ninja.jpa.persistence_unit_name = resin
 %prod.ninja.jpa.persistence_unit_name = resin
 
 
-#%dev.ninja.jpa.persistence_unit_name = mysql
-#%dev.db.connection.url=jdbc:mysql://localhost/hello_world
-#%dev.db.connection.username=benchmarkdbuser
-#%dev.db.connection.password=benchmarkdbpass
-
-## for testing and developing locally:
+## for eveloping locally:
 %dev.ninja.jpa.persistence_unit_name = h2
 %dev.ninja.jpa.persistence_unit_name = h2
+## we are using a database stored in a file (in tests it is an in memory db)
 %dev.db.connection.url=jdbc:h2:target/h2database
 %dev.db.connection.url=jdbc:h2:target/h2database
 %dev.db.connection.username=ra
 %dev.db.connection.username=ra
 %dev.db.connection.password=
 %dev.db.connection.password=

+ 0 - 0
ninja/src/main/resources/conf/messages.properties → ninja/src/main/java/conf/messages.properties


+ 78 - 0
ninja/src/main/java/controllers/HelloDbController.java

@@ -0,0 +1,78 @@
+package controllers;
+
+import dao.WorldDao;
+import model.World;
+
+import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
+
+import ninja.Result;
+import ninja.Results;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.google.inject.persist.Transactional;
+import ninja.jpa.UnitOfWork;
+import ninja.params.Param;
+
+@Singleton
+public class HelloDbController {
+
+    private static final int DB_ROWS = 10000;
+    private final Random random = ThreadLocalRandom.current();
+
+    @Inject
+    WorldDao worldDao;
+
+    @UnitOfWork
+    public Result singleGet() {
+        return Results.json().render(getRandomWorld());
+    }
+
+    @UnitOfWork
+    public Result multiGet(@Param("queries") Integer queries) {
+        if (queries == null || queries < 1) {
+            queries = 1;
+        }
+        if (queries > 500) {
+            queries = 500;
+        }
+
+        final World[] worlds = new World[queries];
+
+        for (int i = 0; i < queries; i++) {
+            worlds[i] = getRandomWorld();
+        }
+
+        return Results.json().render(worlds);
+    }
+
+    @Transactional
+    public Result update(@Param("queries") Integer queries) {
+        if (queries == null || queries < 1) {
+            queries = 1;
+        }
+        if (queries > 500) {
+            queries = 500;
+        }
+
+        final World[] worlds = new World[queries];
+
+        for (int i = 0; i < queries; i++) {
+            worlds[i] = getRandomWorld();
+        }
+
+        // now update stuff:
+        for (World world : worlds) {
+            world.randomNumber = random.nextInt();
+            worldDao.put(world);
+        }
+
+        return Results.json().render(worlds);
+    }
+
+    private World getRandomWorld() {
+        return worldDao.get(random.nextInt(DB_ROWS) + 1);
+    }
+
+}

+ 30 - 0
ninja/src/main/java/controllers/HelloFortuneController.java

@@ -0,0 +1,30 @@
+package controllers;
+
+import dao.FortuneDao;
+import model.Fortune;
+
+import java.util.Collections;
+import java.util.List;
+
+import ninja.Result;
+import ninja.Results;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import ninja.jpa.UnitOfWork;
+
+@Singleton
+public class HelloFortuneController {
+
+    @Inject
+    FortuneDao fortuneDao;
+
+    @UnitOfWork
+    public Result index() {
+        List<Fortune> fortunes = fortuneDao.getAll();
+        fortunes.add(new Fortune(0, "Additional fortune added at request time."));
+        Collections.sort(fortunes);
+
+        return Results.html().render("fortunes", fortunes);
+    }
+}

+ 1 - 1
ninja/src/main/java/hello/controllers/HelloJsonController.java → ninja/src/main/java/controllers/HelloJsonController.java

@@ -1,4 +1,4 @@
-package hello.controllers;
+package controllers;
 
 
 import ninja.Result;
 import ninja.Result;
 import ninja.Results;
 import ninja.Results;

+ 1 - 1
ninja/src/main/java/hello/controllers/HelloPlaintextController.java → ninja/src/main/java/controllers/HelloPlaintextController.java

@@ -1,4 +1,4 @@
-package hello.controllers;
+package controllers;
 
 
 import ninja.Result;
 import ninja.Result;
 import ninja.Results;
 import ninja.Results;

+ 35 - 0
ninja/src/main/java/controllers/SetupController.java

@@ -0,0 +1,35 @@
+package controllers;
+
+import dao.WorldDao;
+import model.World;
+
+import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
+
+import ninja.Result;
+import ninja.Results;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import dao.SetupDao;
+
+@Singleton
+public class SetupController {
+
+    @Inject
+    SetupDao setupDao;
+
+    public Result setupData() {
+        
+        setupDao.deleteAllData();
+        
+        setupDao.generateWorldsForTest();
+        setupDao.generateFortunesForTest();
+        
+        return Results.text().render("setup done");
+        
+    }
+    
+   
+
+}

+ 6 - 7
ninja/src/main/java/hello/dao/FortuneDao.java → ninja/src/main/java/dao/FortuneDao.java

@@ -1,6 +1,6 @@
-package hello.dao;
+package dao;
 
 
-import hello.model.Fortune;
+import model.Fortune;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -10,7 +10,6 @@ import javax.persistence.Query;
 import com.google.inject.Inject;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import com.google.inject.Singleton;
-import com.google.inject.persist.Transactional;
 
 
 @Singleton
 @Singleton
 public class FortuneDao {
 public class FortuneDao {
@@ -19,12 +18,12 @@ public class FortuneDao {
     Provider<EntityManager> entitiyManagerProvider;
     Provider<EntityManager> entitiyManagerProvider;
 
 
     public List<Fortune> getAll() {
     public List<Fortune> getAll() {
-	EntityManager entityManager = entitiyManagerProvider.get();
+        EntityManager entityManager = entitiyManagerProvider.get();
 
 
-	Query q = entityManager.createQuery("SELECT x FROM Fortune x");
-	List<Fortune> fortunes = q.getResultList();
+        Query q = entityManager.createQuery("SELECT x FROM Fortune x");
+        List<Fortune> fortunes = q.getResultList();
 
 
-	return fortunes;
+        return fortunes;
     }
     }
 
 
 }
 }

+ 29 - 25
ninja/src/test/java/hello/controllers/SetupDao.java → ninja/src/main/java/dao/SetupDao.java

@@ -1,21 +1,21 @@
-package hello.controllers;
+package dao;
 
 
-import hello.model.Fortune;
-
-import java.util.List;
+import model.Fortune;
 
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 
 
 import com.google.inject.Inject;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import com.google.inject.Singleton;
 import com.google.inject.persist.Transactional;
 import com.google.inject.persist.Transactional;
-import hello.model.World;
+import java.util.List;
+import javax.persistence.Query;
+import model.World;
 
 
 /**
 /**
- * This class is just for testing.
- * Has nothing to do with the TechEmpower test itself...
+ * This class is just for testing. Has nothing to do with the TechEmpower test
+ * itself...
+ *
  * @author ra
  * @author ra
  */
  */
 @Singleton
 @Singleton
@@ -24,44 +24,48 @@ public class SetupDao {
     @Inject
     @Inject
     Provider<EntityManager> entitiyManagerProvider;
     Provider<EntityManager> entitiyManagerProvider;
 
 
+    @Transactional
+    public void deleteAllData() {
+
+        entitiyManagerProvider.get().createQuery("DELETE FROM World");
+        entitiyManagerProvider.get().createQuery("DELETE FROM Fortune");
+
+    }
+
     @Transactional
     @Transactional
     public void generateWorldsForTest() {
     public void generateWorldsForTest() {
-	
+
         for (int i = 0; i < 10000; i++) {
         for (int i = 0; i < 10000; i++) {
-            
+
             World world = new World();
             World world = new World();
             world.randomNumber = i; // not really a random number. But we can test with that...
             world.randomNumber = i; // not really a random number. But we can test with that...
             entitiyManagerProvider.get().persist(world);
             entitiyManagerProvider.get().persist(world);
-            
-         }
-        
-        
+
+        }
+
     }
     }
-    
+
     @Transactional
     @Transactional
     public void generateFortunesForTest() {
     public void generateFortunesForTest() {
-	
 
 
         {
         {
-            
+
             Fortune fortune = new Fortune();
             Fortune fortune = new Fortune();
             // dummy message => just to make sure utf-8 works.
             // dummy message => just to make sure utf-8 works.
             fortune.message = "レームワークのベンチマーク";
             fortune.message = "レームワークのベンチマーク";
             entitiyManagerProvider.get().persist(fortune);
             entitiyManagerProvider.get().persist(fortune);
-            
+
         }
         }
-        
+
         {
         {
- 
+
             Fortune fortune = new Fortune();
             Fortune fortune = new Fortune();
             // dummy message => just to make sure utf-8 works.
             // dummy message => just to make sure utf-8 works.
             fortune.message = "<script>I want to be escaped</script>";
             fortune.message = "<script>I want to be escaped</script>";
             entitiyManagerProvider.get().persist(fortune);
             entitiyManagerProvider.get().persist(fortune);
-            
-        }   
-   
-        
-        
+
+        }
+
     }
     }
 
 
 }
 }

+ 7 - 8
ninja/src/main/java/hello/dao/WorldDao.java → ninja/src/main/java/dao/WorldDao.java

@@ -1,13 +1,12 @@
-package hello.dao;
+package dao;
 
 
-import hello.model.World;
+import model.World;
 
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManager;
 
 
 import com.google.inject.Inject;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import com.google.inject.Singleton;
-import com.google.inject.persist.Transactional;
 
 
 @Singleton
 @Singleton
 public class WorldDao {
 public class WorldDao {
@@ -16,12 +15,12 @@ public class WorldDao {
     Provider<EntityManager> entitiyManagerProvider;
     Provider<EntityManager> entitiyManagerProvider;
 
 
     public World get(int id) {
     public World get(int id) {
-	EntityManager entityManager = entitiyManagerProvider.get();
-	return entityManager.find(World.class, id);
+        EntityManager entityManager = entitiyManagerProvider.get();
+        return entityManager.find(World.class, id);
     }
     }
-    
+
     public void put(World world) {
     public void put(World world) {
-	EntityManager entityManager = entitiyManagerProvider.get();
-	entityManager.persist(world);
+        EntityManager entityManager = entitiyManagerProvider.get();
+        entityManager.persist(world);
     }
     }
 }
 }

+ 0 - 0
ninja/src/main/resources/ehcache.xml → ninja/src/main/java/ehcache.xml


+ 0 - 41
ninja/src/main/java/hello/controllers/DatabaseAccess.java

@@ -1,41 +0,0 @@
-package hello.controllers;
-
-import com.google.inject.Inject;
-import com.google.inject.persist.UnitOfWork;
-import ninja.Context;
-import ninja.Filter;
-import ninja.FilterChain;
-import ninja.Result;
-
-/**
- *
- * @author ra
- */
-public class DatabaseAccess implements Filter {
-    
-    @Inject
-    private UnitOfWork unitOfWork;
-
-    @Override
-    public Result filter(FilterChain filterChain, Context context) {
-        
-        Result result;
-                
-        try {
-            
-            unitOfWork.begin();
-          
-            result = filterChain.next(context);
-            
-        } finally {
-            
-            unitOfWork.end();
-            
-        }
-        
-        return result;
-     }
- 
-}
-
-

+ 0 - 86
ninja/src/main/java/hello/controllers/HelloDbController.java

@@ -1,86 +0,0 @@
-package hello.controllers;
-
-import hello.dao.WorldDao;
-import hello.model.World;
-
-import java.util.Random;
-import java.util.concurrent.ThreadLocalRandom;
-
-import ninja.Result;
-import ninja.Results;
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.google.inject.persist.Transactional;
-import ninja.FilterWith;
-import ninja.params.Param;
-
-@Singleton
-public class HelloDbController {
-
-    private static final int DB_ROWS = 10000;
-    private final Random random = ThreadLocalRandom.current();
-
-    @Inject
-    WorldDao worldDao;
-
-    @FilterWith(DatabaseAccess.class)
-    public Result singleGet() {
-	return Results.json().render(getRandomWorld());
-    }
-
-    // @Transactional is important here as it encapsulates all
-    // JPA calls in dependent methods inside one - and only one - 
-    // transaction. Otherwise WorldDao would open x new transactions what
-    // is of course slower than only having one encapsulating transaction.
-    @FilterWith(DatabaseAccess.class)
-    public Result multiGet(@Param("queries") Integer queries) {
-	if (queries == null || queries < 1) {
-	    queries = 1;
-	}
-	if (queries > 500) {
-	    queries = 500;
-	}
-
-	final World[] worlds = new World[queries];
-
-	for (int i = 0; i < queries; i++) {
-	    worlds[i] = getRandomWorld();
-	}
-
-	return Results.json().render(worlds);
-    }
-    
-    // @Transactional is important here as it encapsulates all
-    // JPA calls in dependent methods inside one - and only one - 
-    // transaction. Otherwise WorldDao would open x new transactions what
-    // is of course slower than only having one encapsulating transaction.
-    @FilterWith(DatabaseAccess.class)
-    public Result update(@Param("queries") Integer queries) {
-	if (queries == null || queries < 1) {
-	    queries = 1;
-	}
-	if (queries > 500) {
-	    queries = 500;
-	}
-
-	final World[] worlds = new World[queries];
-
-	for (int i = 0; i < queries; i++) {
-	    worlds[i] = getRandomWorld();
-	}
-        
-        // now update stuff:
-        for (World world : worlds) {
-            world.randomNumber = random.nextInt();
-            worldDao.put(world);
-        }
-
-	return Results.json().render(worlds);
-    }
-
-    private World getRandomWorld() {
-	return worldDao.get(random.nextInt(DB_ROWS) + 1);
-    }
-
-}

+ 0 - 28
ninja/src/main/java/hello/controllers/HelloFortuneController.java

@@ -1,28 +0,0 @@
-package hello.controllers;
-
-import hello.dao.FortuneDao;
-import hello.model.Fortune;
-
-import java.util.Collections;
-import java.util.List;
-
-import ninja.Result;
-import ninja.Results;
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-@Singleton
-public class HelloFortuneController {
-
-    @Inject
-    FortuneDao fortuneDao;
-
-    public Result index() {
-	List<Fortune> fortunes = fortuneDao.getAll();
-	fortunes.add(new Fortune(0, "Additional fortune added at request time."));
-	Collections.sort(fortunes);
-
-	return Results.html().render("fortunes", fortunes);
-    }
-}

+ 0 - 20
ninja/src/main/java/hello/views/HelloFortuneController/index.ftl.html

@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>Fortunes</title>
-</head>
-<body>
-	<table>
-		<tr>
-			<th>id</th>
-			<th>message</th>
-		</tr>
-		<#list fortunes as fortune>
-		<tr>
-			<td>${fortune.id}</td>
-			<td>${fortune.message}</td>
-		</tr>
-		</#list>
-	</table>
-</body>
-</html>

+ 0 - 0
ninja/src/main/resources/logback.xml → ninja/src/main/java/logback.xml


+ 7 - 6
ninja/src/main/java/hello/model/Fortune.java → ninja/src/main/java/model/Fortune.java

@@ -1,4 +1,4 @@
-package hello.model;
+package model;
 
 
 import javax.persistence.Entity;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GeneratedValue;
@@ -7,6 +7,7 @@ import javax.persistence.Id;
 
 
 @Entity
 @Entity
 public class Fortune implements Comparable<Fortune> {
 public class Fortune implements Comparable<Fortune> {
+
     @Id
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     public int id;
     public int id;
@@ -17,20 +18,20 @@ public class Fortune implements Comparable<Fortune> {
     }
     }
 
 
     public Fortune(int id, String message) {
     public Fortune(int id, String message) {
-	this.id = id;
-	this.message = message;
+        this.id = id;
+        this.message = message;
     }
     }
 
 
     public int getId() {
     public int getId() {
-	return this.id;
+        return this.id;
     }
     }
 
 
     public String getMessage() {
     public String getMessage() {
-	return this.message;
+        return this.message;
     }
     }
 
 
     @Override
     @Override
     public int compareTo(Fortune other) {
     public int compareTo(Fortune other) {
-	return message.compareTo(other.message);
+        return message.compareTo(other.message);
     }
     }
 }
 }

+ 2 - 1
ninja/src/main/java/hello/model/World.java → ninja/src/main/java/model/World.java

@@ -1,4 +1,4 @@
-package hello.model;
+package model;
 
 
 import javax.persistence.Entity;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GeneratedValue;
@@ -7,6 +7,7 @@ import javax.persistence.Id;
 
 
 @Entity
 @Entity
 public class World {
 public class World {
+
     @Id
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     @GeneratedValue(strategy = GenerationType.AUTO)
     public int id;
     public int id;

+ 20 - 0
ninja/src/main/java/views/HelloFortuneController/index.ftl.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Fortunes</title>
+    </head>
+    <body>
+        <table>
+            <tr>
+                <th>id</th>
+                <th>message</th>
+            </tr>
+            <#list fortunes as fortune>
+            <tr>
+                <td>${fortune.id}</td>
+                <td>${fortune.message}</td>
+            </tr>
+            </#list>
+        </table>
+    </body>
+</html>

+ 0 - 70
ninja/src/main/resources/META-INF/persistence.xml

@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
-	version="2.0">
-    
-        <!-- Database for tests and local dev mode... -->
-        <persistence-unit name="h2" transaction-type="RESOURCE_LOCAL">
-            <provider>org.hibernate.ejb.HibernatePersistence</provider>
-            <properties>
-                <property name="javax.persistence.provider" value="org.hibernate.ejb.HibernatePersistence" />
-                <property name="hibernate.connection.driver_class" value="org.h2.Driver" />
-                <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
-                <!-- you may want to enable the ddl if you do not use migrations. -->
-                <property name="hibernate.hbm2ddl.auto" value="create" />
-                <property name="hibernate.show_sql" value="false" />
-                <property name="hibernate.format_sql" value="false" />
-
-                <!-- Connection Pooling settings -->
-                <property name="hibernate.connection.provider_class"
-                          value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
-
-                <property name="hibernate.c3p0.max_size" value="100" />
-                <property name="hibernate.c3p0.min_size" value="0" />
-                <property name="hibernate.c3p0.acquire_increment" value="1" />
-                <property name="hibernate.c3p0.idle_test_period" value="300" />
-                <property name="hibernate.c3p0.max_statements" value="0" />
-                <property name="hibernate.c3p0.timeout" value="100" />     
-            </properties>
-        </persistence-unit>
-
-	<!-- Direct mysql -->
-	<persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL">
-		<provider>org.hibernate.ejb.HibernatePersistence</provider>
-
-		<properties>
-			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
-			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
-
-			<property name="hibernate.show_sql" value="false" />
-			<property name="hibernate.format_sql" value="false" />
-
-			<!-- Connection Pooling settings -->
-			<property name="hibernate.connection.provider_class"
-				value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
-
-			<property name="hibernate.c3p0.max_size" value="100" />
-			<property name="hibernate.c3p0.min_size" value="0" />
-			<property name="hibernate.c3p0.acquire_increment" value="1" />
-			<property name="hibernate.c3p0.idle_test_period" value="300" />
-			<property name="hibernate.c3p0.max_statements" value="0" />
-			<property name="hibernate.c3p0.timeout" value="100" />
-		</properties>
-	</persistence-unit>
-
-	<!-- Resin datasource -->
-	<persistence-unit name="resin" transaction-type="RESOURCE_LOCAL">
-		<provider>org.hibernate.ejb.HibernatePersistence</provider>
-		<jta-data-source>java:comp/env/jdbc/hello_world</jta-data-source>
-
-		<properties>
-			<property name="hibernate.connection.datasource" value="java:comp/env/jdbc/hello_world" />
-			<property name="hibernate.transaction.factory_class"
-				value="org.hibernate.transaction.JTATransactionFactory" />
-			<property name="hibernate.transaction.manager_lookup_class"
-				value="org.hibernate.transaction.ResinTransactionManagerLookup" />
-		</properties>
-	</persistence-unit>
-</persistence>

+ 12 - 20
ninja/src/test/java/hello/controllers/HelloDbControllerTest.java → ninja/src/test/java/controllers/HelloDbControllerTest.java

@@ -1,29 +1,21 @@
-/*
- * 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 controllers;
 
 
-package hello.controllers;
-
-import hello.model.World;
+import dao.SetupDao;
+import model.World;
 import ninja.NinjaDocTester;
 import ninja.NinjaDocTester;
 import org.doctester.testbrowser.Request;
 import org.doctester.testbrowser.Request;
 import org.doctester.testbrowser.Response;
 import org.doctester.testbrowser.Response;
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.CoreMatchers;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
 import org.junit.Test;
 import org.junit.Test;
 import static org.junit.Assert.*;
 import static org.junit.Assert.*;
 import org.junit.Before;
 import org.junit.Before;
-import org.junit.BeforeClass;
 
 
-/**
- *
- * @author ra
- */
 public class HelloDbControllerTest extends NinjaDocTester {
 public class HelloDbControllerTest extends NinjaDocTester {
             
             
-    String SINGLE_GET = "/db";
-    String QUERIES = "/queries";
+    String URL_DB = "/db";
+    String URL_QUERIES = "/queries";
     String URL_UPDATE = "/update";
     String URL_UPDATE = "/update";
     
     
     @Before
     @Before
@@ -37,11 +29,11 @@ public class HelloDbControllerTest extends NinjaDocTester {
         Response response = makeRequest(
         Response response = makeRequest(
                 Request
                 Request
                         .GET()
                         .GET()
-                        .url(testServerUrl().path(SINGLE_GET))
+                        .url(testServerUrl().path(URL_DB))
                         .contentTypeApplicationJson());
                         .contentTypeApplicationJson());
         
         
         // Just make sure that we get back a World Json.
         // Just make sure that we get back a World Json.
-        assertThat(response.payloadAs(World.class), CoreMatchers.notNullValue());      
+        assertThat(response.payloadAs(World.class), notNullValue());      
                 
                 
     }
     }
     
     
@@ -62,12 +54,12 @@ public class HelloDbControllerTest extends NinjaDocTester {
                 .GET()
                 .GET()
                 .url(
                 .url(
                     testServerUrl()
                     testServerUrl()
-                    .path(QUERIES)
+                    .path(URL_QUERIES)
                     .addQueryParameter("queries", numberOfQueries + ""))
                     .addQueryParameter("queries", numberOfQueries + ""))
                 .contentTypeApplicationJson());
                 .contentTypeApplicationJson());
         
         
         // Just make sure that we get back an array
         // Just make sure that we get back an array
-        assertThat(response.payloadAs(World[].class).length, CoreMatchers.is(numberOfQueries)); 
+        assertThat(response.payloadAs(World[].class).length, is(numberOfQueries)); 
     }
     }
     
     
     @Test
     @Test
@@ -91,7 +83,7 @@ public class HelloDbControllerTest extends NinjaDocTester {
                     .addQueryParameter("queries", numberOfQueries + ""))
                     .addQueryParameter("queries", numberOfQueries + ""))
                 .contentTypeApplicationJson());
                 .contentTypeApplicationJson());
         
         
-        assertThat(response.payloadAs(World[].class).length, CoreMatchers.is(numberOfQueries)); 
+        assertThat(response.payloadAs(World[].class).length, is(numberOfQueries)); 
         
         
     }
     }
 
 

+ 5 - 14
ninja/src/test/java/hello/controllers/HelloFortuneControllerTest.java → ninja/src/test/java/controllers/HelloFortuneControllerTest.java

@@ -1,25 +1,16 @@
-/*
- * 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 controllers;
 
 
-package hello.controllers;
-
-import hello.model.Fortune;
+import dao.SetupDao;
+import model.Fortune;
 import ninja.NinjaDocTester;
 import ninja.NinjaDocTester;
 import org.doctester.testbrowser.Request;
 import org.doctester.testbrowser.Request;
 import org.doctester.testbrowser.Response;
 import org.doctester.testbrowser.Response;
 import org.junit.Test;
 import org.junit.Test;
 import static org.junit.Assert.*;
 import static org.junit.Assert.*;
 
 
-/**
- *
- * @author ra
- */
 public class HelloFortuneControllerTest extends NinjaDocTester {
 public class HelloFortuneControllerTest extends NinjaDocTester {
 
 
-    String URL = "/fortunes";
+    String URL_FORTUNES = "/fortunes";
     
     
     @Test
     @Test
     public void testSomeMethod() {
     public void testSomeMethod() {
@@ -27,7 +18,7 @@ public class HelloFortuneControllerTest extends NinjaDocTester {
         getInjector().getInstance(SetupDao.class).generateFortunesForTest();
         getInjector().getInstance(SetupDao.class).generateFortunesForTest();
 
 
         Response response 
         Response response 
-                = makeRequest(Request.GET().url(testServerUrl().path(URL)));
+                = makeRequest(Request.GET().url(testServerUrl().path(URL_FORTUNES)));
         
         
         System.out.println(" " + response.payload);
         System.out.println(" " + response.payload);
         
         

+ 6 - 14
ninja/src/test/java/hello/controllers/HelloJsonControllerTest.java → ninja/src/test/java/controllers/HelloJsonControllerTest.java

@@ -1,25 +1,17 @@
-/*
- * 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 hello.controllers;
+package controllers;
 
 
 import ninja.NinjaDocTester;
 import ninja.NinjaDocTester;
 import org.doctester.testbrowser.Request;
 import org.doctester.testbrowser.Request;
 import org.doctester.testbrowser.Response;
 import org.doctester.testbrowser.Response;
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.CoreMatchers;
+import static org.hamcrest.CoreMatchers.is;
 import org.junit.Test;
 import org.junit.Test;
 import static org.junit.Assert.*;
 import static org.junit.Assert.*;
 
 
-/**
- *
- * @author ra
- */
+
 public class HelloJsonControllerTest extends NinjaDocTester {
 public class HelloJsonControllerTest extends NinjaDocTester {
     
     
-    String URL = "/json";
+    String URL_JSON = "/json";
 
 
     @Test
     @Test
     public void testHelloJsonController() {
     public void testHelloJsonController() {
@@ -27,12 +19,12 @@ public class HelloJsonControllerTest extends NinjaDocTester {
         Response response = makeRequest(
         Response response = makeRequest(
             Request
             Request
                 .GET()
                 .GET()
-                .url(testServerUrl().path(URL))
+                .url(testServerUrl().path(URL_JSON))
                 .contentTypeApplicationJson());
                 .contentTypeApplicationJson());
         
         
         assertThat(
         assertThat(
             response.payloadAs(Message.class).message, 
             response.payloadAs(Message.class).message, 
-            CoreMatchers.is("Hello, world"));
+            is("Hello, world"));
         
         
     }
     }
     
     

+ 5 - 14
ninja/src/test/java/hello/controllers/HelloPlaintextControllerTest.java → ninja/src/test/java/controllers/HelloPlaintextControllerTest.java

@@ -1,36 +1,27 @@
- /*
- * 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 hello.controllers;
+package controllers;
 
 
 import ninja.NinjaDocTester;
 import ninja.NinjaDocTester;
 import org.doctester.testbrowser.Request;
 import org.doctester.testbrowser.Request;
 import org.doctester.testbrowser.Response;
 import org.doctester.testbrowser.Response;
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.CoreMatchers;
+import static org.hamcrest.CoreMatchers.is;
 import org.junit.Test;
 import org.junit.Test;
 import static org.junit.Assert.*;
 import static org.junit.Assert.*;
 
 
-/**
- *
- * @author ra
- */
 public class HelloPlaintextControllerTest extends NinjaDocTester {
 public class HelloPlaintextControllerTest extends NinjaDocTester {
     
     
-    String URL = "/plaintext";
+    String URL_PLAINTEXT = "/plaintext";
     
     
     @Test
     @Test
     public void helloPlaintextControllerTest() {
     public void helloPlaintextControllerTest() {
         
         
         Response response = makeRequest(
         Response response = makeRequest(
-            Request.GET().url(testServerUrl().path(URL)));
+            Request.GET().url(testServerUrl().path(URL_PLAINTEXT)));
         
         
         assertThat(response.payload, CoreMatchers.is("Hello, world!"));
         assertThat(response.payload, CoreMatchers.is("Hello, world!"));
         assertThat(
         assertThat(
             response.headers.get("Content-Type"), 
             response.headers.get("Content-Type"), 
-            CoreMatchers.is("text/plain; charset=UTF-8"));
+            is("text/plain; charset=UTF-8"));
         
         
    
    
     }
     }