From 7cbcf1080bde484f685abb386a0cb3ecbd95735c Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 5 Jun 2013 11:58:35 +0200 Subject: [PATCH] initial ehcache support --- pom.xml | 18 ++++++++++++++++++ .../com/commafeed/backend/MetricsBean.java | 18 ++++++++++++++++++ .../java/com/commafeed/backend/model/Feed.java | 5 +++++ .../commafeed/backend/model/FeedCategory.java | 6 ++++++ .../com/commafeed/backend/model/FeedEntry.java | 5 +++++ .../backend/model/FeedEntryStatus.java | 6 ++++++ .../commafeed/backend/model/FeedPushInfo.java | 5 +++++ .../backend/model/FeedSubscription.java | 6 ++++++ .../java/com/commafeed/backend/model/User.java | 5 +++++ .../com/commafeed/backend/model/UserRole.java | 6 ++++++ .../commafeed/backend/model/UserSettings.java | 6 ++++++ .../pubsubhubbub/SubscriptionHandler.java | 4 ++-- .../frontend/rest/resources/AdminREST.java | 13 +++++++------ src/main/resources/META-INF/persistence.xml | 9 +++++++++ src/main/resources/log4j.properties | 2 ++ 15 files changed, 106 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 7a872fd0..2384b9d2 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ + hsqldb.snapshots http://www.hsqldb.org/repos/ @@ -99,6 +100,10 @@ org.hibernate.common:hibernate-commons-annotations:4.0.1.Final org.hibernate:hibernate-validator:4.3.1.Final org.jboss.logging:jboss-logging:3.1.3.GA + + net.sf.ehcache:ehcache-core:2.6.6 + org.hibernate:hibernate-ehcache:4.1.11.Final + dom4j:dom4j:1.6.1 antlr:antlr:2.7.7 remove:openjpa- @@ -178,6 +183,19 @@ + + net.sf.ehcache + ehcache-core + 2.6.6 + provided + + + org.hibernate + hibernate-ehcache + 4.1.11.Final + provided + + uaihebert.com EasyCriteria diff --git a/src/main/java/com/commafeed/backend/MetricsBean.java b/src/main/java/com/commafeed/backend/MetricsBean.java index ed3cc53a..5a53e5e5 100644 --- a/src/main/java/com/commafeed/backend/MetricsBean.java +++ b/src/main/java/com/commafeed/backend/MetricsBean.java @@ -1,10 +1,20 @@ package com.commafeed.backend; import javax.ejb.Singleton; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.ejb.EntityManagerImpl; +import org.hibernate.stat.Statistics; @Singleton public class MetricsBean { + @PersistenceContext + EntityManager em; + private Metric lastMinute = new Metric(); private Metric thisMinute = new Metric(); @@ -61,6 +71,14 @@ public class MetricsBean { return lastHour; } + public String getCacheStats() { + EntityManagerImpl impl = (EntityManagerImpl) em.getDelegate(); + Session session = impl.getSession(); + SessionFactory sessionFactory = session.getSessionFactory(); + Statistics statistics = sessionFactory.getStatistics(); + return statistics.toString(); + } + public static class Metric { private int feedsRefreshed; private int feedsUpdated; diff --git a/src/main/java/com/commafeed/backend/model/Feed.java b/src/main/java/com/commafeed/backend/model/Feed.java index 118c78c8..da32f1ed 100644 --- a/src/main/java/com/commafeed/backend/model/Feed.java +++ b/src/main/java/com/commafeed/backend/model/Feed.java @@ -3,6 +3,7 @@ package com.commafeed.backend.model; import java.util.Date; import java.util.Set; +import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -13,6 +14,8 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Index; import com.google.common.collect.Sets; @@ -22,6 +25,8 @@ import com.google.common.collect.Sets; @org.hibernate.annotations.Table(appliesTo = "FEEDS", indexes = { @Index(name = "disabled_lastupdated_index", columnNames = { "disabledUntil", "lastUpdated" }), }) @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Feed extends AbstractModel { /** diff --git a/src/main/java/com/commafeed/backend/model/FeedCategory.java b/src/main/java/com/commafeed/backend/model/FeedCategory.java index 8474c998..e944a7a8 100644 --- a/src/main/java/com/commafeed/backend/model/FeedCategory.java +++ b/src/main/java/com/commafeed/backend/model/FeedCategory.java @@ -2,6 +2,7 @@ package com.commafeed.backend.model; import java.util.Set; +import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -10,11 +11,16 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + import com.google.common.collect.Sets; @Entity @Table(name = "FEEDCATEGORIES") @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class FeedCategory extends AbstractModel { @Column(length = 128, nullable = false) diff --git a/src/main/java/com/commafeed/backend/model/FeedEntry.java b/src/main/java/com/commafeed/backend/model/FeedEntry.java index 6afd9b6c..8afa1eda 100644 --- a/src/main/java/com/commafeed/backend/model/FeedEntry.java +++ b/src/main/java/com/commafeed/backend/model/FeedEntry.java @@ -3,6 +3,7 @@ package com.commafeed.backend.model; import java.util.Date; import java.util.Set; +import javax.persistence.Cacheable; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -17,6 +18,8 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Index; import com.google.api.client.util.Sets; @@ -24,6 +27,8 @@ import com.google.api.client.util.Sets; @Entity @Table(name = "FEEDENTRIES") @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class FeedEntry extends AbstractModel { @Column(length = 2048, nullable = false) diff --git a/src/main/java/com/commafeed/backend/model/FeedEntryStatus.java b/src/main/java/com/commafeed/backend/model/FeedEntryStatus.java index 5cd543fc..d3c361a8 100644 --- a/src/main/java/com/commafeed/backend/model/FeedEntryStatus.java +++ b/src/main/java/com/commafeed/backend/model/FeedEntryStatus.java @@ -1,5 +1,6 @@ package com.commafeed.backend.model; +import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -7,9 +8,14 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + @Entity @Table(name = "FEEDENTRYSTATUSES") @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class FeedEntryStatus extends AbstractModel { @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/commafeed/backend/model/FeedPushInfo.java b/src/main/java/com/commafeed/backend/model/FeedPushInfo.java index ee337921..c9e5e096 100644 --- a/src/main/java/com/commafeed/backend/model/FeedPushInfo.java +++ b/src/main/java/com/commafeed/backend/model/FeedPushInfo.java @@ -2,6 +2,7 @@ package com.commafeed.backend.model; import java.util.Date; +import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -11,11 +12,15 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Index; @Entity @Table(name = "FEEDPUSHINFOS") @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class FeedPushInfo extends AbstractModel { @JoinColumn(unique = true) diff --git a/src/main/java/com/commafeed/backend/model/FeedSubscription.java b/src/main/java/com/commafeed/backend/model/FeedSubscription.java index 96be770e..6681a7fb 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 java.util.Set; +import javax.persistence.Cacheable; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -11,9 +12,14 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + @Entity @Table(name = "FEEDSUBSCRIPTIONS") @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class FeedSubscription extends AbstractModel { @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/commafeed/backend/model/User.java b/src/main/java/com/commafeed/backend/model/User.java index 11dba1d4..f07191e1 100644 --- a/src/main/java/com/commafeed/backend/model/User.java +++ b/src/main/java/com/commafeed/backend/model/User.java @@ -3,6 +3,7 @@ package com.commafeed.backend.model; import java.util.Date; import java.util.Set; +import javax.persistence.Cacheable; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -11,6 +12,8 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Index; import com.google.common.collect.Sets; @@ -18,6 +21,8 @@ import com.google.common.collect.Sets; @Entity @Table(name = "USERS") @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class User extends AbstractModel { @Column(length = 32, nullable = false, unique = true) diff --git a/src/main/java/com/commafeed/backend/model/UserRole.java b/src/main/java/com/commafeed/backend/model/UserRole.java index fb9537d2..be5f296b 100644 --- a/src/main/java/com/commafeed/backend/model/UserRole.java +++ b/src/main/java/com/commafeed/backend/model/UserRole.java @@ -1,5 +1,6 @@ package com.commafeed.backend.model; +import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -9,9 +10,14 @@ import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Table; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + @Entity @Table(name = "USERROLES") @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class UserRole extends AbstractModel { public static enum Role { diff --git a/src/main/java/com/commafeed/backend/model/UserSettings.java b/src/main/java/com/commafeed/backend/model/UserSettings.java index 4d4a3d96..2c1174eb 100644 --- a/src/main/java/com/commafeed/backend/model/UserSettings.java +++ b/src/main/java/com/commafeed/backend/model/UserSettings.java @@ -1,5 +1,6 @@ package com.commafeed.backend.model; +import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -10,9 +11,14 @@ import javax.persistence.Lob; import javax.persistence.OneToOne; import javax.persistence.Table; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + @Entity @Table(name = "USERSETTINGS") @SuppressWarnings("serial") +@Cacheable +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class UserSettings extends AbstractModel { public enum ReadingMode { diff --git a/src/main/java/com/commafeed/backend/pubsubhubbub/SubscriptionHandler.java b/src/main/java/com/commafeed/backend/pubsubhubbub/SubscriptionHandler.java index 7a2bf472..48f93881 100644 --- a/src/main/java/com/commafeed/backend/pubsubhubbub/SubscriptionHandler.java +++ b/src/main/java/com/commafeed/backend/pubsubhubbub/SubscriptionHandler.java @@ -85,8 +85,8 @@ public class SubscriptionHandler { } log.debug("subscribed to {} for {}", hub, topic); } catch (Exception e) { - log.error("Could not subscribe to {} for {} : {}", hub, topic, - e.getMessage(), e); + log.error("Could not subscribe to {} for {} : " + e.getMessage(), + hub, topic); } finally { client.getConnectionManager().shutdown(); } 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 1673ebe3..36270493 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java @@ -21,7 +21,6 @@ import com.commafeed.frontend.SecurityCheck; import com.commafeed.frontend.model.UserModel; import com.commafeed.frontend.model.request.IDRequest; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.wordnik.swagger.annotations.Api; @@ -176,11 +175,13 @@ public class AdminREST extends AbstractResourceREST { @Path("/metrics") @GET public Response getMetrics() { - Map map = ImmutableMap.of("lastMinute", - metricsBean.getLastMinute(), "lastHour", - metricsBean.getLastHour(), "backlog", - feedDAO.getUpdatableCount(), "queue", - feedRefreshUpdater.getQueueSize()); + Map map = Maps.newLinkedHashMap(); + map.put("lastMinute", metricsBean.getLastMinute()); + map.put("lastHour", metricsBean.getLastHour()); + map.put("backlog", feedDAO.getUpdatableCount()); + map.put("queue", feedRefreshUpdater.getQueueSize()); + map.put("cache", metricsBean.getCacheStats()); + return Response.ok(map).build(); } } diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 2cb2644a..5039ee94 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -7,11 +7,20 @@ org.hibernate.ejb.HibernatePersistence ${jpa.datasource.name} + ENABLE_SELECTIVE + + + + + + \ No newline at end of file diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties index 51576f36..800d73b4 100644 --- a/src/main/resources/log4j.properties +++ b/src/main/resources/log4j.properties @@ -1,6 +1,8 @@ log4j.logger.com.commafeed=INFO, CONSOLE log4j.logger.org=WARN, CONSOLE log4j.logger.ro=WARN, CONSOLE +log4j.logger.net.sf.ehcache=ALL, CONSOLE +log4j.logger.org.hibernate.cache=ALL, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout