From be6db080fd240bbff1bc928e78f27e45cc4bc995 Mon Sep 17 00:00:00 2001 From: Athou Date: Thu, 6 Jun 2013 09:54:17 +0200 Subject: [PATCH] hibernate tweaks --- .../backend/dao/FeedEntryStatusDAO.java | 8 ++--- .../com/commafeed/backend/dao/GenericDAO.java | 34 ++++--------------- .../backend/feeds/FeedRefreshTaskGiver.java | 2 +- .../commafeed/backend/feeds/OPMLImporter.java | 2 +- .../pubsubhubbub/SubscriptionHandler.java | 2 +- .../backend/services/FeedEntryService.java | 4 +-- .../backend/services/FeedService.java | 2 +- .../services/FeedSubscriptionService.java | 2 +- .../backend/services/UserService.java | 4 +-- .../pages/NextUnreadRedirectPage.java | 2 +- .../pages/PasswordRecoveryCallbackPage.java | 2 +- .../frontend/pages/PasswordRecoveryPage.java | 2 +- .../frontend/rest/resources/AdminREST.java | 4 +-- .../frontend/rest/resources/CategoryREST.java | 14 ++++---- .../frontend/rest/resources/FeedREST.java | 4 +-- .../resources/PubSubHubbubCallbackREST.java | 2 +- .../frontend/rest/resources/UserREST.java | 2 +- src/main/resources/META-INF/persistence.xml | 4 +++ 18 files changed, 40 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index 4f792a89..e7c36be3 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -269,26 +269,26 @@ public class FeedEntryStatusDAO extends GenericDAO { public void markFeedEntries(User user, Feed feed, Date olderThan) { List statuses = findByFeed(feed, user, true, ReadingOrder.desc, false); - update(markList(statuses, olderThan)); + saveOrUpdate(markList(statuses, olderThan)); } public void markCategoryEntries(User user, List categories, Date olderThan) { List statuses = findByCategories(categories, user, true, ReadingOrder.desc, false); - update(markList(statuses, olderThan)); + saveOrUpdate(markList(statuses, olderThan)); } public void markStarredEntries(User user, Date olderThan) { List statuses = findStarred(user, ReadingOrder.desc, false); - update(markList(statuses, olderThan)); + saveOrUpdate(markList(statuses, olderThan)); } public void markAllEntries(User user, Date olderThan) { List statuses = findAll(user, true, ReadingOrder.desc, false); - update(markList(statuses, olderThan)); + saveOrUpdate(markList(statuses, olderThan)); } private List markList(List statuses, diff --git a/src/main/java/com/commafeed/backend/dao/GenericDAO.java b/src/main/java/com/commafeed/backend/dao/GenericDAO.java index 0894e90d..49600e2f 100644 --- a/src/main/java/com/commafeed/backend/dao/GenericDAO.java +++ b/src/main/java/com/commafeed/backend/dao/GenericDAO.java @@ -34,44 +34,24 @@ public abstract class GenericDAO { builder = em.getCriteriaBuilder(); } - public void save(T object) { - em.persist(object); - } - - public void save(Collection objects) { - for (Object object : objects) { - em.persist(object); - } - } - - public void update(Collection objects) { - for (Object object : objects) { - em.merge(object); - } - } - - public void update(T... objects) { - update(Arrays.asList(objects)); - } - public void saveOrUpdate(Collection models) { + int i = 0; for (AbstractModel model : models) { if (model.getId() == null) { em.persist(model); } else { em.merge(model); } + + if (i % 20 == 0) { + em.flush(); + } + i++; } } public void saveOrUpdate(AbstractModel... models) { - for (AbstractModel model : models) { - if (model.getId() == null) { - em.persist(model); - } else { - em.merge(model); - } - } + saveOrUpdate(Arrays.asList(models)); } public void delete(T object) { diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java index a91102a8..fa04a2d0 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java @@ -94,7 +94,7 @@ public class FeedRefreshTaskGiver { map.put(f.getId(), f); } - feedDAO.update(map.values()); + feedDAO.saveOrUpdate(map.values()); } public void giveBack(Feed feed) { diff --git a/src/main/java/com/commafeed/backend/feeds/OPMLImporter.java b/src/main/java/com/commafeed/backend/feeds/OPMLImporter.java index d0e8c7dc..ab392971 100644 --- a/src/main/java/com/commafeed/backend/feeds/OPMLImporter.java +++ b/src/main/java/com/commafeed/backend/feeds/OPMLImporter.java @@ -64,7 +64,7 @@ public class OPMLImporter { } category.setParent(parent); category.setUser(user); - feedCategoryDAO.save(category); + feedCategoryDAO.saveOrUpdate(category); } List children = outline.getChildren(); diff --git a/src/main/java/com/commafeed/backend/pubsubhubbub/SubscriptionHandler.java b/src/main/java/com/commafeed/backend/pubsubhubbub/SubscriptionHandler.java index 15a9e1f7..263ee5e7 100644 --- a/src/main/java/com/commafeed/backend/pubsubhubbub/SubscriptionHandler.java +++ b/src/main/java/com/commafeed/backend/pubsubhubbub/SubscriptionHandler.java @@ -72,7 +72,7 @@ public class SubscriptionHandler { && StringUtils.contains(message, pushpressError)) { String[] tokens = message.split(" "); feed.setPushTopic(tokens[tokens.length - 1]); - feedDAO.update(feed); + feedDAO.saveOrUpdate(feed); log.debug("handled pushpress subfeed {} : {}", topic, feed.getPushTopic()); } else { diff --git a/src/main/java/com/commafeed/backend/services/FeedEntryService.java b/src/main/java/com/commafeed/backend/services/FeedEntryService.java index d6eb113f..f09f9c10 100644 --- a/src/main/java/com/commafeed/backend/services/FeedEntryService.java +++ b/src/main/java/com/commafeed/backend/services/FeedEntryService.java @@ -17,7 +17,7 @@ public class FeedEntryService { FeedEntryStatus status = feedEntryStatusDAO.findById(user, entryId); if (status != null) { status.setRead(read); - feedEntryStatusDAO.update(status); + feedEntryStatusDAO.saveOrUpdate(status); } } @@ -25,7 +25,7 @@ public class FeedEntryService { FeedEntryStatus status = feedEntryStatusDAO.findById(user, entryId); if (status != null) { status.setStarred(starred); - feedEntryStatusDAO.update(status); + feedEntryStatusDAO.saveOrUpdate(status); } } } diff --git a/src/main/java/com/commafeed/backend/services/FeedService.java b/src/main/java/com/commafeed/backend/services/FeedService.java index 06c17daa..146ea613 100644 --- a/src/main/java/com/commafeed/backend/services/FeedService.java +++ b/src/main/java/com/commafeed/backend/services/FeedService.java @@ -23,7 +23,7 @@ public class FeedService { feed = new Feed(); feed.setUrl(url); feed.setUrlHash(DigestUtils.sha1Hex(url)); - feedDAO.save(feed); + feedDAO.saveOrUpdate(feed); } return feed; } diff --git a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java index da5e2b04..cbff079e 100644 --- a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java +++ b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java @@ -86,7 +86,7 @@ public class FeedSubscriptionService { status.setSubscription(sub); statuses.add(status); } - feedEntryStatusDAO.save(statuses); + feedEntryStatusDAO.saveOrUpdate(statuses); } taskGiver.add(feed); return feed; diff --git a/src/main/java/com/commafeed/backend/services/UserService.java b/src/main/java/com/commafeed/backend/services/UserService.java index 502e7771..b0548d9e 100644 --- a/src/main/java/com/commafeed/backend/services/UserService.java +++ b/src/main/java/com/commafeed/backend/services/UserService.java @@ -56,7 +56,7 @@ public class UserService { user.getPassword(), user.getSalt()); if (authenticated) { user.setLastLogin(Calendar.getInstance().getTime()); - userDAO.update(user); + userDAO.saveOrUpdate(user); return user; } } @@ -85,7 +85,7 @@ public class UserService { for (Role role : roles) { user.getRoles().add(new UserRole(user, role)); } - userDAO.save(user); + userDAO.saveOrUpdate(user); return user; } diff --git a/src/main/java/com/commafeed/frontend/pages/NextUnreadRedirectPage.java b/src/main/java/com/commafeed/frontend/pages/NextUnreadRedirectPage.java index 4f743184..aa2b9846 100644 --- a/src/main/java/com/commafeed/frontend/pages/NextUnreadRedirectPage.java +++ b/src/main/java/com/commafeed/frontend/pages/NextUnreadRedirectPage.java @@ -60,7 +60,7 @@ public class NextUnreadRedirectPage extends WebPage { FeedEntryStatus status = Iterables.getFirst(statuses, null); String url = status.getEntry().getUrl(); status.setRead(true); - feedEntryStatusDAO.update(status); + feedEntryStatusDAO.saveOrUpdate(status); throw new RedirectToUrlException(url); } } diff --git a/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryCallbackPage.java b/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryCallbackPage.java index 3985e2bc..2e59ac1c 100644 --- a/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryCallbackPage.java +++ b/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryCallbackPage.java @@ -63,7 +63,7 @@ public class PasswordRecoveryCallbackPage extends BasePage { user.setApiKey(userService.generateApiKey(user)); user.setRecoverPasswordToken(null); user.setRecoverPasswordTokenDate(null); - userDAO.update(user); + userDAO.saveOrUpdate(user); info("Password saved."); } else { error("Passwords do not match."); diff --git a/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryPage.java b/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryPage.java index d5448a37..525633ad 100644 --- a/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryPage.java +++ b/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryPage.java @@ -41,7 +41,7 @@ public class PasswordRecoveryPage extends BasePage { .randomUUID().toString())); user.setRecoverPasswordTokenDate(Calendar.getInstance() .getTime()); - userDAO.update(user); + userDAO.saveOrUpdate(user); mailService.sendMail(user, "Password recovery", buildEmailContent(user)); info("Email sent."); diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java index 36270493..01260f80 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java @@ -68,11 +68,11 @@ public class AdminREST extends AbstractResourceREST { } user.setEmail(userModel.getEmail()); user.setDisabled(!userModel.isEnabled()); - userDAO.update(user); + userDAO.saveOrUpdate(user); Set roles = userRoleDAO.findRoles(user); if (userModel.isAdmin() && !roles.contains(Role.ADMIN)) { - userRoleDAO.save(new UserRole(user, Role.ADMIN)); + userRoleDAO.saveOrUpdate(new UserRole(user, Role.ADMIN)); } else if (!userModel.isAdmin() && roles.contains(Role.ADMIN)) { if (StartupBean.USERNAME_ADMIN.equals(user.getName())) { return Response diff --git a/src/main/java/com/commafeed/frontend/rest/resources/CategoryREST.java b/src/main/java/com/commafeed/frontend/rest/resources/CategoryREST.java index 1c4df8c1..d30340b0 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/CategoryREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/CategoryREST.java @@ -208,7 +208,7 @@ public class CategoryREST extends AbstractResourceREST { parent.setId(Long.valueOf(parentId)); cat.setParent(parent); } - feedCategoryDAO.save(cat); + feedCategoryDAO.saveOrUpdate(cat); return Response.ok().build(); } @@ -227,7 +227,7 @@ public class CategoryREST extends AbstractResourceREST { for (FeedSubscription sub : subs) { sub.setCategory(null); } - feedSubscriptionDAO.update(subs); + feedSubscriptionDAO.saveOrUpdate(subs); List categories = feedCategoryDAO .findAllChildrenCategories(getUser(), cat); for (FeedCategory child : categories) { @@ -236,7 +236,7 @@ public class CategoryREST extends AbstractResourceREST { child.setParent(null); } } - feedCategoryDAO.update(categories); + feedCategoryDAO.saveOrUpdate(categories); feedCategoryDAO.delete(cat); return Response.ok().build(); @@ -297,12 +297,12 @@ public class CategoryREST extends AbstractResourceREST { for (int i = 0; i < categories.size(); i++) { categories.get(i).setPosition(i); } - feedCategoryDAO.update(categories); + feedCategoryDAO.saveOrUpdate(categories); } else { - feedCategoryDAO.update(category); + feedCategoryDAO.saveOrUpdate(category); } - feedCategoryDAO.update(category); + feedCategoryDAO.saveOrUpdate(category); return Response.ok(Status.OK).build(); } @@ -320,7 +320,7 @@ public class CategoryREST extends AbstractResourceREST { return Response.status(Status.NOT_FOUND).build(); } category.setCollapsed(req.isCollapse()); - feedCategoryDAO.update(category); + feedCategoryDAO.saveOrUpdate(category); return Response.ok(Status.OK).build(); } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java b/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java index 52bdd36f..28fc8030 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java @@ -359,9 +359,9 @@ public class FeedREST extends AbstractResourceREST { for (int i = 0; i < subs.size(); i++) { subs.get(i).setPosition(i); } - feedSubscriptionDAO.update(subs); + feedSubscriptionDAO.saveOrUpdate(subs); } else { - feedSubscriptionDAO.update(subscription); + feedSubscriptionDAO.saveOrUpdate(subscription); } return Response.ok(Status.OK).build(); diff --git a/src/main/java/com/commafeed/frontend/rest/resources/PubSubHubbubCallbackREST.java b/src/main/java/com/commafeed/frontend/rest/resources/PubSubHubbubCallbackREST.java index 38a049b8..f8297e65 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/PubSubHubbubCallbackREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/PubSubHubbubCallbackREST.java @@ -67,7 +67,7 @@ public class PubSubHubbubCallbackREST { feed.getPushTopic()); feed.setPushLastPing(Calendar.getInstance().getTime()); } - feedDAO.update(feeds); + feedDAO.saveOrUpdate(feeds); return Response.ok(challenge).build(); } else { log.debug("rejecting callback: no push info for {}", topic); diff --git a/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java b/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java index f563dcbe..68520d6e 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java @@ -134,7 +134,7 @@ public class UserREST extends AbstractResourceREST { if (request.isNewApiKey()) { user.setApiKey(userService.generateApiKey(user)); } - userDAO.update(user); + userDAO.saveOrUpdate(user); return Response.ok().build(); } diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 5039ee94..5c6aa5ac 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -14,6 +14,10 @@ + + + +