Browse Source

Added UnitOfWork instead of @Transactional
to ninja-standalone.

reyez 11 years ago
parent
commit
11fc9ac6c4

+ 6 - 0
ninja-standalone/pom.xml

@@ -74,6 +74,12 @@
                     <warName>ninja</warName>
                     <warName>ninja</warName>
                 </configuration>
                 </configuration>
             </plugin>
             </plugin>
+            
+            <plugin>
+                <groupId>org.ninjaframework</groupId>
+                <artifactId>ninja-maven-plugin</artifactId>
+                <version>${ninja.version}</version>
+            </plugin>
 
 
 			<plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<groupId>org.apache.maven.plugins</groupId>

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

@@ -0,0 +1,41 @@
+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;
+     }
+ 
+}
+
+

+ 3 - 2
ninja-standalone/src/main/java/hello/controllers/HelloDbController.java

@@ -12,6 +12,7 @@ import ninja.Results;
 import com.google.inject.Inject;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.google.inject.Singleton;
 import com.google.inject.persist.Transactional;
 import com.google.inject.persist.Transactional;
+import ninja.FilterWith;
 import ninja.params.Param;
 import ninja.params.Param;
 
 
 @Singleton
 @Singleton
@@ -32,7 +33,7 @@ public class HelloDbController {
     // JPA calls in dependent methods inside one - and only one - 
     // JPA calls in dependent methods inside one - and only one - 
     // transaction. Otherwise WorldDao would open x new transactions what
     // transaction. Otherwise WorldDao would open x new transactions what
     // is of course slower than only having one encapsulating transaction.
     // is of course slower than only having one encapsulating transaction.
-    @Transactional
+    @FilterWith(DatabaseAccess.class)
     public Result multiGet(@Param("queries") Integer queries) {
     public Result multiGet(@Param("queries") Integer queries) {
 	if (queries == null || queries < 1) {
 	if (queries == null || queries < 1) {
 	    queries = 1;
 	    queries = 1;
@@ -54,7 +55,7 @@ public class HelloDbController {
     // JPA calls in dependent methods inside one - and only one - 
     // JPA calls in dependent methods inside one - and only one - 
     // transaction. Otherwise WorldDao would open x new transactions what
     // transaction. Otherwise WorldDao would open x new transactions what
     // is of course slower than only having one encapsulating transaction.
     // is of course slower than only having one encapsulating transaction.
-    @Transactional
+    @FilterWith(DatabaseAccess.class)
     public Result update(@Param("queries") Integer queries) {
     public Result update(@Param("queries") Integer queries) {
 	if (queries == null || queries < 1) {
 	if (queries == null || queries < 1) {
 	    queries = 1;
 	    queries = 1;

+ 0 - 2
ninja-standalone/src/main/java/hello/dao/WorldDao.java

@@ -15,13 +15,11 @@ public class WorldDao {
     @Inject
     @Inject
     Provider<EntityManager> entitiyManagerProvider;
     Provider<EntityManager> entitiyManagerProvider;
 
 
-    @Transactional
     public World get(int id) {
     public World get(int id) {
 	EntityManager entityManager = entitiyManagerProvider.get();
 	EntityManager entityManager = entitiyManagerProvider.get();
 	return entityManager.find(World.class, id);
 	return entityManager.find(World.class, id);
     }
     }
     
     
-    @Transactional
     public void put(World world) {
     public void put(World world) {
 	EntityManager entityManager = entitiyManagerProvider.get();
 	EntityManager entityManager = entitiyManagerProvider.get();
 	entityManager.persist(world);
 	entityManager.persist(world);