create transaction only when needed

This commit is contained in:
Athou
2015-02-23 15:33:52 +01:00
parent cdcf81ab7c
commit 1d088c5eae
2 changed files with 9 additions and 10 deletions

View File

@@ -14,17 +14,20 @@ import javax.inject.Singleton;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.hibernate.SessionFactory;
import com.codahale.metrics.Gauge; import com.codahale.metrics.Gauge;
import com.codahale.metrics.Meter; import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.dao.FeedDAO; import com.commafeed.backend.dao.FeedDAO;
import com.commafeed.backend.dao.UnitOfWork;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
@Singleton @Singleton
public class FeedQueues { public class FeedQueues {
private SessionFactory sessionFactory;
private final FeedDAO feedDAO; private final FeedDAO feedDAO;
private final CommaFeedConfiguration config; private final CommaFeedConfiguration config;
@@ -35,7 +38,8 @@ public class FeedQueues {
private Meter refill; private Meter refill;
@Inject @Inject
public FeedQueues(FeedDAO feedDAO, CommaFeedConfiguration config, MetricRegistry metrics) { public FeedQueues(SessionFactory sessionFactory, FeedDAO feedDAO, CommaFeedConfiguration config, MetricRegistry metrics) {
this.sessionFactory = sessionFactory;
this.config = config; this.config = config;
this.feedDAO = feedDAO; this.feedDAO = feedDAO;
@@ -67,7 +71,7 @@ public class FeedQueues {
FeedRefreshContext context = takeQueue.poll(); FeedRefreshContext context = takeQueue.poll();
if (context == null) { if (context == null) {
refill(); UnitOfWork.run(sessionFactory, () -> refill());
context = takeQueue.poll(); context = takeQueue.poll();
} }
return context; return context;

View File

@@ -10,13 +10,10 @@ import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.hibernate.SessionFactory;
import com.codahale.metrics.Meter; import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.dao.FeedDAO; import com.commafeed.backend.dao.FeedDAO;
import com.commafeed.backend.dao.UnitOfWork;
/** /**
* Infinite loop fetching feeds from @FeedQueues and queuing them to the {@link FeedRefreshWorker} pool. * Infinite loop fetching feeds from @FeedQueues and queuing them to the {@link FeedRefreshWorker} pool.
@@ -26,7 +23,6 @@ import com.commafeed.backend.dao.UnitOfWork;
@Singleton @Singleton
public class FeedRefreshTaskGiver implements Managed { public class FeedRefreshTaskGiver implements Managed {
private final SessionFactory sessionFactory;
private final FeedQueues queues; private final FeedQueues queues;
private final FeedRefreshWorker worker; private final FeedRefreshWorker worker;
@@ -36,9 +32,8 @@ public class FeedRefreshTaskGiver implements Managed {
private Meter threadWaited; private Meter threadWaited;
@Inject @Inject
public FeedRefreshTaskGiver(SessionFactory sessionFactory, FeedQueues queues, FeedDAO feedDAO, FeedRefreshWorker worker, public FeedRefreshTaskGiver(FeedQueues queues, FeedDAO feedDAO, FeedRefreshWorker worker, CommaFeedConfiguration config,
CommaFeedConfiguration config, MetricRegistry metrics) { MetricRegistry metrics) {
this.sessionFactory = sessionFactory;
this.queues = queues; this.queues = queues;
this.worker = worker; this.worker = worker;
@@ -68,7 +63,7 @@ public class FeedRefreshTaskGiver implements Managed {
public void run() { public void run() {
while (!executor.isShutdown()) { while (!executor.isShutdown()) {
try { try {
FeedRefreshContext context = UnitOfWork.run(sessionFactory, () -> queues.take()); FeedRefreshContext context = queues.take();
if (context != null) { if (context != null) {
feedRefreshed.mark(); feedRefreshed.mark();
worker.updateFeed(context); worker.updateFeed(context);