Repository: incubator-taverna-server Updated Branches: refs/heads/master 586150339 -> 419a7d460
A more consistent way of handling the interfacing of JDO queries. Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/commit/0f0ea919 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/tree/0f0ea919 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/diff/0f0ea919 Branch: refs/heads/master Commit: 0f0ea919a8acd6655814d71e48b68ed9fcf10db2 Parents: 5861503 Author: Donal Fellows <[email protected]> Authored: Thu Sep 8 15:33:46 2016 +0100 Committer: Donal Fellows <[email protected]> Committed: Thu Sep 8 15:33:46 2016 +0100 ---------------------------------------------------------------------- .../taverna/server/master/ManagementState.java | 4 +-- .../master/notification/atom/EventDAO.java | 29 ++++++++++++++------ .../master/usage/UsageRecordRecorder.java | 10 ++++--- .../taverna/server/master/utils/JDOSupport.java | 6 ++-- .../server/master/worker/RunDatabaseDAO.java | 18 +++++++----- 5 files changed, 43 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/0f0ea919/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java index 31d5356..c65a334 100644 --- a/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java +++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java @@ -110,9 +110,9 @@ class ManagementState extends JDOSupport<WebappState> implements private static final int KEY = 42; // whatever private WebappState get() { - Query q = query("id == " + KEY); + Query<WebappState> q = query("id == " + KEY); q.setUnique(true); - return (WebappState) q.execute(); + return q.executeUnique(); } private boolean loadedState; http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/0f0ea919/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java index aaab2a1..8bec456 100644 --- a/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java +++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java @@ -83,9 +83,7 @@ public class EventDAO extends JDOSupport<Event> implements MessageDispatcher { @Nonnull @WithinSingleTransaction public List<Event> getEvents(@Nonnull UsernamePrincipal user) { - @SuppressWarnings("unchecked") - List<String> ids = (List<String>) namedQuery("eventsForUser").execute( - user.getName()); + List<String> ids = eventsForUser(user); if (log.isDebugEnabled()) log.debug("found " + ids.size() + " events for user " + user); @@ -97,6 +95,12 @@ public class EventDAO extends JDOSupport<Event> implements MessageDispatcher { return result; } + @SuppressWarnings("unchecked") + private List<String> eventsForUser(UsernamePrincipal user) { + return (List<String>) namedQuery("eventsForUser").execute( + user.getName()); + } + /** * Get a particular event. * @@ -109,9 +113,7 @@ public class EventDAO extends JDOSupport<Event> implements MessageDispatcher { @Nonnull @WithinSingleTransaction public Event getEvent(@Nonnull UsernamePrincipal user, @Nonnull String id) { - @SuppressWarnings("unchecked") - List<String> ids = (List<String>) namedQuery("eventForUserAndId") - .execute(user.getName(), id); + List<String> ids = eventsForUserAndId(user, id); if (log.isDebugEnabled()) log.debug("found " + ids.size() + " events for user " + user + " with id = " + id); @@ -121,6 +123,12 @@ public class EventDAO extends JDOSupport<Event> implements MessageDispatcher { return detach(getById(ids.get(0))); } + @SuppressWarnings("unchecked") + private List<String> eventsForUserAndId(UsernamePrincipal user, String id) { + return (List<String>) namedQuery("eventForUserAndId").execute( + user.getName(), id); + } + /** * Delete a particular event. * @@ -140,9 +148,7 @@ public class EventDAO extends JDOSupport<Event> implements MessageDispatcher { Date death = new DateTime().plusDays(-expiryAgeDays).toDate(); death = new Timestamp(death.getTime()); // UGLY SQL HACK - @SuppressWarnings("unchecked") - List<String> ids = (List<String>) namedQuery("eventsFromBefore") - .execute(death); + List<String> ids = eventsFromBefore(death); if (log.isDebugEnabled() && !ids.isEmpty()) log.debug("found " + ids.size() + " events to be squelched (older than " + death + ")"); @@ -151,6 +157,11 @@ public class EventDAO extends JDOSupport<Event> implements MessageDispatcher { delete(getById(id)); } + @SuppressWarnings("unchecked") + private List<String> eventsFromBefore(Date death) { + return (List<String>) namedQuery("eventsFromBefore").execute(death); + } + @Override public boolean isAvailable() { return true; http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/0f0ea919/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java index dc9289b..d8989b5 100644 --- a/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java +++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java @@ -24,7 +24,6 @@ import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import javax.annotation.PreDestroy; @@ -155,9 +154,7 @@ public class UsageRecordRecorder extends JDOSupport<UsageRecord> { @WithinSingleTransaction public List<JobUsageRecord> getUsageRecords() { - @SuppressWarnings("unchecked") - Collection<String> urs = (Collection<String>) namedQuery("allByDate") - .execute(); + List<String> urs = allByDate(); List<JobUsageRecord> result = new ArrayList<>(); for (String ur : urs) try { @@ -168,6 +165,11 @@ public class UsageRecordRecorder extends JDOSupport<UsageRecord> { return result; } + @SuppressWarnings("unchecked") + private List<String> allByDate() { + return (List<String>) namedQuery("allByDate").execute(); + } + @PreDestroy public void close() { if (writer != null) http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/0f0ea919/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java index 29a6c53..96f6a11 100644 --- a/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java +++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java @@ -99,13 +99,14 @@ public abstract class JDOSupport<T> { * @return The query, which should be executed to retrieve the results. */ @Nonnull - protected Query query(@Nonnull String filter) { + protected Query<T> query(@Nonnull String filter) { return pm().newQuery(contextClass, filter); } /** * Get an instance of a named query attached to the context class (as an - * annotation). + * annotation). Note that the result is a <i>raw</i> {@link Query} because + * not all queries return instances of the context class. * * @param name * The name of the query. @@ -113,6 +114,7 @@ public abstract class JDOSupport<T> { * @see javax.jdo.annotations.Query */ @Nonnull + @SuppressWarnings("rawtypes") protected Query namedQuery(@Nonnull String name) { return pm().newNamedQuery(contextClass, name); } http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/0f0ea919/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java index 18f0e49..1c75d22 100644 --- a/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java +++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java @@ -64,7 +64,7 @@ public class RunDatabaseDAO extends JDOSupport<RunConnection> { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @SuppressWarnings("unchecked") - private List<String> nameRuns() { + private List<String> names() { if (log.isDebugEnabled()) log.debug("fetching all run names"); return (List<String>) namedQuery("names").execute(); @@ -77,16 +77,20 @@ public class RunDatabaseDAO extends JDOSupport<RunConnection> { public int countRuns() { if (log.isDebugEnabled()) log.debug("counting the number of runs"); + return count(); + } + + private Integer count() { return (Integer) namedQuery("count").execute(); } @SuppressWarnings("unchecked") - private List<String> expiredRuns() { + private List<String> timedout() { return (List<String>) namedQuery("timedout").execute(); } @SuppressWarnings("unchecked") - private List<String> unterminatedRuns() { + private List<String> unterminated() { return (List<String>) namedQuery("unterminated").execute(); } @@ -122,7 +126,7 @@ public class RunDatabaseDAO extends JDOSupport<RunConnection> { private List<RunConnection> allRuns() { try { List<RunConnection> rcs = new ArrayList<>(); - List<String> names = nameRuns(); + List<String> names = names(); for (String id : names) { try { if (id != null) @@ -171,7 +175,7 @@ public class RunDatabaseDAO extends JDOSupport<RunConnection> { @WithinSingleTransaction public Map<String, TavernaRun> listRuns(UsernamePrincipal user, Policy p) { Map<String, TavernaRun> result = new HashMap<>(); - for (String id : nameRuns()) + for (String id : names()) try { RemoteRunDelegate rrd = pickRun(id).fromDBform(facade); if (p.permitAccess(user, rrd)) @@ -264,7 +268,7 @@ public class RunDatabaseDAO extends JDOSupport<RunConnection> { public List<String> doClean() { if (log.isDebugEnabled()) log.debug("deleting runs that timed out before " + new Date()); - List<String> toDelete = expiredRuns(); + List<String> toDelete = timedout(); if (log.isDebugEnabled()) log.debug("found " + toDelete.size() + " runs to delete"); for (String id : toDelete) { @@ -290,7 +294,7 @@ public class RunDatabaseDAO extends JDOSupport<RunConnection> { @WithinSingleTransaction public List<RemoteRunDelegate> getPotentiallyNotifiable() { List<RemoteRunDelegate> toNotify = new ArrayList<>(); - for (String id : unterminatedRuns()) + for (String id : unterminated()) try { RunConnection rc = getById(id); toNotify.add(rc.fromDBform(facade));
