diff --git a/pom.xml b/pom.xml
index 11b11656..9b305707 100644
--- a/pom.xml
+++ b/pom.xml
@@ -133,6 +133,12 @@
1.7.7
+
+ com.google.inject
+ guice
+ 3.0
+
+
io.dropwizard
dropwizard-core
diff --git a/src/main/java/com/commafeed/CommaFeedApplication.java b/src/main/java/com/commafeed/CommaFeedApplication.java
index 6f05ef76..3309b08f 100644
--- a/src/main/java/com/commafeed/CommaFeedApplication.java
+++ b/src/main/java/com/commafeed/CommaFeedApplication.java
@@ -13,32 +13,9 @@ import java.io.File;
import java.util.Date;
import java.util.concurrent.TimeUnit;
-import lombok.extern.slf4j.Slf4j;
-
import org.eclipse.jetty.server.session.HashSessionManager;
import org.eclipse.jetty.server.session.SessionHandler;
-import org.hibernate.SessionFactory;
-import com.codahale.metrics.MetricRegistry;
-import com.commafeed.CommaFeedConfiguration.CacheType;
-import com.commafeed.backend.HttpGetter;
-import com.commafeed.backend.cache.CacheService;
-import com.commafeed.backend.cache.NoopCacheService;
-import com.commafeed.backend.cache.RedisCacheService;
-import com.commafeed.backend.dao.FeedCategoryDAO;
-import com.commafeed.backend.dao.FeedDAO;
-import com.commafeed.backend.dao.FeedEntryContentDAO;
-import com.commafeed.backend.dao.FeedEntryDAO;
-import com.commafeed.backend.dao.FeedEntryStatusDAO;
-import com.commafeed.backend.dao.FeedEntryTagDAO;
-import com.commafeed.backend.dao.FeedSubscriptionDAO;
-import com.commafeed.backend.dao.UserDAO;
-import com.commafeed.backend.dao.UserRoleDAO;
-import com.commafeed.backend.dao.UserSettingsDAO;
-import com.commafeed.backend.feed.FaviconFetcher;
-import com.commafeed.backend.feed.FeedFetcher;
-import com.commafeed.backend.feed.FeedParser;
-import com.commafeed.backend.feed.FeedQueues;
import com.commafeed.backend.feed.FeedRefreshTaskGiver;
import com.commafeed.backend.feed.FeedRefreshUpdater;
import com.commafeed.backend.feed.FeedRefreshWorker;
@@ -53,18 +30,6 @@ import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole;
import com.commafeed.backend.model.UserSettings;
-import com.commafeed.backend.opml.OPMLExporter;
-import com.commafeed.backend.opml.OPMLImporter;
-import com.commafeed.backend.service.DatabaseCleaningService;
-import com.commafeed.backend.service.FeedEntryContentService;
-import com.commafeed.backend.service.FeedEntryService;
-import com.commafeed.backend.service.FeedEntryTagService;
-import com.commafeed.backend.service.FeedService;
-import com.commafeed.backend.service.FeedSubscriptionService;
-import com.commafeed.backend.service.FeedUpdateService;
-import com.commafeed.backend.service.MailService;
-import com.commafeed.backend.service.PasswordEncryptionService;
-import com.commafeed.backend.service.PubSubService;
import com.commafeed.backend.service.StartupService;
import com.commafeed.backend.service.UserService;
import com.commafeed.backend.task.OldStatusesCleanupTask;
@@ -83,6 +48,8 @@ import com.commafeed.frontend.servlet.AnalyticsServlet;
import com.commafeed.frontend.servlet.CustomCssServlet;
import com.commafeed.frontend.servlet.LogoutServlet;
import com.commafeed.frontend.servlet.NextUnreadServlet;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
import com.wordnik.swagger.config.ConfigFactory;
import com.wordnik.swagger.config.ScannerFactory;
import com.wordnik.swagger.config.SwaggerConfig;
@@ -93,7 +60,6 @@ import com.wordnik.swagger.jaxrs.listing.ResourceListingProvider;
import com.wordnik.swagger.jaxrs.reader.DefaultJaxrsApiReader;
import com.wordnik.swagger.reader.ClassReaders;
-@Slf4j
public class CommaFeedApplication extends Application {
public static final String USERNAME_ADMIN = "admin";
@@ -102,85 +68,35 @@ public class CommaFeedApplication extends Application {
public static final Date STARTUP_TIME = new Date();
private HibernateBundle hibernateBundle;
- private MigrationsBundle migrationsBundle;
@Override
public void initialize(Bootstrap bootstrap) {
- hibernateBundle = new HibernateBundle(AbstractModel.class, Feed.class, FeedCategory.class, FeedEntry.class,
- FeedEntryContent.class, FeedEntryStatus.class, FeedEntryTag.class, FeedSubscription.class, User.class, UserRole.class,
- UserSettings.class) {
+ bootstrap.addBundle(hibernateBundle = new HibernateBundle(AbstractModel.class, Feed.class,
+ FeedCategory.class, FeedEntry.class, FeedEntryContent.class, FeedEntryStatus.class, FeedEntryTag.class,
+ FeedSubscription.class, User.class, UserRole.class, UserSettings.class) {
@Override
public DataSourceFactory getDataSourceFactory(CommaFeedConfiguration configuration) {
return configuration.getDatabase();
}
- };
- bootstrap.addBundle(hibernateBundle);
+ });
- migrationsBundle = new MigrationsBundle() {
+ bootstrap.addBundle(new MigrationsBundle() {
@Override
public DataSourceFactory getDataSourceFactory(CommaFeedConfiguration configuration) {
return configuration.getDatabase();
}
- };
- bootstrap.addBundle(migrationsBundle);
+ });
bootstrap.addBundle(new AssetsBundle("/assets/", "/", "index.html"));
}
@Override
public void run(CommaFeedConfiguration config, Environment environment) throws Exception {
+ // configure context path
environment.getApplicationContext().setContextPath(config.getApplicationSettings().getContextPath());
- MetricRegistry metrics = environment.metrics();
- SessionFactory sessionFactory = hibernateBundle.getSessionFactory();
-
- CacheService cacheService = config.getApplicationSettings().getCache() == CacheType.NOOP ? new NoopCacheService()
- : new RedisCacheService();
- log.info("using cache {}", cacheService.getClass());
-
- // DAOs
- FeedCategoryDAO feedCategoryDAO = new FeedCategoryDAO(sessionFactory);
- FeedDAO feedDAO = new FeedDAO(sessionFactory);
- FeedEntryContentDAO feedEntryContentDAO = new FeedEntryContentDAO(sessionFactory);
- FeedEntryDAO feedEntryDAO = new FeedEntryDAO(sessionFactory);
- FeedEntryTagDAO feedEntryTagDAO = new FeedEntryTagDAO(sessionFactory);
- FeedSubscriptionDAO feedSubscriptionDAO = new FeedSubscriptionDAO(sessionFactory);
- UserDAO userDAO = new UserDAO(sessionFactory);
- UserRoleDAO userRoleDAO = new UserRoleDAO(sessionFactory);
- UserSettingsDAO userSettingsDAO = new UserSettingsDAO(sessionFactory);
- FeedEntryStatusDAO feedEntryStatusDAO = new FeedEntryStatusDAO(sessionFactory, feedEntryDAO, feedEntryTagDAO, config);
-
- // Queuing system
- FeedQueues queues = new FeedQueues(feedDAO, config, metrics);
-
- // Services
- DatabaseCleaningService cleaningService = new DatabaseCleaningService(sessionFactory, feedDAO, feedEntryDAO, feedEntryContentDAO,
- feedEntryStatusDAO);
- FeedEntryContentService feedEntryContentService = new FeedEntryContentService(feedEntryContentDAO);
- FeedEntryService feedEntryService = new FeedEntryService(feedSubscriptionDAO, feedEntryDAO, feedEntryStatusDAO, cacheService);
- FeedEntryTagService feedEntryTagService = new FeedEntryTagService(feedEntryDAO, feedEntryTagDAO);
- FeedService feedService = new FeedService(feedDAO);
- FeedSubscriptionService feedSubscriptionService = new FeedSubscriptionService(feedEntryStatusDAO, feedSubscriptionDAO, feedService,
- queues, cacheService, config);
- FeedUpdateService feedUpdateService = new FeedUpdateService(feedEntryDAO, feedEntryContentService);
- MailService mailService = new MailService(config);
- PasswordEncryptionService encryptionService = new PasswordEncryptionService();
- PubSubService pubSubService = new PubSubService(config, queues);
- UserService userService = new UserService(feedCategoryDAO, userDAO, userSettingsDAO, feedSubscriptionService, encryptionService,
- config);
- StartupService startupService = new StartupService(sessionFactory, userDAO, userService);
- OPMLImporter opmlImporter = new OPMLImporter(feedCategoryDAO, feedSubscriptionService, cacheService);
- OPMLExporter opmlExporter = new OPMLExporter(feedCategoryDAO, feedSubscriptionDAO);
-
- // Feed fetching/parsing
- HttpGetter httpGetter = new HttpGetter(config);
- FeedParser feedParser = new FeedParser();
- FaviconFetcher faviconFetcher = new FaviconFetcher(httpGetter);
- FeedFetcher feedFetcher = new FeedFetcher(feedParser, httpGetter);
- FeedRefreshUpdater feedUpdater = new FeedRefreshUpdater(sessionFactory, feedUpdateService, pubSubService, queues, config, metrics,
- feedSubscriptionDAO, cacheService);
- FeedRefreshWorker feedWorker = new FeedRefreshWorker(feedUpdater, feedFetcher, queues, config, metrics);
- FeedRefreshTaskGiver taskGiver = new FeedRefreshTaskGiver(sessionFactory, queues, feedDAO, feedWorker, config, metrics);
+ // guice init
+ Injector injector = Guice.createInjector(new CommaFeedModule(hibernateBundle.getSessionFactory(), config, environment.metrics()));
// Auth/session management
HashSessionManager sessionManager = new HashSessionManager();
@@ -198,46 +114,36 @@ public class CommaFeedApplication extends Application {
sessionManager.setScavengePeriod((int) TimeUnit.MINUTES.toSeconds(5));
environment.servlets().setSessionHandler(new SessionHandler(sessionManager));
- environment.jersey().register(new SecurityCheckUserServiceProvider(userService));
+ environment.jersey().register(new SecurityCheckUserServiceProvider(injector.getInstance(UserService.class)));
environment.jersey().register(SecurityCheckProvider.class);
environment.jersey().register(HttpSessionProvider.class);
// REST resources
environment.jersey().setUrlPattern("/rest/*");
- environment.jersey().register(new AdminREST(userDAO, userRoleDAO, userService, encryptionService, config, metrics));
- environment.jersey().register(
- new CategoryREST(feedCategoryDAO, feedEntryStatusDAO, feedSubscriptionDAO, feedEntryService, feedSubscriptionService,
- cacheService, config));
- environment.jersey().register(new EntryREST(feedEntryTagDAO, feedEntryService, feedEntryTagService));
- environment.jersey().register(
- new FeedREST(feedSubscriptionDAO, feedCategoryDAO, feedEntryStatusDAO, faviconFetcher, feedFetcher, feedEntryService,
- feedSubscriptionService, queues, opmlImporter, opmlExporter, cacheService, config));
- environment.jersey().register(new PubSubHubbubCallbackREST(feedDAO, feedParser, queues, config, metrics));
- environment.jersey().register(new ServerREST(httpGetter, config));
- environment.jersey().register(
- new UserREST(userDAO, userRoleDAO, userSettingsDAO, userService, encryptionService, mailService, config));
+ environment.jersey().register(injector.getInstance(AdminREST.class));
+ environment.jersey().register(injector.getInstance(CategoryREST.class));
+ environment.jersey().register(injector.getInstance(EntryREST.class));
+ environment.jersey().register(injector.getInstance(FeedREST.class));
+ environment.jersey().register(injector.getInstance(PubSubHubbubCallbackREST.class));
+ environment.jersey().register(injector.getInstance(ServerREST.class));
+ environment.jersey().register(injector.getInstance(UserREST.class));
// Servlets
- NextUnreadServlet nextUnreadServlet = new NextUnreadServlet(sessionFactory, feedSubscriptionDAO, feedEntryStatusDAO,
- feedCategoryDAO, userService, config);
- LogoutServlet logoutServlet = new LogoutServlet(config);
- CustomCssServlet customCssServlet = new CustomCssServlet(sessionFactory, userSettingsDAO, userService);
- AnalyticsServlet analyticsServlet = new AnalyticsServlet(config);
- environment.servlets().addServlet("next", nextUnreadServlet).addMapping("/next");
- environment.servlets().addServlet("logout", logoutServlet).addMapping("/logout");
- environment.servlets().addServlet("customCss", customCssServlet).addMapping("/custom_css.css");
- environment.servlets().addServlet("analytics.js", analyticsServlet).addMapping("/analytics.js");
+ environment.servlets().addServlet("next", injector.getInstance(NextUnreadServlet.class)).addMapping("/next");
+ environment.servlets().addServlet("logout", injector.getInstance(LogoutServlet.class)).addMapping("/logout");
+ environment.servlets().addServlet("customCss", injector.getInstance(CustomCssServlet.class)).addMapping("/custom_css.css");
+ environment.servlets().addServlet("analytics.js", injector.getInstance(AnalyticsServlet.class)).addMapping("/analytics.js");
// Tasks
SchedulingService schedulingService = new SchedulingService();
- schedulingService.register(new OldStatusesCleanupTask(config, cleaningService));
- schedulingService.register(new OrphansCleanupTask(cleaningService));
+ schedulingService.register(injector.getInstance(OldStatusesCleanupTask.class));
+ schedulingService.register(injector.getInstance(OrphansCleanupTask.class));
// Managed objects
- environment.lifecycle().manage(startupService);
- environment.lifecycle().manage(taskGiver);
- environment.lifecycle().manage(feedWorker);
- environment.lifecycle().manage(feedUpdater);
+ environment.lifecycle().manage(injector.getInstance(StartupService.class));
+ environment.lifecycle().manage(injector.getInstance(FeedRefreshTaskGiver.class));
+ environment.lifecycle().manage(injector.getInstance(FeedRefreshWorker.class));
+ environment.lifecycle().manage(injector.getInstance(FeedRefreshUpdater.class));
environment.lifecycle().manage(schedulingService);
// Swagger
diff --git a/src/main/java/com/commafeed/CommaFeedModule.java b/src/main/java/com/commafeed/CommaFeedModule.java
new file mode 100644
index 00000000..f3fedb57
--- /dev/null
+++ b/src/main/java/com/commafeed/CommaFeedModule.java
@@ -0,0 +1,37 @@
+package com.commafeed;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import org.hibernate.SessionFactory;
+
+import com.codahale.metrics.MetricRegistry;
+import com.commafeed.CommaFeedConfiguration.CacheType;
+import com.commafeed.backend.cache.CacheService;
+import com.commafeed.backend.cache.NoopCacheService;
+import com.commafeed.backend.cache.RedisCacheService;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+
+@RequiredArgsConstructor
+@Slf4j
+public class CommaFeedModule extends AbstractModule {
+
+ @Getter(onMethod = @__({ @Provides }))
+ private final SessionFactory sessionFactory;
+
+ @Getter(onMethod = @__({ @Provides }))
+ private final CommaFeedConfiguration config;
+
+ @Getter(onMethod = @__({ @Provides }))
+ private final MetricRegistry metrics;
+
+ @Override
+ protected void configure() {
+ CacheService cacheService = config.getApplicationSettings().getCache() == CacheType.NOOP ? new NoopCacheService()
+ : new RedisCacheService();
+ log.info("using cache {}", cacheService.getClass());
+ bind(CacheService.class).toInstance(cacheService);
+ }
+}
diff --git a/src/main/java/com/commafeed/backend/HttpGetter.java b/src/main/java/com/commafeed/backend/HttpGetter.java
index 43be6157..34b3f35f 100644
--- a/src/main/java/com/commafeed/backend/HttpGetter.java
+++ b/src/main/java/com/commafeed/backend/HttpGetter.java
@@ -8,11 +8,14 @@ import java.util.Arrays;
import java.util.List;
import java.util.Locale;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
@@ -51,6 +54,8 @@ import com.commafeed.CommaFeedConfiguration;
*
*/
@Slf4j
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class HttpGetter {
private static final String ACCEPT_LANGUAGE = "en";
@@ -93,7 +98,7 @@ public class HttpGetter {
}
}
- private final String userAgent;
+ private String userAgent;
public HttpGetter(CommaFeedConfiguration config) {
this.userAgent = String.format("CommaFeed/%s (https://www.commafeed.com)", config.getVersion());
diff --git a/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java
index fd47e85b..d8e94817 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java
@@ -2,6 +2,9 @@ package com.commafeed.backend.dao;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.apache.commons.lang.ObjectUtils;
import org.hibernate.SessionFactory;
@@ -12,10 +15,12 @@ import com.commafeed.backend.model.User;
import com.google.common.collect.Lists;
import com.mysema.query.types.Predicate;
+@Singleton
public class FeedCategoryDAO extends GenericDAO {
private QFeedCategory category = QFeedCategory.feedCategory;
+ @Inject
public FeedCategoryDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedDAO.java b/src/main/java/com/commafeed/backend/dao/FeedDAO.java
index 1fb70329..f8dad975 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedDAO.java
@@ -3,6 +3,9 @@ package com.commafeed.backend.dao;
import java.util.Date;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
import org.hibernate.SessionFactory;
@@ -15,10 +18,12 @@ import com.google.common.collect.Iterables;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.jpa.hibernate.HibernateQuery;
+@Singleton
public class FeedDAO extends GenericDAO {
private QFeed feed = QFeed.feed;
+ @Inject
public FeedDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java
index 0fc9be9a..b0239132 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java
@@ -2,6 +2,9 @@ package com.commafeed.backend.dao;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.hibernate.SessionFactory;
import com.commafeed.backend.model.FeedEntryContent;
@@ -9,10 +12,12 @@ import com.commafeed.backend.model.QFeedEntry;
import com.commafeed.backend.model.QFeedEntryContent;
import com.google.common.collect.Iterables;
+@Singleton
public class FeedEntryContentDAO extends GenericDAO {
private QFeedEntryContent content = QFeedEntryContent.feedEntryContent;
+ @Inject
public FeedEntryContentDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java
index d20c5bcc..65f9997f 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java
@@ -3,6 +3,9 @@ package com.commafeed.backend.dao;
import java.util.Date;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.apache.commons.codec.digest.DigestUtils;
import org.hibernate.SessionFactory;
@@ -13,10 +16,12 @@ import com.commafeed.backend.model.QFeedEntry;
import com.commafeed.backend.model.QFeedSubscription;
import com.google.common.collect.Iterables;
+@Singleton
public class FeedEntryDAO extends GenericDAO {
private QFeedEntry entry = QFeedEntry.feedEntry;
+ @Inject
public FeedEntryDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java
index a9749f30..a349c8ed 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java
@@ -4,6 +4,9 @@ import java.util.Comparator;
import java.util.Date;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.hibernate.SessionFactory;
@@ -29,6 +32,7 @@ import com.mysema.query.BooleanBuilder;
import com.mysema.query.Tuple;
import com.mysema.query.jpa.hibernate.HibernateQuery;
+@Singleton
public class FeedEntryStatusDAO extends GenericDAO {
private FeedEntryDAO feedEntryDAO;
@@ -40,6 +44,7 @@ public class FeedEntryStatusDAO extends GenericDAO {
private QFeedEntryContent content = QFeedEntryContent.feedEntryContent;
private QFeedEntryTag entryTag = QFeedEntryTag.feedEntryTag;
+ @Inject
public FeedEntryStatusDAO(SessionFactory sessionFactory, FeedEntryDAO feedEntryDAO, FeedEntryTagDAO feedEntryTagDAO,
CommaFeedConfiguration config) {
super(sessionFactory);
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java
index 9509c637..e2dc3ac9 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java
@@ -2,6 +2,9 @@ package com.commafeed.backend.dao;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.hibernate.SessionFactory;
import com.commafeed.backend.model.FeedEntry;
@@ -9,10 +12,12 @@ import com.commafeed.backend.model.FeedEntryTag;
import com.commafeed.backend.model.QFeedEntryTag;
import com.commafeed.backend.model.User;
+@Singleton
public class FeedEntryTagDAO extends GenericDAO {
private QFeedEntryTag tag = QFeedEntryTag.feedEntryTag;
+ @Inject
public FeedEntryTagDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java b/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java
index 60e9877d..efcddd62 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java
@@ -2,6 +2,9 @@ package com.commafeed.backend.dao;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.hibernate.SessionFactory;
import com.commafeed.backend.model.Feed;
@@ -15,10 +18,12 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.mysema.query.jpa.hibernate.HibernateQuery;
+@Singleton
public class FeedSubscriptionDAO extends GenericDAO {
private QFeedSubscription sub = QFeedSubscription.feedSubscription;
+ @Inject
public FeedSubscriptionDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/dao/UserDAO.java b/src/main/java/com/commafeed/backend/dao/UserDAO.java
index 96618f36..6159392f 100644
--- a/src/main/java/com/commafeed/backend/dao/UserDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/UserDAO.java
@@ -1,15 +1,20 @@
package com.commafeed.backend.dao;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.hibernate.SessionFactory;
import com.commafeed.backend.model.QUser;
import com.commafeed.backend.model.QUserRole;
import com.commafeed.backend.model.User;
+@Singleton
public class UserDAO extends GenericDAO {
private QUser user = QUser.user;
+ @Inject
public UserDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java b/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java
index 348c5954..883cd3ce 100644
--- a/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java
@@ -3,6 +3,9 @@ package com.commafeed.backend.dao;
import java.util.List;
import java.util.Set;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.hibernate.SessionFactory;
import com.commafeed.backend.model.QUserRole;
@@ -11,10 +14,12 @@ import com.commafeed.backend.model.UserRole;
import com.commafeed.backend.model.UserRole.Role;
import com.google.common.collect.Sets;
+@Singleton
public class UserRoleDAO extends GenericDAO {
private QUserRole role = QUserRole.userRole;
+ @Inject
public UserRoleDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java b/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java
index 0500f1bf..92e8afd5 100644
--- a/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java
@@ -1,15 +1,20 @@
package com.commafeed.backend.dao;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.hibernate.SessionFactory;
import com.commafeed.backend.model.QUserSettings;
import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserSettings;
+@Singleton
public class UserSettingsDAO extends GenericDAO {
private QUserSettings settings = QUserSettings.userSettings;
+ @Inject
public UserSettingsDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
diff --git a/src/main/java/com/commafeed/backend/feed/FaviconFetcher.java b/src/main/java/com/commafeed/backend/feed/FaviconFetcher.java
index 9224aabc..a7349422 100644
--- a/src/main/java/com/commafeed/backend/feed/FaviconFetcher.java
+++ b/src/main/java/com/commafeed/backend/feed/FaviconFetcher.java
@@ -3,7 +3,10 @@ package com.commafeed.backend.feed;
import java.util.Arrays;
import java.util.List;
-import lombok.AllArgsConstructor;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@@ -19,7 +22,8 @@ import com.commafeed.backend.HttpGetter.HttpResult;
*
*/
@Slf4j
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FaviconFetcher {
private static List ICON_MIMETYPE_BLACKLIST = Arrays.asList("application/xml", "text/html");
diff --git a/src/main/java/com/commafeed/backend/feed/FeedFetcher.java b/src/main/java/com/commafeed/backend/feed/FeedFetcher.java
index 6bb6b7eb..5c4239ba 100644
--- a/src/main/java/com/commafeed/backend/feed/FeedFetcher.java
+++ b/src/main/java/com/commafeed/backend/feed/FeedFetcher.java
@@ -3,7 +3,10 @@ package com.commafeed.backend.feed;
import java.io.IOException;
import java.util.Date;
-import lombok.AllArgsConstructor;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.StringUtils;
@@ -20,7 +23,8 @@ import com.commafeed.backend.model.Feed;
import com.rometools.rome.io.FeedException;
@Slf4j
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedFetcher {
private final FeedParser parser;
diff --git a/src/main/java/com/commafeed/backend/feed/FeedParser.java b/src/main/java/com/commafeed/backend/feed/FeedParser.java
index eba18969..baf87413 100644
--- a/src/main/java/com/commafeed/backend/feed/FeedParser.java
+++ b/src/main/java/com/commafeed/backend/feed/FeedParser.java
@@ -5,6 +5,10 @@ import java.text.DateFormat;
import java.util.Date;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@@ -29,6 +33,8 @@ import com.rometools.rome.io.FeedException;
import com.rometools.rome.io.SyndFeedInput;
@Slf4j
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedParser {
private static final String ATOM_10_URI = "http://www.w3.org/2005/Atom";
diff --git a/src/main/java/com/commafeed/backend/feed/FeedQueues.java b/src/main/java/com/commafeed/backend/feed/FeedQueues.java
index bfb61603..6dbe8249 100644
--- a/src/main/java/com/commafeed/backend/feed/FeedQueues.java
+++ b/src/main/java/com/commafeed/backend/feed/FeedQueues.java
@@ -6,6 +6,7 @@ import java.util.Map;
import java.util.Queue;
import javax.inject.Inject;
+import javax.inject.Singleton;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.time.DateUtils;
@@ -20,6 +21,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Queues;
+@Singleton
public class FeedQueues {
private final FeedDAO feedDAO;
diff --git a/src/main/java/com/commafeed/backend/feed/FeedRefreshTaskGiver.java b/src/main/java/com/commafeed/backend/feed/FeedRefreshTaskGiver.java
index 1a91c80e..e9ef087a 100644
--- a/src/main/java/com/commafeed/backend/feed/FeedRefreshTaskGiver.java
+++ b/src/main/java/com/commafeed/backend/feed/FeedRefreshTaskGiver.java
@@ -6,6 +6,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.inject.Inject;
+import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
@@ -22,6 +23,7 @@ import com.commafeed.backend.dao.UnitOfWork;
*
*/
@Slf4j
+@Singleton
public class FeedRefreshTaskGiver implements Managed {
private final SessionFactory sessionFactory;
diff --git a/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java b/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java
index 872ca8fa..e526a0a1 100644
--- a/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java
+++ b/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java
@@ -9,6 +9,9 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
@@ -36,6 +39,7 @@ import com.google.common.collect.Lists;
import com.google.common.util.concurrent.Striped;
@Slf4j
+@Singleton
public class FeedRefreshUpdater implements Managed {
private final SessionFactory sessionFactory;
@@ -54,6 +58,7 @@ public class FeedRefreshUpdater implements Managed {
private Meter feedUpdated;
private Meter entryInserted;
+ @Inject
public FeedRefreshUpdater(SessionFactory sessionFactory, FeedUpdateService feedUpdateService, PubSubService pubSubService,
FeedQueues queues, CommaFeedConfiguration config, MetricRegistry metrics, FeedSubscriptionDAO feedSubscriptionDAO,
CacheService cache) {
diff --git a/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java b/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java
index b846d10e..4192d3f1 100644
--- a/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java
+++ b/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java
@@ -5,6 +5,9 @@ import io.dropwizard.lifecycle.Managed;
import java.util.Date;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
@@ -24,6 +27,7 @@ import com.google.common.base.Optional;
*
*/
@Slf4j
+@Singleton
public class FeedRefreshWorker implements Managed {
private final FeedRefreshUpdater feedRefreshUpdater;
@@ -32,6 +36,7 @@ public class FeedRefreshWorker implements Managed {
private final CommaFeedConfiguration config;
private final FeedRefreshExecutor pool;
+ @Inject
public FeedRefreshWorker(FeedRefreshUpdater feedRefreshUpdater, FeedFetcher fetcher, FeedQueues queues, CommaFeedConfiguration config,
MetricRegistry metrics) {
this.feedRefreshUpdater = feedRefreshUpdater;
diff --git a/src/main/java/com/commafeed/backend/opml/OPMLExporter.java b/src/main/java/com/commafeed/backend/opml/OPMLExporter.java
index 385a4ea4..49e7011f 100644
--- a/src/main/java/com/commafeed/backend/opml/OPMLExporter.java
+++ b/src/main/java/com/commafeed/backend/opml/OPMLExporter.java
@@ -3,7 +3,10 @@ package com.commafeed.backend.opml;
import java.util.Date;
import java.util.List;
-import lombok.AllArgsConstructor;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import lombok.RequiredArgsConstructor;
import com.commafeed.backend.dao.FeedCategoryDAO;
import com.commafeed.backend.dao.FeedSubscriptionDAO;
@@ -14,7 +17,8 @@ import com.rometools.opml.feed.opml.Attribute;
import com.rometools.opml.feed.opml.Opml;
import com.rometools.opml.feed.opml.Outline;
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class OPMLExporter {
private final FeedCategoryDAO feedCategoryDAO;
diff --git a/src/main/java/com/commafeed/backend/opml/OPMLImporter.java b/src/main/java/com/commafeed/backend/opml/OPMLImporter.java
index 11233b7c..6ff2ddff 100644
--- a/src/main/java/com/commafeed/backend/opml/OPMLImporter.java
+++ b/src/main/java/com/commafeed/backend/opml/OPMLImporter.java
@@ -3,6 +3,10 @@ package com.commafeed.backend.opml;
import java.io.StringReader;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -20,18 +24,13 @@ import com.rometools.opml.feed.opml.Outline;
import com.rometools.rome.io.WireFeedInput;
@Slf4j
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class OPMLImporter {
- private FeedCategoryDAO feedCategoryDAO;
- private FeedSubscriptionService feedSubscriptionService;
- private CacheService cache;
-
- public OPMLImporter(FeedCategoryDAO feedCategoryDAO, FeedSubscriptionService feedSubscriptionService, CacheService cache) {
- super();
- this.feedCategoryDAO = feedCategoryDAO;
- this.feedSubscriptionService = feedSubscriptionService;
- this.cache = cache;
- }
+ private final FeedCategoryDAO feedCategoryDAO;
+ private final FeedSubscriptionService feedSubscriptionService;
+ private final CacheService cache;
public void importOpml(User user, String xml) {
xml = xml.substring(xml.indexOf('<'));
diff --git a/src/main/java/com/commafeed/backend/service/DatabaseCleaningService.java b/src/main/java/com/commafeed/backend/service/DatabaseCleaningService.java
index 699b09c7..30418bbe 100644
--- a/src/main/java/com/commafeed/backend/service/DatabaseCleaningService.java
+++ b/src/main/java/com/commafeed/backend/service/DatabaseCleaningService.java
@@ -5,6 +5,9 @@ import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -23,7 +26,8 @@ import com.commafeed.backend.model.FeedEntryStatus;
*
*/
@Slf4j
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class DatabaseCleaningService {
private static final int BATCH_SIZE = 100;
diff --git a/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java b/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java
index 8d63b073..2a4e1011 100644
--- a/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java
+++ b/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java
@@ -1,5 +1,8 @@
package com.commafeed.backend.service;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.RequiredArgsConstructor;
import org.apache.commons.codec.digest.DigestUtils;
@@ -9,7 +12,8 @@ import com.commafeed.backend.dao.FeedEntryContentDAO;
import com.commafeed.backend.feed.FeedUtils;
import com.commafeed.backend.model.FeedEntryContent;
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedEntryContentService {
private final FeedEntryContentDAO feedEntryContentDAO;
diff --git a/src/main/java/com/commafeed/backend/service/FeedEntryService.java b/src/main/java/com/commafeed/backend/service/FeedEntryService.java
index 0b644151..e3d0f4ed 100644
--- a/src/main/java/com/commafeed/backend/service/FeedEntryService.java
+++ b/src/main/java/com/commafeed/backend/service/FeedEntryService.java
@@ -3,6 +3,9 @@ package com.commafeed.backend.service;
import java.util.Date;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.RequiredArgsConstructor;
import com.commafeed.backend.cache.CacheService;
@@ -15,7 +18,8 @@ import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.User;
import com.google.common.collect.Lists;
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedEntryService {
private final FeedSubscriptionDAO feedSubscriptionDAO;
diff --git a/src/main/java/com/commafeed/backend/service/FeedEntryTagService.java b/src/main/java/com/commafeed/backend/service/FeedEntryTagService.java
index f902aad8..f640c045 100644
--- a/src/main/java/com/commafeed/backend/service/FeedEntryTagService.java
+++ b/src/main/java/com/commafeed/backend/service/FeedEntryTagService.java
@@ -3,6 +3,9 @@ package com.commafeed.backend.service;
import java.util.List;
import java.util.Map;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.RequiredArgsConstructor;
import com.commafeed.backend.dao.FeedEntryDAO;
@@ -14,7 +17,8 @@ import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedEntryTagService {
private final FeedEntryDAO feedEntryDAO;
diff --git a/src/main/java/com/commafeed/backend/service/FeedService.java b/src/main/java/com/commafeed/backend/service/FeedService.java
index d2c71cce..91be692e 100644
--- a/src/main/java/com/commafeed/backend/service/FeedService.java
+++ b/src/main/java/com/commafeed/backend/service/FeedService.java
@@ -2,6 +2,9 @@ package com.commafeed.backend.service;
import java.util.Date;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.RequiredArgsConstructor;
import org.apache.commons.codec.digest.DigestUtils;
@@ -10,7 +13,8 @@ import com.commafeed.backend.dao.FeedDAO;
import com.commafeed.backend.feed.FeedUtils;
import com.commafeed.backend.model.Feed;
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedService {
private final FeedDAO feedDAO;
diff --git a/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java b/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java
index d4e693bb..dbe6b542 100644
--- a/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java
+++ b/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java
@@ -3,6 +3,9 @@ package com.commafeed.backend.service;
import java.util.List;
import java.util.Map;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -23,7 +26,8 @@ import com.commafeed.frontend.model.UnreadCount;
import com.google.common.collect.Maps;
@Slf4j
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedSubscriptionService {
@SuppressWarnings("serial")
diff --git a/src/main/java/com/commafeed/backend/service/FeedUpdateService.java b/src/main/java/com/commafeed/backend/service/FeedUpdateService.java
index 6aa9ed5f..e0c68e17 100644
--- a/src/main/java/com/commafeed/backend/service/FeedUpdateService.java
+++ b/src/main/java/com/commafeed/backend/service/FeedUpdateService.java
@@ -2,7 +2,10 @@ package com.commafeed.backend.service;
import java.util.Date;
-import lombok.AllArgsConstructor;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import lombok.RequiredArgsConstructor;
import org.apache.commons.codec.digest.DigestUtils;
@@ -11,7 +14,8 @@ import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedEntryContent;
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedUpdateService {
private final FeedEntryDAO feedEntryDAO;
diff --git a/src/main/java/com/commafeed/backend/service/MailService.java b/src/main/java/com/commafeed/backend/service/MailService.java
index 23919710..63725079 100644
--- a/src/main/java/com/commafeed/backend/service/MailService.java
+++ b/src/main/java/com/commafeed/backend/service/MailService.java
@@ -2,6 +2,8 @@ package com.commafeed.backend.service;
import java.util.Properties;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
@@ -20,7 +22,8 @@ import com.commafeed.backend.model.User;
* Mailing service
*
*/
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class MailService {
private final CommaFeedConfiguration config;
diff --git a/src/main/java/com/commafeed/backend/service/PasswordEncryptionService.java b/src/main/java/com/commafeed/backend/service/PasswordEncryptionService.java
index 6a8a38a3..2a61b3c8 100644
--- a/src/main/java/com/commafeed/backend/service/PasswordEncryptionService.java
+++ b/src/main/java/com/commafeed/backend/service/PasswordEncryptionService.java
@@ -9,7 +9,10 @@ import java.security.spec.KeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@@ -17,6 +20,8 @@ import org.apache.commons.lang.StringUtils;
// taken from http://www.javacodegeeks.com/2012/05/secure-password-storage-donts-dos-and.html
@SuppressWarnings("serial")
@Slf4j
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class PasswordEncryptionService implements Serializable {
public boolean authenticate(String attemptedPassword, byte[] encryptedPassword, byte[] salt) {
diff --git a/src/main/java/com/commafeed/backend/service/PubSubService.java b/src/main/java/com/commafeed/backend/service/PubSubService.java
index f8d5594f..0a93240d 100644
--- a/src/main/java/com/commafeed/backend/service/PubSubService.java
+++ b/src/main/java/com/commafeed/backend/service/PubSubService.java
@@ -2,6 +2,8 @@ package com.commafeed.backend.service;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.ws.rs.core.MediaType;
import lombok.RequiredArgsConstructor;
@@ -31,7 +33,8 @@ import com.google.common.collect.Lists;
*
*/
@Slf4j
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class PubSubService {
private final CommaFeedConfiguration config;
diff --git a/src/main/java/com/commafeed/backend/service/StartupService.java b/src/main/java/com/commafeed/backend/service/StartupService.java
index 474e6627..ff3e95b8 100644
--- a/src/main/java/com/commafeed/backend/service/StartupService.java
+++ b/src/main/java/com/commafeed/backend/service/StartupService.java
@@ -5,6 +5,8 @@ import io.dropwizard.lifecycle.Managed;
import java.sql.Connection;
import java.util.Arrays;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.sql.DataSource;
import liquibase.Liquibase;
@@ -15,6 +17,7 @@ import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor;
import liquibase.resource.ResourceAccessor;
import liquibase.structure.DatabaseObject;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.SessionFactory;
@@ -28,17 +31,13 @@ import com.commafeed.backend.dao.UserDAO;
import com.commafeed.backend.model.UserRole.Role;
@Slf4j
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class StartupService implements Managed {
- private SessionFactory sessionFactory;
- private UserDAO userDAO;
- private UserService userService;
-
- public StartupService(SessionFactory sessionFactory, UserDAO userDAO, UserService userService) {
- this.sessionFactory = sessionFactory;
- this.userDAO = userDAO;
- this.userService = userService;
- }
+ private final SessionFactory sessionFactory;
+ private final UserDAO userDAO;
+ private final UserService userService;
@Override
public void start() throws Exception {
diff --git a/src/main/java/com/commafeed/backend/service/UserService.java b/src/main/java/com/commafeed/backend/service/UserService.java
index d709b8e2..90cda9b2 100644
--- a/src/main/java/com/commafeed/backend/service/UserService.java
+++ b/src/main/java/com/commafeed/backend/service/UserService.java
@@ -4,6 +4,8 @@ import java.util.Collection;
import java.util.Date;
import java.util.UUID;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
@@ -22,7 +24,8 @@ import com.commafeed.backend.model.UserRole.Role;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class UserService {
private static final String SESSION_KEY_USER = "user";
diff --git a/src/main/java/com/commafeed/backend/task/OldStatusesCleanupTask.java b/src/main/java/com/commafeed/backend/task/OldStatusesCleanupTask.java
index a4ad8c41..23f7cb1a 100644
--- a/src/main/java/com/commafeed/backend/task/OldStatusesCleanupTask.java
+++ b/src/main/java/com/commafeed/backend/task/OldStatusesCleanupTask.java
@@ -3,13 +3,17 @@ package com.commafeed.backend.task;
import java.util.Date;
import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.RequiredArgsConstructor;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.service.DatabaseCleaningService;
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class OldStatusesCleanupTask implements ScheduledTask {
private final CommaFeedConfiguration config;
diff --git a/src/main/java/com/commafeed/backend/task/OrphansCleanupTask.java b/src/main/java/com/commafeed/backend/task/OrphansCleanupTask.java
index 31811235..0d54861b 100644
--- a/src/main/java/com/commafeed/backend/task/OrphansCleanupTask.java
+++ b/src/main/java/com/commafeed/backend/task/OrphansCleanupTask.java
@@ -2,12 +2,16 @@ package com.commafeed.backend.task;
import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import lombok.RequiredArgsConstructor;
import com.commafeed.backend.service.DatabaseCleaningService;
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class OrphansCleanupTask implements ScheduledTask {
private final DatabaseCleaningService cleaner;
diff --git a/src/main/java/com/commafeed/frontend/resource/AdminREST.java b/src/main/java/com/commafeed/frontend/resource/AdminREST.java
index c1f6b9cb..08e43ba5 100644
--- a/src/main/java/com/commafeed/frontend/resource/AdminREST.java
+++ b/src/main/java/com/commafeed/frontend/resource/AdminREST.java
@@ -5,6 +5,8 @@ import io.dropwizard.hibernate.UnitOfWork;
import java.util.Map;
import java.util.Set;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -15,7 +17,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils;
@@ -44,7 +46,8 @@ import com.wordnik.swagger.annotations.ApiParam;
@Api(value = "/admin", description = "Operations about application administration")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class AdminREST {
private final UserDAO userDAO;
diff --git a/src/main/java/com/commafeed/frontend/resource/CategoryREST.java b/src/main/java/com/commafeed/frontend/resource/CategoryREST.java
index c537a97c..73a5659a 100644
--- a/src/main/java/com/commafeed/frontend/resource/CategoryREST.java
+++ b/src/main/java/com/commafeed/frontend/resource/CategoryREST.java
@@ -10,6 +10,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
@@ -21,7 +23,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -69,7 +71,8 @@ import com.wordnik.swagger.annotations.ApiParam;
@Slf4j
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class CategoryREST {
public static final String ALL = "all";
diff --git a/src/main/java/com/commafeed/frontend/resource/EntryREST.java b/src/main/java/com/commafeed/frontend/resource/EntryREST.java
index d9c4771a..9a6afe60 100644
--- a/src/main/java/com/commafeed/frontend/resource/EntryREST.java
+++ b/src/main/java/com/commafeed/frontend/resource/EntryREST.java
@@ -4,6 +4,8 @@ import io.dropwizard.hibernate.UnitOfWork;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -12,7 +14,7 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
import com.commafeed.backend.dao.FeedEntryTagDAO;
import com.commafeed.backend.model.User;
@@ -32,7 +34,8 @@ import com.wordnik.swagger.annotations.ApiParam;
@Api(value = "/entry", description = "Operations about feed entries")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class EntryREST {
private final FeedEntryTagDAO feedEntryTagDAO;
diff --git a/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/src/main/java/com/commafeed/frontend/resource/FeedREST.java
index 7d42770d..ce0d72ea 100644
--- a/src/main/java/com/commafeed/frontend/resource/FeedREST.java
+++ b/src/main/java/com/commafeed/frontend/resource/FeedREST.java
@@ -12,6 +12,8 @@ import java.util.Comparator;
import java.util.Date;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
@@ -27,7 +29,7 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
@@ -86,7 +88,8 @@ import com.wordnik.swagger.annotations.ApiParam;
@Slf4j
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class FeedREST {
private final FeedSubscriptionDAO feedSubscriptionDAO;
diff --git a/src/main/java/com/commafeed/frontend/resource/PubSubHubbubCallbackREST.java b/src/main/java/com/commafeed/frontend/resource/PubSubHubbubCallbackREST.java
index 0a207139..cf6750ca 100644
--- a/src/main/java/com/commafeed/frontend/resource/PubSubHubbubCallbackREST.java
+++ b/src/main/java/com/commafeed/frontend/resource/PubSubHubbubCallbackREST.java
@@ -5,6 +5,8 @@ import io.dropwizard.hibernate.UnitOfWork;
import java.util.Date;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
@@ -35,7 +37,8 @@ import com.google.common.base.Preconditions;
@Path("/push")
@Slf4j
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class PubSubHubbubCallbackREST {
@Context
diff --git a/src/main/java/com/commafeed/frontend/resource/ServerREST.java b/src/main/java/com/commafeed/frontend/resource/ServerREST.java
index 537d9b9f..e3623f5e 100644
--- a/src/main/java/com/commafeed/frontend/resource/ServerREST.java
+++ b/src/main/java/com/commafeed/frontend/resource/ServerREST.java
@@ -2,6 +2,8 @@ package com.commafeed.frontend.resource;
import io.dropwizard.hibernate.UnitOfWork;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -11,7 +13,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils;
@@ -29,7 +31,8 @@ import com.wordnik.swagger.annotations.ApiOperation;
@Api(value = "/server", description = "Operations about server infos")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class ServerREST {
private final HttpGetter httpGetter;
diff --git a/src/main/java/com/commafeed/frontend/resource/UserREST.java b/src/main/java/com/commafeed/frontend/resource/UserREST.java
index 3ad33372..2dc0c807 100644
--- a/src/main/java/com/commafeed/frontend/resource/UserREST.java
+++ b/src/main/java/com/commafeed/frontend/resource/UserREST.java
@@ -9,6 +9,8 @@ import java.util.Collections;
import java.util.Date;
import java.util.UUID;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.servlet.http.HttpSession;
import javax.validation.ConstraintViolation;
import javax.validation.Valid;
@@ -22,7 +24,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
@@ -66,7 +68,8 @@ import com.wordnik.swagger.annotations.ApiParam;
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Slf4j
-@AllArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class UserREST {
private final UserDAO userDAO;
diff --git a/src/main/java/com/commafeed/frontend/servlet/AnalyticsServlet.java b/src/main/java/com/commafeed/frontend/servlet/AnalyticsServlet.java
index f26777b8..da51d07d 100644
--- a/src/main/java/com/commafeed/frontend/servlet/AnalyticsServlet.java
+++ b/src/main/java/com/commafeed/frontend/servlet/AnalyticsServlet.java
@@ -2,6 +2,8 @@ package com.commafeed.frontend.servlet;
import java.io.IOException;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -12,11 +14,13 @@ import org.apache.commons.lang.StringUtils;
import com.commafeed.CommaFeedConfiguration;
@SuppressWarnings("serial")
+@Singleton
public class AnalyticsServlet extends HttpServlet {
- private CommaFeedConfiguration config;
- private String script;
+ private final CommaFeedConfiguration config;
+ private final String script;
+ @Inject
public AnalyticsServlet(CommaFeedConfiguration config) {
this.config = config;
diff --git a/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java b/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java
index 866e2d3c..fab87004 100644
--- a/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java
+++ b/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java
@@ -2,6 +2,8 @@ package com.commafeed.frontend.servlet;
import java.io.IOException;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -19,7 +21,8 @@ import com.commafeed.backend.service.UserService;
import com.google.common.base.Optional;
@SuppressWarnings("serial")
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class CustomCssServlet extends HttpServlet {
private final SessionFactory sessionFactory;
diff --git a/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java b/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java
index 6500769d..021d1cae 100644
--- a/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java
+++ b/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java
@@ -2,6 +2,8 @@ package com.commafeed.frontend.servlet;
import java.io.IOException;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -12,7 +14,8 @@ import lombok.RequiredArgsConstructor;
import com.commafeed.CommaFeedConfiguration;
@SuppressWarnings("serial")
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class LogoutServlet extends HttpServlet {
private final CommaFeedConfiguration config;
diff --git a/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java b/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java
index 51690ec0..08704826 100644
--- a/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java
+++ b/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java
@@ -3,6 +3,8 @@ package com.commafeed.frontend.servlet;
import java.io.IOException;
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -29,7 +31,8 @@ import com.google.common.base.Optional;
import com.google.common.collect.Iterables;
@SuppressWarnings("serial")
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
+@Singleton
public class NextUnreadServlet extends HttpServlet {
private static final String PARAM_CATEGORYID = "category";