[java-opensaml COMMIT] in /trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl: JPAStorageRecord.java...

noreply at shibboleth.net noreply at shibboleth.net
Wed Oct 14 01:27:38 EDT 2015


Author: dfisher
Date: Wed Oct 14 01:27:38 2015
New Revision: 4349

URL: http://svn.shibboleth.net/view/java-opensaml?rev=4349&view=rev
Log:
OSJ-133 - inefficient JPAStorage cleanup.

Refactor deleteContextImpl to use a delete query.
Add new method that deletes by expiration for the timer task.
Refactor updateContextExpiration to use an update query.

Modified:
    trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java
    trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java

Modified: trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java?rev=4349&r1=4348&r2=4349&view=diff
==============================================================================
--- trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java	(original)
+++ trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java	Wed Oct 14 01:27:38 2015
@@ -47,8 +47,15 @@
             query = "SELECT distinct r.context FROM JPAStorageRecord r"),
     @NamedQuery(name = "JPAStorageRecord.findByContext",
             query = "SELECT r FROM JPAStorageRecord r WHERE r.context = :context"),
-    @NamedQuery(name = "JPAStorageRecord.findActiveByContext",
-            query = "SELECT r FROM JPAStorageRecord r WHERE r.context = :context AND r.expiration >= :now")})
+    @NamedQuery(name = "JPAStorageRecord.updateExpirationByContext",
+            query =
+              "UPDATE JPAStorageRecord r SET r.expiration = :exp WHERE r.context = :context AND r.expiration >= :now"),
+    @NamedQuery(name = "JPAStorageRecord.deleteByContext",
+            query = "DELETE FROM JPAStorageRecord r WHERE r.context = :context"),
+    @NamedQuery(name = "JPAStorageRecord.deleteByContextAndExpiration",
+            query = "DELETE FROM JPAStorageRecord r WHERE r.context = :context AND r.expiration <= :exp"),
+    @NamedQuery(name = "JPAStorageRecord.deleteByExpiration",
+            query = "DELETE FROM JPAStorageRecord r WHERE r.expiration <= :exp")})
 @IdClass(JPAStorageRecord.RecordId.class)
 public class JPAStorageRecord extends MutableStorageRecord {
 

Modified: trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java?rev=4349&r1=4348&r2=4349&view=diff
==============================================================================
--- trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java	(original)
+++ trunk/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java	Wed Oct 14 01:27:38 2015
@@ -581,19 +581,14 @@
                     manager = entityManagerFactory.createEntityManager();
                     transaction = manager.getTransaction();
                     transaction.begin();
-                    final Query queryResults =
-                            manager.createNamedQuery("JPAStorageRecord.findActiveByContext", JPAStorageRecord.class);
-                    queryResults.setLockMode(LockModeType.PESSIMISTIC_WRITE);
+                    // cannot set lock mode on a non-select query
+                    final Query queryResults = manager.createNamedQuery("JPAStorageRecord.updateExpirationByContext");
                     queryResults.setParameter("context", context);
                     queryResults.setParameter("now", System.currentTimeMillis());
-                    final List<JPAStorageRecord> entities = queryResults.getResultList();
-                    if (!entities.isEmpty()) {
-                        for (final JPAStorageRecord entity : entities) {
-                            entity.setExpiration(expiration);
-                        }
-                        transaction.commit();
-                        log.debug("Updated expiration of valid records in context '{}' to '{}'", context, expiration);
-                    }
+                    queryResults.setParameter("exp", expiration);
+                    final int count = queryResults.executeUpdate();
+                    transaction.commit();
+                    log.debug("Updated expiration of {} record(s) in context '{}' to '{}'", count, context, expiration);
                     return;
                 } catch (final RollbackException e) {
                     lastThrown = e;
@@ -666,23 +661,18 @@
                     manager = entityManagerFactory.createEntityManager();
                     transaction = manager.getTransaction();
                     transaction.begin();
-                    final Query queryResults =
-                            manager.createNamedQuery("JPAStorageRecord.findByContext", JPAStorageRecord.class);
+                    // cannot set lock mode on a non-select query
+                    Query queryResults;

[... 128 lines stripped ...]


More information about the commits mailing list