Now working with both hibernate and eclipselink
[utils] / security / impl / src / main / java / org / wamblee / security / authorization / jpa / JpaAuthorizationService.java
index e1b71d7dd177c8a940f8c9119630294871dcfb50..57d29636c06cb261cb4d2e5e175b7706a37d4add 100644 (file)
@@ -100,16 +100,17 @@ public class JpaAuthorizationService implements AuthorizationService {
      */
     private void initialize() {
         if (service == null) {
-            refreshByReload();
+            service = refreshByReload();
         }
     }
 
-    private void refreshByReload() {
+    private AuthorizationService refreshByReload() {
+        AuthorizationService service; 
         try {
             service = entityManager.createNamedQuery(
                 AbstractAuthorizationService.QUERY_FIND_BY_NAME,
                 AbstractAuthorizationService.class).setParameter(
-                    AbstractAuthorizationService.NAME_PARAM, name).getSingleResult();
+                    DefaultAuthorizationService.NAME_PARAM, name).getSingleResult();
             service.setUserAccessor(userAccessor);
         } catch (NonUniqueResultException e) {
             throw new IllegalArgumentException(
@@ -118,6 +119,7 @@ public class JpaAuthorizationService implements AuthorizationService {
             service = new DefaultAuthorizationService(userAccessor, name);
             entityManager.persist(service);
         }
+        return service;
     }
 
     /*
@@ -170,7 +172,7 @@ public class JpaAuthorizationService implements AuthorizationService {
         initialize();
         refresh();
         service.appendRule(aRule);
-        save();
+        save(); // service might still be detached as service is cached. 
     }
 
     /*
@@ -183,7 +185,7 @@ public class JpaAuthorizationService implements AuthorizationService {
         initialize();
         refresh();
         service.removeRule(aIndex);
-        save();
+        save(); // service might still be detached as service is cached. 
     }
 
     /*
@@ -197,7 +199,7 @@ public class JpaAuthorizationService implements AuthorizationService {
         initialize();
         refresh();
         service.insertRuleAfter(aIndex, aRule);
-        save();
+        save(); // service might still be detached as service is cached.
     }
 
     /**
@@ -207,7 +209,7 @@ public class JpaAuthorizationService implements AuthorizationService {
         long time = System.currentTimeMillis();
 
         if ((time - lastRefreshTime) > refreshInterval) {
-            refreshByReload();
+            service = refreshByReload();
             lastRefreshTime = time;
         }
     }