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";