From e5e40dac2368cf5d92c70cfb9c16286da1973309 Mon Sep 17 00:00:00 2001 From: Jeremie Panzer Date: Tue, 26 Mar 2013 11:36:31 +0100 Subject: [PATCH] remove lazy loading --- .../com/commafeed/backend/model/Feed.java | 3 +- .../commafeed/backend/model/FeedCategory.java | 8 ++- .../commafeed/backend/model/FeedEntry.java | 3 +- .../backend/model/FeedSubscription.java | 5 +- .../rest/JSONMessageBodyReaderWriter.java | 14 ++-- .../rest/resources/SubscriptionsREST.java | 68 +++++++++---------- 6 files changed, 53 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/commafeed/backend/model/Feed.java b/src/main/java/com/commafeed/backend/model/Feed.java index fd51b0c7..59d4f107 100644 --- a/src/main/java/com/commafeed/backend/model/Feed.java +++ b/src/main/java/com/commafeed/backend/model/Feed.java @@ -5,7 +5,6 @@ import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.FetchType; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; @@ -27,7 +26,7 @@ public class Feed extends AbstractModel { @Column(length = 1024) private String message; - @OneToMany(mappedBy = "feed", fetch = FetchType.EAGER) + @OneToMany(mappedBy = "feed") private Set entries = Sets.newHashSet(); public Feed() { diff --git a/src/main/java/com/commafeed/backend/model/FeedCategory.java b/src/main/java/com/commafeed/backend/model/FeedCategory.java index 474c961a..8ecb0967 100644 --- a/src/main/java/com/commafeed/backend/model/FeedCategory.java +++ b/src/main/java/com/commafeed/backend/model/FeedCategory.java @@ -4,7 +4,6 @@ import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.FetchType; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; @@ -25,8 +24,8 @@ public class FeedCategory extends AbstractModel { @ManyToOne private FeedCategory parent; - @OneToMany(mappedBy = "category", fetch = FetchType.EAGER) - private Set subscriptions = Sets.newHashSet(); + @OneToMany(mappedBy = "category") + private Set subscriptions; public String getName() { return name; @@ -53,6 +52,9 @@ public class FeedCategory extends AbstractModel { } public Set getSubscriptions() { + if (subscriptions == null) { + return Sets.newHashSet(); + } return subscriptions; } diff --git a/src/main/java/com/commafeed/backend/model/FeedEntry.java b/src/main/java/com/commafeed/backend/model/FeedEntry.java index b074283d..44fbcda7 100644 --- a/src/main/java/com/commafeed/backend/model/FeedEntry.java +++ b/src/main/java/com/commafeed/backend/model/FeedEntry.java @@ -4,6 +4,7 @@ import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.Table; @@ -18,7 +19,7 @@ public class FeedEntry extends AbstractModel { @Column(length = 2048) private String guid; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) private Feed feed; @Column(length = 2048) diff --git a/src/main/java/com/commafeed/backend/model/FeedSubscription.java b/src/main/java/com/commafeed/backend/model/FeedSubscription.java index e62ca49f..5165980a 100644 --- a/src/main/java/com/commafeed/backend/model/FeedSubscription.java +++ b/src/main/java/com/commafeed/backend/model/FeedSubscription.java @@ -2,6 +2,7 @@ package com.commafeed.backend.model; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.ManyToOne; import javax.persistence.Table; @@ -10,10 +11,10 @@ import javax.persistence.Table; @SuppressWarnings("serial") public class FeedSubscription extends AbstractModel { - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) private User user; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) private Feed feed; @Column(length = 128) diff --git a/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java b/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java index 121b589b..a67fa037 100644 --- a/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java +++ b/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java @@ -1,5 +1,7 @@ package com.commafeed.frontend.rest; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -66,7 +68,9 @@ public class JSONMessageBodyReaderWriter implements MessageBodyWriter, WebApplicationException { httpHeaders.putSingle(HttpHeaders.CONTENT_TYPE, mediaType.toString() + ";charset=UTF-8"); - OutputStreamWriter writer = new OutputStreamWriter(entityStream, UTF_8); + OutputStreamWriter writer = new OutputStreamWriter( + new BufferedOutputStream(entityStream), UTF_8); + try { Type jsonType; if (type.equals(genericType)) { @@ -85,8 +89,8 @@ public class JSONMessageBodyReaderWriter implements MessageBodyWriter, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream) throws IOException, WebApplicationException { - InputStreamReader streamReader = new InputStreamReader(entityStream, - UTF_8); + InputStreamReader reader = new InputStreamReader( + new BufferedInputStream(entityStream), UTF_8); try { Type jsonType; if (type.equals(genericType)) { @@ -94,9 +98,9 @@ public class JSONMessageBodyReaderWriter implements MessageBodyWriter, } else { jsonType = genericType; } - return getGson().fromJson(streamReader, jsonType); + return getGson().fromJson(reader, jsonType); } finally { - streamReader.close(); + reader.close(); } } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java b/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java index 070c2e82..e0fbc72b 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java @@ -80,52 +80,50 @@ public class SubscriptionsREST extends AbstractREST { @GET public Category getSubscriptions() { - Category root = new Category(); List categories = feedCategoryService.findAll(getUser()); - addChildren(categories, root); + List subscriptions = feedSubscriptionService + .findAll(getUser()); + Category root = buildCategory(null, categories, subscriptions); root.setId("all"); root.setName("All"); - for (FeedSubscription subscription : feedSubscriptionService - .findWithoutCategories(getUser())) { - Subscription sub = new Subscription(); - sub.setId(subscription.getId()); - sub.setName(subscription.getTitle()); - sub.setMessage(subscription.getFeed().getMessage()); - int size = feedEntryService.getEntries(subscription.getFeed(), - getUser(), false).size(); - sub.setUnread(size); - root.getFeeds().add(sub); - } return root; } - private void addChildren(List categories, Category current) { - for (FeedCategory category : categories) { - if ((category.getParent() == null && current.getId() == null) - || (category.getParent() != null && (ObjectUtils.equals( - String.valueOf(category.getParent().getId()), - current.getId())))) { - Category child = new Category(); - child.setId(String.valueOf(category.getId())); - child.setName(category.getName()); - addChildren(categories, child); - for (FeedSubscription subscription : category - .getSubscriptions()) { - Subscription sub = new Subscription(); - sub.setId(subscription.getId()); - sub.setName(subscription.getTitle()); - sub.setMessage(subscription.getFeed().getMessage()); - int size = feedEntryService.getEntries( - subscription.getFeed(), getUser(), false).size(); - sub.setUnread(size); - child.getFeeds().add(sub); - } - current.getChildren().add(child); + Category buildCategory(Long id, List categories, + List subscriptions) { + Category category = new Category(); + category.setId(String.valueOf(id)); + + for (FeedCategory c : categories) { + if ((id == null && c.getParent() == null) + || (c.getParent() != null && ObjectUtils.equals(c + .getParent().getId(), id))) { + Category child = buildCategory(c.getId(), categories, + subscriptions); + child.setId(String.valueOf(c.getId())); + child.setName(c.getName()); + category.getChildren().add(child); } } + + for (FeedSubscription subscription : subscriptions) { + if ((id == null && subscription.getCategory() == null) + || (subscription.getCategory() != null && ObjectUtils + .equals(subscription.getCategory().getId(), id))) { + Subscription sub = new Subscription(); + sub.setId(subscription.getId()); + sub.setName(subscription.getTitle()); + sub.setMessage(subscription.getFeed().getMessage()); + int size = feedEntryService.getEntries(subscription.getFeed(), + getUser(), false).size(); + sub.setUnread(size); + category.getFeeds().add(sub); + } + } + return category; } }