[jboss-svn-commits] JBL Code SVN: r6327 - in labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status: . common service service/impl

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 20 14:03:07 EDT 2006


Author: wrzep
Date: 2006-09-20 14:03:00 -0400 (Wed, 20 Sep 2006)
New Revision: 6327

Added:
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresUpdater.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresDailyUpdater.java
Modified:
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresManager.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresService.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java
Log:
http://jira.jboss.org/jira/browse/JBLAB-762
Pawel


Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -192,50 +192,5 @@
 		mainPageColumns.update(pluginsValues);
 		matrixTemplate.update(pluginsValues);
 	}
-	
-	/*
-	private void updateAsync(final PluginsValues pluginsValues) {
-		
-		new Thread() {
-			
-			public void run() {
-				
-				performUpdate(pluginsValues);
-			}
-			
-		}.start();
-		
-	}
-	
-	private void performUpdate(PluginsValues pluginsValues) {
-		
-		try {
-			scoresManager.save(projects, pluginsConf);
-			firstSave = true;
-			
-			pluginsValues = scoresManager.getLatestScores();
-		
-			refreshScores(pluginsValues);
-			log.info("Refreshed scores.");
-			
-		} catch (ScoresSaveException e) {
-			log.warn("Saving scores failed.", e);
-			
-		} catch (GetScoresException e) {
-			log.warn("Failed to get updated scores.", e);
-		}
-	}	
 
-
-	private boolean needsSave(Calendar date) {
-		
-		if (!firstSave) {
-			return true;
-		}
-		
-		Calendar now = Calendar.getInstance();
-		
-		return (now.get(Calendar.DAY_OF_MONTH) != date.get(Calendar.DAY_OF_MONTH));
-	}
-*/
 }
\ No newline at end of file

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -25,6 +25,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
+import org.jboss.forge.common.projects.Projects;
+import org.jboss.forge.common.projects.ProjectsHelper;
 import org.jboss.forge.status.common.Locations;
 import org.jboss.forge.status.service.ScoresManager;
 import org.jboss.forge.status.service.ScoresRepositoryManager;
@@ -72,14 +75,14 @@
 		this.portalName = portalName;
 		this.cm = cm;
 				
-		init();
+		init(portalName);
 		
 		initStatus();
 		
 		update();
 	}
 
-	private void init() {
+	private void init(String portalName) {
 		
 		try {
 		
@@ -93,6 +96,8 @@
 			Node pluginsNode = Tools.getRoot(cm, pluginsPath);
 			List<PluginConf> pluginsConf = Tools.getPluginsConfList(pluginsNode);
 			
+			Projects projects = ProjectsHelper.getProjects(portalName);
+			
 			repositoryManager = new DBScoresRepositoryManager();
 
 			scoresFactory = new DBScoresFactory();
@@ -101,7 +106,7 @@
 										   			 serviceConf,
 										   			 pluginsConf,
 										   			 repositoryManager,
-										   			 scoresFactory);
+										   			 scoresFactory, projects);
 			
 		} catch (Exception e) {
 	

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -11,10 +11,10 @@
 														  //"java:/ScoresService/local";
 	public static final String STATUS_REMOTE_SERVICE 	= "ScoresService/remote";
 											  			  //"java:/ScoresService/remote";
+	
+	public static final String DAILY_SCORES_UPDATER	= "DailyScoresUpdater/local";
 
 	public static final String DB_SERVICE 			= "ScoresDBService/local";
-	
-	public static final long CACHE_INTERVAL 			= 2*60*1000; /* milliseconds */
 
 	public static final String PROJECT_DETAILS_ACTION = "viewProjectDetails";
 
@@ -22,7 +22,13 @@
 
 	public static final long DEFAULT_PLUGIN_VALUE		 = 0;
 
+	public static final long CACHE_INTERVAL 			= 2*60*1000; /* milliseconds */
 	
+	public static final long SCORES_UPDATE_INTERVAL  = 15*60*1000; /* milliseconds */
+
+	public static final long FIRST_UPDATE_INTERVAL   = 60*1000;  /* milliseconds */
+
+	
 	/**
 	 * This class cannot be instatiated.
 	 */

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresManager.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresManager.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -22,11 +22,13 @@
 
 package org.jboss.forge.status.service;
 
+import java.io.Serializable;
 import java.util.Calendar;
 
 import javax.naming.NamingException;
 
 import org.jboss.forge.status.exceptions.GetScoresException;
+import org.jboss.forge.status.exceptions.ScoresSaveException;
 import org.jboss.forge.status.service.protocol.PluginsValues;
 
 
@@ -34,7 +36,7 @@
 * @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
 */
 
-public interface ScoresManager {
+public interface ScoresManager extends Serializable {
 	
 	public boolean hasScores(Calendar cal) throws NamingException;
 	
@@ -50,4 +52,6 @@
 
 	public long getValue(String id, String projectId,
 			Calendar start, Calendar end) throws GetScoresException;
+
+	public void save() throws ScoresSaveException;
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresService.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresService.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresService.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -39,9 +39,10 @@
 	
 	public void init(String portalName, ScoresManager scoresManager,
 			ScoresRepositoryManager repositoryManager,
-			ScoresFactory scoresFactory, List<PluginConf> pluginsConf);
+			ScoresFactory scoresFactory, List<PluginConf> pluginsConf,
+			Projects projects);
 	
-	public void save(Projects projects) throws ScoresSaveException;	
+	public void save() throws ScoresSaveException;	
 	
 	public PluginsValues getPluginsValues(Calendar cal)
 												throws GetScoresException;

Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresUpdater.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresUpdater.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresUpdater.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -0,0 +1,32 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.forge.status.service;
+
+/**
+* @author Pawel Wrzeszcz (pawel . wrzeszcz [at] jboss . com)
+*/
+public interface ScoresUpdater {
+	
+	public void init(ScoresManager scoresManager);
+	
+}
\ No newline at end of file

Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresDailyUpdater.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresDailyUpdater.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresDailyUpdater.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -0,0 +1,107 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.forge.status.service.impl;
+
+import java.util.Calendar;
+import javax.annotation.Resource;
+import javax.ejb.Local;
+import javax.ejb.Stateless;
+import javax.ejb.Timeout;
+import javax.ejb.Timer;
+
+import org.jboss.annotation.ejb.LocalBinding;
+
+import org.jboss.forge.status.common.Constants;
+import org.jboss.forge.status.exceptions.ScoresSaveException;
+import org.jboss.forge.status.service.ScoresManager;
+import org.jboss.forge.status.service.ScoresUpdater;
+
+import org.jboss.logging.Logger;
+
+/**
+* @author Pawel Wrzeszcz (pawel . wrzeszcz [at] jboss . com)
+*/
+
+ at Stateless
+ at Local(ScoresUpdater.class)
+ at LocalBinding(jndiBinding=Constants.DAILY_SCORES_UPDATER)
+public class ScoresDailyUpdater implements ScoresUpdater {
+
+	
+	@Resource private javax.ejb.TimerService timerService;
+	
+	private Logger log = Logger.getLogger(ScoresDailyUpdater.class);
+	
+	public void init(ScoresManager scoresManager) {
+	
+		 log.info("INIT ScoresManager: " + scoresManager);
+		
+		clearSchedule();
+		
+		scheduleUpdates(scoresManager);
+	}
+
+	@Timeout
+    public void update(Timer timer) {
+		
+       log.info("UPDATE!");
+       
+       ScoresManager scoresManager = (ScoresManager) timer.getInfo();
+       
+       log.info("ScoresManager: " + scoresManager);
+      
+       try {
+    	   scoresManager.save();
+    	   
+       } catch (ScoresSaveException e) {
+    	   
+    	   log.warn("Unable to update scores.\nCause: " + e.getMessage());
+       }
+    }
+	
+	private void clearSchedule() {
+    	
+        for (Object obj : timerService.getTimers( )) {
+         
+            Timer timer = (Timer) obj;
+            timer.cancel( );
+        }
+    }
+	
+	private void scheduleUpdates(ScoresManager scoresManager) {
+	
+		timerService.createTimer(Constants.FIRST_UPDATE_INTERVAL, 
+									scoresManager);
+		
+		Calendar cal = Calendar.getInstance();
+		cal.add(Calendar.DATE, 1);
+		cal.set(Calendar.HOUR_OF_DAY, 0);
+		cal.set(Calendar.MINUTE, 5);
+		//cal.add(Calendar.MINUTE, 2);
+		
+		timerService.createTimer(cal.getTime(),
+								Constants.SCORES_UPDATE_INTERVAL,
+									scoresManager);
+		
+	}
+}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -27,10 +27,12 @@
 
 import javax.ejb.Local;
 import javax.ejb.Remote;
-import javax.ejb.Stateful;
+import javax.ejb.TransactionAttribute;
+import javax.ejb.TransactionAttributeType;
 
 import org.jboss.annotation.ejb.LocalBinding;
 import org.jboss.annotation.ejb.RemoteBinding;
+import org.jboss.annotation.ejb.Service;
 import org.jboss.forge.common.projects.Projects;
 
 import org.jboss.forge.status.common.Constants;
@@ -52,7 +54,7 @@
 * @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
 */
 
- at Stateful
+ at Service
 @Local(ScoresServiceLocal.class)
 @LocalBinding(jndiBinding=Constants.STATUS_LOCAL_SERVICE)
 @Remote(ScoresServiceRemote.class)
@@ -68,12 +70,14 @@
 	private ScoresFactory scoresFactory;
 
 	private List<PluginConf> pluginsConf;
+	private Projects projects;
 	
 	
 	public void init(String portalName, ScoresManager scoresManager,
 								ScoresRepositoryManager repositoryManager,
 								ScoresFactory scoresFactory,
-								List<PluginConf> pluginsConf) {
+								List<PluginConf> pluginsConf,
+								Projects projects) {
 		
 		this.portalName = portalName;
 		
@@ -82,6 +86,7 @@
 		this.scoresFactory = scoresFactory;
 	
 		this.pluginsConf = pluginsConf;
+		this.projects = projects;
 		
 		log = Logger.getLogger(this.getClass());
 	}
@@ -94,7 +99,8 @@
 	 * @param portalName
 	 * @return true iff saving was successful
 	 */
-	public void save(Projects projects) throws ScoresSaveException {	
+	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
+	public void save() throws ScoresSaveException {	
 		
 		log.info("Getting plugins...");
 		
@@ -111,6 +117,8 @@
 		log.info("Saving...");
 		
 		repositoryManager.save(pluginsValues);
+		
+		log.info("Scores saved successfully");
 	}
 	
 	
@@ -154,6 +162,4 @@
 
 		return repositoryManager.getValue(pluginId, projectId, start, end);
 	}
-	
-	
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java	2006-09-20 16:59:20 UTC (rev 6326)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java	2006-09-20 18:03:00 UTC (rev 6327)
@@ -29,6 +29,7 @@
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
+
 import javax.rmi.PortableRemoteObject;
 
 import org.jboss.forge.common.projects.Projects;
@@ -40,12 +41,14 @@
 import org.jboss.forge.status.service.ScoresService;
 import org.jboss.forge.status.service.ScoresServiceLocal;
 import org.jboss.forge.status.service.ScoresServiceRemote;
+import org.jboss.forge.status.service.ScoresUpdater;
 import org.jboss.forge.status.service.protocol.PluginConf;
 import org.jboss.forge.status.service.protocol.PluginsValues;
 import org.jboss.forge.status.service.protocol.ScoresFactory;
 import org.jboss.forge.status.service.protocol.ServiceConf;
 import org.jboss.forge.status.tools.Tools;
 import org.jboss.forge.status.common.Constants;
+
 import org.jboss.logging.Logger;
 
 /**
@@ -53,6 +56,9 @@
 */
 
 public class ServiceScoresManager implements ScoresManager {
+
+
+	private static final long serialVersionUID = 0L;
 	
 	private Properties properties;
 	private boolean isRemote;
@@ -65,7 +71,8 @@
 									ServiceConf serviceConf,
 									List<PluginConf> pluginsConf,
 									ScoresRepositoryManager repositoryManager,
-									ScoresFactory scoresFactory)
+									ScoresFactory scoresFactory,
+									Projects projects)
 													throws ScoresException {
 		
 		properties = serviceConf.getProperties();
@@ -75,12 +82,13 @@
 		
 		try {
 			service = getService();
-			service.init(portalName, this, repositoryManager,
-												scoresFactory, pluginsConf);
+			service.init(portalName, this, repositoryManager, scoresFactory,
+										pluginsConf, projects);
 		} catch (NamingException e) {
 			throw new ScoresException(e);
 		}
 		
+		sheduleUpdates();
 	}
 	
 	public void saveAsync(final Projects projects,
@@ -104,7 +112,7 @@
 		
 		try {
 			log.info("Saving scores asynchronously...");
-			save(projects);
+			save();
 			asyncSave = true;
 			log.info("Finished async save.");
 		} catch (ScoresSaveException e) {
@@ -112,9 +120,9 @@
 		}
 	}
 
-	public void save(Projects projects) throws ScoresSaveException {
+	public void save() throws ScoresSaveException {
 
-		service.save(projects);		
+		service.save();		
 	}
 	
 	
@@ -232,4 +240,42 @@
 		
 		return service;
 	}
+	
+private void sheduleUpdates() {
+		
+		ScoresUpdater updater = getScoresUpdater();
+		
+		if (updater != null) {
+			
+			updater.init(this);
+		}
+	}
+
+	private ScoresUpdater getScoresUpdater() {
+				
+		ScoresUpdater updater;
+		
+		try {
+			Context context = new InitialContext();
+		
+			//	Perform look up using JNDI name of ejb object
+			String serviceBinding = Constants.DAILY_SCORES_UPDATER;
+			
+			Object ref = context.lookup(serviceBinding);
+			
+			// Narrow the reference of the object returned by lookup() method
+			updater = (ScoresUpdater) PortableRemoteObject.narrow( ref, 
+													ScoresUpdater.class);
+			
+		} catch (NamingException e) {
+			
+			log.warn("Unable to schedule updates." +
+											"\nCause: " + e.getMessage());
+			return null;
+		}
+		
+		
+		return updater;
+	}
+
 }




More information about the jboss-svn-commits mailing list