From 32376bcdb8a4b97e5dde7d8d18b668279a946550 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Wed, 15 Mar 2017 09:04:26 +0000 Subject: [PATCH] modified to be more robust git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portal/social-mail-servlet@144929 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../org/gcube/portal/EmailParserThread.java | 11 --- .../gcube/portal/PortalSchedulerService.java | 83 +++++++++++++++++-- .../gcube/portal/socialmail/PeriodicTask.java | 55 ++---------- 3 files changed, 82 insertions(+), 67 deletions(-) delete mode 100644 src/main/java/org/gcube/portal/EmailParserThread.java diff --git a/src/main/java/org/gcube/portal/EmailParserThread.java b/src/main/java/org/gcube/portal/EmailParserThread.java deleted file mode 100644 index 5f8875c..0000000 --- a/src/main/java/org/gcube/portal/EmailParserThread.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.gcube.portal; - -public class EmailParserThread implements Runnable { - - @Override - public void run() { - // TODO Auto-generated method stub - - } - -} diff --git a/src/main/java/org/gcube/portal/PortalSchedulerService.java b/src/main/java/org/gcube/portal/PortalSchedulerService.java index 5e549d6..c29bc86 100644 --- a/src/main/java/org/gcube/portal/PortalSchedulerService.java +++ b/src/main/java/org/gcube/portal/PortalSchedulerService.java @@ -6,7 +6,6 @@ import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.concurrent.Executors; @@ -19,14 +18,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.gcube.common.encryption.StringEncrypter; -import org.gcube.common.portal.GCubePortalConstants; import org.gcube.common.portal.PortalContext; import org.gcube.common.resources.gcore.ServiceEndpoint; import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portal.databook.server.DBCassandraAstyanaxImpl; import org.gcube.portal.databook.server.DatabookStore; -import org.gcube.portal.notifications.thread.LikeNotificationsThread; import org.gcube.portal.socialmail.EmailPopAccount; import org.gcube.portal.socialmail.PeriodicTask; import org.gcube.resources.discovery.client.api.DiscoveryClient; @@ -49,9 +46,11 @@ import com.liferay.portal.service.VirtualHostLocalServiceUtil; public class PortalSchedulerService extends HttpServlet { private static final Logger _log = LoggerFactory.getLogger(PortalSchedulerService.class); + private static final String POP3_POLLING_MINUTES_INTERVAL = "pop3pollinginminutes"; private static final String POP3_SERVER_NAME = "Pop3MailServer"; + private static DatabookStore store; public void init() { @@ -71,14 +70,86 @@ public class PortalSchedulerService extends HttpServlet { } String toReturn = "
Check Notification Email Starting ...
"; - Thread likesThread = new Thread(new PeriodicTask(store, popAccount, request)); - likesThread.start(); + + int pollingInterval = getPollingInterval(); + + ScheduledExecutorService pop3Scheduler = Executors.newScheduledThreadPool(1); + pop3Scheduler.scheduleAtFixedRate(new PeriodicTask(store, popAccount, request), 0, pollingInterval, TimeUnit.MINUTES); + String portalName = "unknown"; + try { + popAccount.getPortalName() ; + } + catch (NullPointerException e){ + _log.warn("Could not read popAccount data portal name", e); + } + _log.info("EmailParser stared for " + portalName + ", pollingInterval (in minutes)=" + pollingInterval); + + boolean keepPolling = true; + while (keepPolling) { + try { + int newPolling = getPollingInterval(); + if (newPolling <= 0) { + pop3Scheduler.shutdown(); + _log.info("EmailParser stopped for " + popAccount.getPortalName() + ", found value less than 1 in gcube-data.properties file under $CATALINA_HOME/conf"); + keepPolling = false; + } + else if (newPolling != pollingInterval) { + pollingInterval = newPolling; + pop3Scheduler.shutdown(); + _log.debug("Current thread EmailParser stopped, starting new one with different polling rate ... ->" + pollingInterval); + pop3Scheduler = Executors.newScheduledThreadPool(1); + pop3Scheduler.scheduleAtFixedRate(new PeriodicTask(store, popAccount, request), 0, pollingInterval, TimeUnit.MINUTES); + _log.debug("EmailParser restarts in " + pollingInterval + " minutes, to change this polling delay edit gcube-data.properties file under $CATALINA_HOME/conf"); + } + Thread.sleep(pollingInterval * 1000 * 60); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + toReturn = "
Check Notification Email Started ...
"; + // Thread likesThread = new Thread(new PeriodicTask(store, popAccount, request)); + // likesThread.start(); + response.setContentType("text/html"); response.getWriter().write(toReturn); } + /** + * read the time interval in minutes from a property file and returns it + */ + public int getPollingInterval() { + //get the portles to look for from the property file + Properties props = new Properties(); + int toReturn = 7; + + try { + String propertyfile = getCatalinaHome() + File.separator + "conf" + File.separator + "gcube-data.properties"; + File propsFile = new File(propertyfile); + FileInputStream fis = new FileInputStream(propsFile); + props.load(fis); + toReturn = Integer.parseInt(props.getProperty(POP3_POLLING_MINUTES_INTERVAL)); + } + //catch exception in case properties file does not exist + catch(IOException e) { + _log.error("gcube-data.properties file not found under $CATALINA_HOME/conf dir, returning default interval in minutes = " + toReturn); + return toReturn; + } + _log.debug("Returning poling interval in minutes: " + toReturn ); + return toReturn; + } + /** + * + * @return $CATALINA_HOME + */ + private static String getCatalinaHome() { + return (System.getenv("CATALINA_HOME").endsWith("/") ? System.getenv("CATALINA_HOME") : System.getenv("CATALINA_HOME")+"/"); + } + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {} /** @@ -162,5 +233,5 @@ public class PortalSchedulerService extends HttpServlet { } - + } \ No newline at end of file diff --git a/src/main/java/org/gcube/portal/socialmail/PeriodicTask.java b/src/main/java/org/gcube/portal/socialmail/PeriodicTask.java index c9d0089..093090a 100644 --- a/src/main/java/org/gcube/portal/socialmail/PeriodicTask.java +++ b/src/main/java/org/gcube/portal/socialmail/PeriodicTask.java @@ -74,8 +74,7 @@ import com.sun.mail.util.MailSSLSocketFactory; public class PeriodicTask implements Runnable { private static final Log _log = LogFactoryUtil.getLog(PeriodicTask.class); private static final String APP_ID_NEWSFEED = "org.gcube.portlets.user.newsfeed.server.NewsServiceImpl"; - private static final String POP3_POLLING_MINUTES_INTERVAL = "pop3pollinginminutes"; - + private DatabookStore socialStore; private EmailPopAccount popAccount; private SocialNetworkingSite site; @@ -94,55 +93,11 @@ public class PeriodicTask implements Runnable { @Override public void run() { - boolean keepPolling = true; - while (keepPolling) { - try { - _log.debug("PeriodicTask starting for portal/site having name: " + popAccount.getPortalName()); - check(popAccount.getPortalName(), popAccount.getPop3Server(), popAccount.getPop3user(), popAccount.getPop3password()); - int pollingInterval = getPollingInterval(); - if (pollingInterval > 0) { - _log.debug("EmailParser restarts in " + pollingInterval + " minutes, to change this polling delay edit gcube-data.properties file under $CATALINA_HOME/conf"); - Thread.sleep(pollingInterval * 1000 * 60); - } - else { - _log.info("EmailParser stopped for " + popAccount.getPortalName() + ", found value less than 1 in gcube-data.properties file under $CATALINA_HOME/conf"); - keepPolling = false; - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - /** - * read the time interval in minutes from a property file and returns it - */ - public int getPollingInterval() { - //get the portles to look for from the property file - Properties props = new Properties(); - int toReturn = 3; - - try { - String propertyfile = getCatalinaHome() + File.separator + "conf" + File.separator + "gcube-data.properties"; - File propsFile = new File(propertyfile); - FileInputStream fis = new FileInputStream(propsFile); - props.load(fis); - toReturn = Integer.parseInt(props.getProperty(POP3_POLLING_MINUTES_INTERVAL)); - } - //catch exception in case properties file does not exist - catch(IOException e) { - _log.error("gcube-data.properties file not found under $CATALINA_HOME/conf dir, returning default interval in minutes = " + toReturn); - return toReturn; - } - _log.debug("Returning poling interval in minutes: " + toReturn ); - return toReturn; - } - /** - * - * @return $CATALINA_HOME - */ - private static String getCatalinaHome() { - return (System.getenv("CATALINA_HOME").endsWith("/") ? System.getenv("CATALINA_HOME") : System.getenv("CATALINA_HOME")+"/"); + _log.debug("PeriodicTask starting for portal/site having name: " + popAccount.getPortalName()); + check(popAccount.getPortalName(), popAccount.getPop3Server(), popAccount.getPop3user(), popAccount.getPop3password()); } + + /** * @return a fake session usuful for Notifications */