[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