[jboss-svn-commits] JBL Code SVN: r15236 - in labs/jbosslabs/trunk/stats-server/sources/metrics: common/src/java/org/jboss/labs/metrics/common/protocol and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 19 12:18:16 EDT 2007


Author: wrzep
Date: 2007-09-19 12:18:16 -0400 (Wed, 19 Sep 2007)
New Revision: 15236

Added:
   labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsInitJobListener.java
   labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsUpdateJob.java
Removed:
   labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/tools/ProjectTools.java
Modified:
   labs/jbosslabs/trunk/stats-server/sources/metrics/common/project.xml
   labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/protocol/ScoresService.java
   labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/protocol/conf/ScoresUpdater.java
   labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/tools/Tools.java
   labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/impl/ScoresDailyUpdater.java
   labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/impl/ScoresServiceImpl.java
   labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsInitJob.java
Log:
JBLAB-891
scheduling


Modified: labs/jbosslabs/trunk/stats-server/sources/metrics/common/project.xml
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/common/project.xml	2007-09-19 15:17:59 UTC (rev 15235)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/common/project.xml	2007-09-19 16:18:16 UTC (rev 15236)
@@ -19,6 +19,18 @@
 	<dependencies>
 
 		<dependency>
+			<groupId>jboss-forge</groupId>
+			<artifactId>forge-common</artifactId>
+			<version>1.0</version>
+		</dependency>
+
+		<dependency>
+			<groupId>quartz</groupId>
+			<artifactId>quartz</artifactId>
+			<version>1.5.2</version>
+		</dependency>
+
+		<dependency>
 			<groupId>jboss</groupId>
 			<artifactId>jboss-jmx</artifactId>
 			<version>1.0</version>

Modified: labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/protocol/ScoresService.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/protocol/ScoresService.java	2007-09-19 15:17:59 UTC (rev 15235)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/protocol/ScoresService.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -24,6 +24,8 @@
 
 import java.io.Serializable;
 
+import javax.naming.NamingException;
+
 import org.jboss.labs.metrics.common.protocol.conf.Configuration;
 
 
@@ -33,11 +35,11 @@
 
 public interface ScoresService extends Serializable {
 	
-	public void init(Configuration conf);
+	public void init(Configuration conf) throws NamingException;
 	
 	public void ping();
 	
-	public void save();
+	public void update();
 	
 	public Object invoke(org.jboss.invocation.Invocation mi) throws Exception;
 	

Modified: labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/protocol/conf/ScoresUpdater.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/protocol/conf/ScoresUpdater.java	2007-09-19 15:17:59 UTC (rev 15235)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/protocol/conf/ScoresUpdater.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -24,11 +24,15 @@
 
 import java.io.Serializable;
 
+import org.quartz.SchedulerException;
+
 /**
 * @author Pawel Wrzeszcz (pawel . wrzeszcz [at] jboss . com)
 */
 public interface ScoresUpdater extends Serializable {
 	
+	public void scheduleUpdate() throws SchedulerException;
+	
 	// Life cycle methods
 	
 	public void start () throws Exception;

Deleted: labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/tools/ProjectTools.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/tools/ProjectTools.java	2007-09-19 15:17:59 UTC (rev 15235)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/tools/ProjectTools.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -1,33 +0,0 @@
-package org.jboss.labs.metrics.common.tools;
-
-import java.util.Properties;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-
-import org.jboss.forge.common.ejb3.MetricsProjectsService;
-import org.jboss.logging.Logger;
-
-/**
- * @author Pawel Wrzeszcz
- */
-public class ProjectTools {
-	
-	private static Logger log = Logger.getLogger(ProjectTools.class);
-
-	public static MetricsProjectsService getProjectsService(Properties properties) {
-
-		try {
-			InitialContext ic = new InitialContext(properties);
-			return (MetricsProjectsService)ic.lookup("MetricsProjectsService");
-			
-			
-		} catch (NamingException e) {
-			log.warn("Unable to obtain Projects Service. " +
-					 "\nCause: " + e.getMessage());
-			log.debug("Properties: " + properties +". ",e);
-		}
-		
-		return null;
-	}
-}

Modified: labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/tools/Tools.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/tools/Tools.java	2007-09-19 15:17:59 UTC (rev 15235)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/common/src/java/org/jboss/labs/metrics/common/tools/Tools.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -20,6 +20,7 @@
 import javax.naming.NamingException;
 import javax.rmi.PortableRemoteObject;
 
+import org.jboss.forge.common.ejb3.MetricsProjectsService;
 import org.jboss.labs.metrics.common.Constants;
 import org.jboss.labs.metrics.common.protocol.ScoresService;
 import org.jboss.labs.metrics.common.protocol.conf.ScoresUpdater;
@@ -42,19 +43,6 @@
 		cal.set(Calendar.SECOND, 0);
 		cal.set(Calendar.MILLISECOND, 0);
 	}
-
-	public static List<String> getCommaSeparatedStrings(String s) {
-
-		List<String> list = new ArrayList<String>();
-        
-        StringTokenizer tokenizer = new StringTokenizer(s, ",");
-        
-        while(tokenizer.hasMoreTokens()) {
-            list.add(tokenizer.nextToken().trim());
-        }
-        
-        return list;
-	}	
 	
 	public static String formatDate(Calendar cal) {
 		
@@ -109,6 +97,12 @@
 		}
 	}
 
+	public static MetricsProjectsService getProjectsService(Properties properties) throws NamingException {
+
+		InitialContext ic = new InitialContext(properties);
+		return (MetricsProjectsService)ic.lookup("MetricsProjectsService");
+	}
+	
 	public static ScoresService getScoresService(Properties properties) throws NamingException {	
 		
 		log.debug("Looking up ScoresService. " +
@@ -147,24 +141,4 @@
 		
 		return updater;
 	}
-
-	public static int parseIntProperty(Properties properties, String element,
-														int defaultValue) {
-		
-		String string = (String) properties.get(element);
-	
-		if (string != null) {
-			
-			try {
-	
-				return Integer.parseInt(string);
-	
-			} catch (NumberFormatException e) {
-				
-				// Do nothing
-			}
-		}
-				
-		return defaultValue;
-	}
 }

Modified: labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/impl/ScoresDailyUpdater.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/impl/ScoresDailyUpdater.java	2007-09-19 15:17:59 UTC (rev 15235)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/impl/ScoresDailyUpdater.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -22,18 +22,20 @@
 
 package org.jboss.labs.metrics.service.impl;
 
-import java.util.Date;
-
+import java.util.Calendar;
 import org.jboss.annotation.ejb.Management;
 import org.jboss.annotation.ejb.Service;
 import org.jboss.labs.metrics.common.Constants;
-import org.jboss.labs.metrics.common.protocol.ScoresService;
 import org.jboss.labs.metrics.common.protocol.conf.ScoresUpdater;
 import org.jboss.labs.metrics.service.quartz.MetricsInitJob;
+import org.jboss.labs.metrics.service.quartz.MetricsInitJobListener;
+import org.jboss.labs.metrics.service.quartz.MetricsUpdateJob;
 import org.jboss.logging.Logger;
 import org.quartz.JobDetail;
+import org.quartz.JobListener;
 import org.quartz.Scheduler;
 import org.quartz.SchedulerException;
+import org.quartz.SimpleTrigger;
 import org.quartz.Trigger;
 import org.quartz.TriggerUtils;
 import org.quartz.impl.StdSchedulerFactory;
@@ -42,7 +44,7 @@
 * @author Pawel Wrzeszcz (pawel . wrzeszcz [at] jboss . com)
 */
 
-/*@Stateful
+/*@Stateless
 @Local(ScoresUpdater.class)
 @LocalBinding(jndiBinding=Constants.DAILY_SCORES_UPDATER)*/
 
@@ -50,39 +52,62 @@
 @Management(ScoresUpdater.class)
 public class ScoresDailyUpdater implements ScoresUpdater {
 
-
 	private static final long serialVersionUID = 2272792275281319486L;
 	
 	private Logger log = Logger.getLogger(ScoresDailyUpdater.class);
 	
+	private static Scheduler scheduler;
 	
 	public void start () throws Exception {
 	
 		log.info("ScoresDailyUpdater initialization");
 		
 		try {
-			scheduleUpdates();
+			scheduleInit();
 		} catch (SchedulerException e) {
 			log.warn("Quartz initialization failed", e);
 		}
 	}
 	
-	private void scheduleUpdates() throws SchedulerException {
+	private void scheduleInit() throws SchedulerException {
 	
-		 // Grab the Scheduler instance from the Factory 
-        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
+		if (scheduler == null) {
+			scheduler = StdSchedulerFactory.getDefaultScheduler();
+		}
 
-        // and start it off
         scheduler.start();
         
         JobDetail jobDetail = new JobDetail("metricsInitJob",
                 							null,
                 							MetricsInitJob.class);
-	
-        Trigger trigger = TriggerUtils.makeImmediateTrigger("metricsInitTrigger", 0, 60*1000);
-        trigger.setStartTime(new Date());
-        trigger.setName("metricsInitTrigger");
+        JobListener jobListener = new MetricsInitJobListener();
+        jobDetail.addJobListener(jobListener.getName());
+        
+        scheduler.addJobListener(jobListener);
+        
+        Calendar cal = Calendar.getInstance();
+        cal.add(Calendar.MINUTE, 1);
+        
+        Trigger trigger = TriggerUtils.makeImmediateTrigger("metricsInitTrigger", SimpleTrigger.REPEAT_INDEFINITELY, 60*1000);
+        trigger.setStartTime(cal.getTime());
+        trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
 
         scheduler.scheduleJob(jobDetail, trigger);
 	}
+	
+	public void scheduleUpdate() throws SchedulerException {
+		
+		if (scheduler == null) {
+			scheduler = StdSchedulerFactory.getDefaultScheduler();
+		}
+		
+		System.out.println("schedule update");
+		
+		JobDetail jobDetail = new JobDetail("meticsUpdateJob",
+											null,
+											MetricsUpdateJob.class);
+		Trigger trigger = TriggerUtils.makeDailyTrigger("metricsUpdateTrigger", 18, 18);
+		
+		scheduler.scheduleJob(jobDetail, trigger);
+	}
 }

Modified: labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/impl/ScoresServiceImpl.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/impl/ScoresServiceImpl.java	2007-09-19 15:17:59 UTC (rev 15235)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/impl/ScoresServiceImpl.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -23,7 +23,6 @@
 package org.jboss.labs.metrics.service.impl;
 
 import java.rmi.RMISecurityManager;
-import java.util.List;
 import java.util.Properties;
 
 import javax.naming.NamingException;
@@ -32,14 +31,9 @@
 import org.jboss.annotation.ejb.Service;
 
 import org.jboss.labs.metrics.common.Constants;
-import org.jboss.labs.metrics.common.exceptions.ScoresException;
 import org.jboss.labs.metrics.common.protocol.ScoresService;
 import org.jboss.labs.metrics.common.protocol.conf.Configuration;
-import org.jboss.labs.metrics.common.protocol.conf.ScoresUpdater;
-import org.jboss.labs.metrics.common.tools.ProjectTools;
 import org.jboss.labs.metrics.common.tools.Tools;
-import org.jboss.labs.metrics.service.DefaultConfiguration;
-
 import org.jboss.forge.common.ejb3.MetricsProjectsService;
 import org.jboss.invocation.Invocation;
 
@@ -60,8 +54,14 @@
 
 	private Properties projectsServiceProperties;
 		
-	public void init(Configuration conf) {
+	private boolean initialized = false;
+	
+	public void init(Configuration conf) throws NamingException {
 		
+		if (initialized) {
+			return;
+		}
+		
 		log.info("ScoresService initialization");
 		
 		if (System.getSecurityManager() == null) {
@@ -70,15 +70,16 @@
 		
 		projectsServiceProperties = conf.getProjectsServiceProperties();
 		
-		MetricsProjectsService service = ProjectTools.getProjectsService(projectsServiceProperties);
-		log.info("Service: " + service);
+		MetricsProjectsService service = Tools.getProjectsService(projectsServiceProperties);
 		
 		service.ping();
+		
+		initialized = true;
 	}
 
-	public void save() {
+	public void update() {
 		
-		// TODOs
+		log.debug("upate");
 	}
 
 	public void ping() {

Modified: labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsInitJob.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsInitJob.java	2007-09-19 15:17:59 UTC (rev 15235)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsInitJob.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -23,8 +23,6 @@
 package org.jboss.labs.metrics.service.quartz;
 
 import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-
 import org.jboss.labs.metrics.common.Constants;
 import org.jboss.labs.metrics.common.protocol.ScoresService;
 import org.jboss.labs.metrics.service.DefaultConfiguration;
@@ -33,12 +31,17 @@
 import org.jboss.mx.util.MBeanServerLocator;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
 
+/**
+ * @author Pawel Wrzeszcz (pwrzeszcz [at] jboss . org)
+ */
+
 public class MetricsInitJob implements Job {
 
 	private static Logger log = Logger.getLogger(MetricsInitJob.class);
 
-	public void execute(JobExecutionContext context) {
+	public void execute(JobExecutionContext context) throws JobExecutionException {
 
 		log.info("execute");
 		
@@ -51,8 +54,8 @@
 
 			scoresService.init(new DefaultConfiguration());
 			
-		} catch (MalformedObjectNameException e) {
-			log.warn("Unable to get ScoresService", e);
+		} catch (Exception e) {
+			throw new JobExecutionException(e, false);
 		}
 	}
 }

Added: labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsInitJobListener.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsInitJobListener.java	                        (rev 0)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsInitJobListener.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -0,0 +1,65 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC 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.labs.metrics.service.quartz;
+
+/**
+ * @author Pawel Wrzeszcz (pwrzeszcz [at] jboss . org)
+ */
+
+import org.jboss.labs.metrics.common.tools.Tools;
+import org.jboss.logging.Logger;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.JobListener;
+import org.quartz.SchedulerException;
+
+public class MetricsInitJobListener implements JobListener {
+
+	private static Logger log = Logger.getLogger(MetricsInitJobListener.class);
+	
+	public String getName() {
+		return "MetricsInitJobListener";
+	}
+
+	public void jobExecutionVetoed(JobExecutionContext context) {}
+
+	public void jobToBeExecuted(JobExecutionContext context) {}
+
+	public void jobWasExecuted(JobExecutionContext context,
+			JobExecutionException exception) {
+		
+		if (exception == null) {
+			try {
+				context.getScheduler().unscheduleJob("metricsInitTrigger", null);
+				
+				Tools.getScoresUpdater().scheduleUpdate();
+				
+			} catch (SchedulerException e) {
+				log.warn("Unable to unschedule job", e);
+			}
+			return;
+		}
+		
+		log.warn("MetricsInitJob execution failed. Rescheduling");
+	}
+}

Added: labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsUpdateJob.java
===================================================================
--- labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsUpdateJob.java	                        (rev 0)
+++ labs/jbosslabs/trunk/stats-server/sources/metrics/service/src/java/org/jboss/labs/metrics/service/quartz/MetricsUpdateJob.java	2007-09-19 16:18:16 UTC (rev 15236)
@@ -0,0 +1,60 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC 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.labs.metrics.service.quartz;
+
+import javax.management.MBeanServer;
+import org.jboss.labs.metrics.common.Constants;
+import org.jboss.labs.metrics.common.protocol.ScoresService;
+import org.jboss.logging.Logger;
+import org.jboss.mx.util.MBeanProxyExt;
+import org.jboss.mx.util.MBeanServerLocator;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+/**
+ * @author Pawel Wrzeszcz (pwrzeszcz [at] jboss . org)
+ */
+
+public class MetricsUpdateJob implements Job {
+
+	private static Logger log = Logger.getLogger(MetricsUpdateJob.class);
+
+	public void execute(JobExecutionContext context) throws JobExecutionException {
+
+		log.info("execute");
+		
+		try {
+			MBeanServer server = MBeanServerLocator.locate();
+
+			ScoresService scoresService = (ScoresService) MBeanProxyExt.create(
+					ScoresService.class, Constants.METRICS_SCORES_SERVICE,
+					server);
+
+			scoresService.update();
+			
+		} catch (Exception e) {
+			throw new JobExecutionException(e, false);
+		}
+	}
+}




More information about the jboss-svn-commits mailing list