From: <jbo...@li...> - 2006-05-17 16:42:14
|
Author: wrzep Date: 2006-05-17 12:41:58 -0400 (Wed, 17 May 2006) New Revision: 4286 Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/GetScoresRequestImpl.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/SaveRequestImpl.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/model/GetScoresRequest.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/model/SaveRequest.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/RecordManager.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManagerSync.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/TimestampedScore.java Removed: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManager.java Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/maven.xml 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/plugins/Last7DaysStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresMDB.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManagerAsync.java Log: JBLAB-599 rough MDB implementation Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/maven.xml =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/maven.xml 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/maven.xml 2006-05-17 16:41:58 UTC (rev 4286) @@ -8,21 +8,16 @@ <goal name="all"> <attainGoal name="prj-all" /> - <ant:copy tofile="${local.deploy.dir}/${forge.sar.name}/forge-status.ejb3" file="../${forge.sar.dir}/target/${forge.sar.name}/forge-status.ejb3" /> -<!-- <ant:copy tofile="${local.deploy.dir}/${forge.sar.name}/status-common.jar" file="../${forge.sar.dir}/target/${forge.sar.name}/status-common.jar" /> --> </goal> <goal name="build"> <attainGoal name="prj-war-build" /> <attainGoal name="ejb" /> -<!-- <ant:jar destfile="target/status-common.jar" basedir="target/classes" excludes="${status.portlet.classes} ${status.ejb3.classes}" /> --> </goal> <goal name="deploy"> <attainGoal name="prj-war-deploy" /> - <ant:copy tofile="../${forge.sar.dir}/target/${forge.sar.name}/forge-status.ejb3" file="target/forge-status-1.0.jar" /> -<!-- <ant:copy tofile="../${forge.sar.dir}/target/${forge.sar.name}/status-common.jar" file="target/status-common.jar" /> --> - <!-- <ant:copy tofile="${maven.repo.local}/jboss-forge/jars/status-common.jar" file="target/status-common.jar" /> --> + <ant:copy tofile="${local.deploy.dir}/forge-status.ejb3" file="target/forge-status-1.0.jar" /> </goal> <goal name="clean"> 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-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -44,7 +44,7 @@ import org.jboss.forge.status.templates.Column; import org.jboss.forge.status.templates.Columns; import org.jboss.forge.status.templates.MatrixTemplate; -import org.jboss.forge.status.tools.ScoresManager; +import org.jboss.forge.status.tools.ScoresManagerSync; import org.jboss.forge.status.tools.ScoresManagerAsync; import org.jboss.forge.status.tools.ServiceConf; import org.jboss.forge.status.tools.Tags; @@ -87,21 +87,17 @@ List<PluginConf> pluginsConf = getPluginsConfList(pluginsRoot); ServiceConf serviceConf = new ServiceConf(serviceNode); - ScoresManager.init(portalName, serviceConf); + ScoresManagerSync.init(portalName, serviceConf); PluginsValues pluginsValues; try { - //<debug> + // Compute and save current scores + ScoresManagerAsync.init(portalName, serviceConf); ScoresManagerAsync.save(projects, pluginsConf); - // </debug> + pluginsValues = ScoresManagerAsync.getCurrentScores(); - // Compute and save current scores - ScoresManager.save(projects, pluginsConf); - - pluginsValues = ScoresManager.getCurrentScores(); - } catch (ScoresSaveException e) { log.error("Saving scores failed ", e); return; Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Last7DaysStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Last7DaysStatusPlugin.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Last7DaysStatusPlugin.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -30,7 +30,7 @@ import org.jboss.forge.status.exceptions.InvalidPluginPropertiesException; import org.jboss.forge.status.exceptions.GetScoresException; import org.jboss.forge.status.tools.Plugins; -import org.jboss.forge.status.tools.ScoresManager; +import org.jboss.forge.status.tools.ScoresManagerSync; /** * @author Pawel Wrzeszcz (paw...@gm...) @@ -79,7 +79,7 @@ Date prev = cal.getTime(); try { - prevValue = ScoresManager.getValue( + prevValue = ScoresManagerSync.getValue( insidePlugin.getId(), projectId, prev,now); } catch (GetScoresException e) { return 0; Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/GetScoresRequestImpl.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/GetScoresRequestImpl.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/GetScoresRequestImpl.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -0,0 +1,63 @@ +/* + * 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.sql.Timestamp; +import java.util.Date; + +import org.jboss.forge.status.service.model.GetScoresRequest; + +/** +* @author Pawel Wrzeszcz +*/ +public class GetScoresRequestImpl implements GetScoresRequest { + + private static final long serialVersionUID = 7844595317056960170L; + + private Date date; + private Date toDate; + private Timestamp timestamp; + + public GetScoresRequestImpl(Date date, Date toDate, + Timestamp timestamp) { + + this.date = date; + this.toDate = toDate; + this.timestamp = timestamp; + } + + public Date getDate() { + return date; + } + + public Date getToDate() { + return toDate; + } + + public Timestamp getTimestamp() { + return timestamp; + } + + + +} \ No newline at end of file Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/SaveRequestImpl.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/SaveRequestImpl.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/SaveRequestImpl.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -0,0 +1,55 @@ +/* + * 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.List; + +import org.jboss.forge.common.projects.Projects; +import org.jboss.forge.status.service.model.PluginConf; +import org.jboss.forge.status.service.model.SaveRequest; + +/** +* @author Pawel Wrzeszcz +*/ +public class SaveRequestImpl implements SaveRequest { + + private static final long serialVersionUID = 7523633911740487129L; + + private List<PluginConf> pluginsConf; + private Projects projects; + + public SaveRequestImpl(List<PluginConf> pluginsConf, Projects projects) { + + this.pluginsConf = pluginsConf; + this.projects = projects; + } + + public List<PluginConf> getPluginsConf() { + return pluginsConf; + } + + public Projects getProjects() { + return projects; + } + +} \ No newline at end of file Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresMDB.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresMDB.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresMDB.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -22,40 +22,31 @@ package org.jboss.forge.status.service.impl; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.OutputStream; -import java.text.SimpleDateFormat; -import java.util.Calendar; +import java.sql.Timestamp; import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; -import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageListener; +import javax.jms.ObjectMessage; import org.jboss.forge.common.projects.Projects; import org.jboss.forge.status.exceptions.GetScoresException; import org.jboss.forge.status.exceptions.ScoresSaveException; +import org.jboss.forge.status.service.model.GetScoresRequest; import org.jboss.forge.status.service.model.PluginConf; -import org.jboss.forge.status.tools.Plugins; -import org.jboss.forge.status.tools.Tools; +import org.jboss.forge.status.service.model.PluginsValues; +import org.jboss.forge.status.service.model.SaveRequest; +import org.jboss.forge.status.tools.RecordManager; +import org.jboss.forge.status.tools.ScoresManagerSync; import org.jboss.logging.Logger; -import org.jboss.shotoku.ContentManager; -import org.jboss.shotoku.Directory; -import org.jboss.shotoku.Node; -import org.jboss.shotoku.aop.Inject; -import org.jboss.shotoku.exceptions.RepositoryException; -import org.jboss.shotoku.exceptions.ResourceDoesNotExist; + /** * @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com) */ @@ -69,294 +60,70 @@ }) public class ScoresMDB implements MessageListener { - private static Logger log = Logger.getLogger(ScoresServiceImpl.class); + private static Logger log = Logger.getLogger(ScoresMDB.class); - private Map<String,PluginsValuesImpl> values = new HashMap<String,PluginsValuesImpl>(); - @Inject - private ContentManager cm; - public void onMessage(Message msg) { - MapMessage message = (MapMessage) msg; + ObjectMessage message = (ObjectMessage) msg; try { - String request = message.getString("name"); + String requestName = message.getStringProperty("name"); + System.out.println("request name: " + requestName); - System.out.println("request name: " + request); - } catch (JMSException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - - } - - /** - * Saves current plugin values. - * - * @param projects Projects for which plugin values will be saved - * @param plugins Plugins for which values will be saved - * @param portalName - * @return true iff saving was successful - */ - public void save(Projects projects, List<PluginConf> pluginsConf, - String portalName) throws ScoresSaveException { - - log.info("Saving..."); - - // Get plugins from conf - Plugins plugins = new Plugins(pluginsConf, portalName, projects); - - // Get directory where we store historical scores - Directory rootDir = cm.getRootDirectory(); - String dirName = Tools.getShotokuStatusPath(portalName); - Directory dir = getDir(rootDir, dirName); - - log.info("Computing scores..."); - - // Get plugin values and save them in proper node - PluginsValuesImpl pluginsValues = new PluginsValuesImpl(projects, plugins); - - // Get node to store scores - String nodeName = getCurrentNodeName(); - Node node = null; - - log.info("Getting shotoku node..."); - - try { - node = dir.getNode(nodeName); - } catch (RepositoryException e) { - log.error("Error while getting shotoku node: " + - dir.getFullName() + "/" + nodeName, e); - throw new ScoresSaveException(e); - } catch (ResourceDoesNotExist e) { - node = createNode(dir, nodeName); - } - - // Save values and store then in cache - values.put(getCurrentNodeName(), pluginsValues); - save(node, pluginsValues); - } - - /** - * Saves plugins values in the given Directory. - * - * @param dir Directory to save values - * @param pluginsValues PluginsValues to save - * @throws ScoresSaveException - */ - private void save(Node node, PluginsValuesImpl pluginsValues) - throws ScoresSaveException { - - try { - OutputStream os = node.getOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(os); - oos.writeObject((PluginsValuesImpl) pluginsValues); - oos.close(); - node.save("update"); /* os is closed inside save() */ - log.info("Saved succesfully"); - } catch (Exception e) { - log.error("Error while saving shotoku node: " + - node.getFullName(), e); - throw new ScoresSaveException(e); - } - } - - /** - * Returns historical scores from the given <code>date</code> in the past. - * - * Notice that only year, month and day matter in passed dates. - * - * @return scores from the given date - * @throws GetScoresException - */ - public PluginsValuesImpl getPluginsValues(String portalName, Date date) - throws GetScoresException { - - log.info("Returning plugins values..."); - - // null date means today - if (date == null) { - Calendar cal = Calendar.getInstance(); - date = cal.getTime(); - } - - String key = getNodeName(date); - PluginsValuesImpl v = values.get(key); - - if (v == null) { // Not in cache => get value and store it - - log.info("Value not in cache..."); - Directory rootDir = cm.getRootDirectory(); - - Directory dir; - try { - dir = rootDir.getDirectory(Tools.getShotokuStatusPath(portalName)); - } catch (RepositoryException e) { - throw new GetScoresException(e); - } catch (ResourceDoesNotExist e) { - throw new GetScoresException(e); + if (requestName.equals("save")) { + + SaveRequest saveRequest = (SaveRequest) message.getObject(); + handleRequest(saveRequest); } + + if (requestName.equals("getPluginsValues")) { - if (dir != null) { - v = getPluginsValues(dir, date); - log.info("Finished."); - values.put(key,v); + GetScoresRequest getScoresRequest = + (GetScoresRequest) message.getObject(); + handleRequest(getScoresRequest); } - } - - return v; - } - - /** - * Returns historical scores from the specified directory. - * - * @param dir Directory to read scores from - * @return - * @throws GetScoresException - */ - private PluginsValuesImpl getPluginsValues(Directory dir, Date date) - throws GetScoresException { + - // Get appropriate node - Node node = null; - String nodeName = getNodeName(date); - - try { - node = dir.getNode(nodeName); - } catch (Exception e) { - log.error("Error while getting shotoku node " + - dir.getFullName() + "/" + nodeName); - throw new GetScoresException(e); + } catch (JMSException e) { + log.error(e); //TODO } - - // Restore values - PluginsValuesImpl values = null; - try { - InputStream is = node.getContentInputStream(); - ObjectInputStream ois = new ObjectInputStream(is); - values = (PluginsValuesImpl) ois.readObject(); - ois.close(); - is.close(); - } catch (Exception e) { - log.error("Error while restoring scores from shotoku node " + - dir.getFullName() + "/" + nodeName); - throw new GetScoresException(e); - } - - return values; } - - /** - * Creates new shotoku Node. - * - * @param dir Directory in which new Node will be created - * @param nodeName name of new Node - * @return Node - * @throws ScoresSaveException - */ - private Node createNode(Directory dir, String nodeName) - throws ScoresSaveException { + + private static void handleRequest(SaveRequest saveRequest) { - Node node = null; + Projects projects = saveRequest.getProjects(); + List<PluginConf> pluginsConf = saveRequest.getPluginsConf(); try { - node = dir.newNode(nodeName); - node.save("create"); - } catch (Exception e) { - log.error("Error while creating shotoku node: " + - dir.getFullName() + "/" + nodeName, e); - throw new ScoresSaveException(e); + ScoresManagerSync.save(projects, pluginsConf); + } catch (ScoresSaveException e) { + log.error(e); //TODO } - return node; - } - - /** - * Gets shotoku Directory with name <code>dirName</code> - * from specified shotoku Directory. - * If requested Directory does not exist it is created. - * - * @param rootDir Directory where search will be performed - * @param dirName name of searched Directory - * @return Directory with the given name - * or null when creating Directory failed. - * @throws ScoresSaveException - */ - private Directory getDir(Directory rootDir, String dirName) - throws ScoresSaveException { + System.out.println("SAVED"); - Directory dir = null; - - try { - dir = rootDir.getDirectory(dirName); - } catch (RepositoryException e) { - log.error("Error while getting shotoku directory " + - rootDir.getFullName() + "/" + dirName); - throw new ScoresSaveException(e); - } catch (ResourceDoesNotExist e) { - dir = createDir(rootDir, dirName); - } - - return dir; } - /** - * Creates new shotoku Directory. - * - * @param rootDir Directory in which new subdirectory will be created - * @param dirName name of new Directory - * @return Directory or null if errors occured - * @throws ScoresSaveException - */ - private Directory createDir(Directory rootDir, String dirName) - throws ScoresSaveException { + private static void handleRequest(GetScoresRequest getScoresRequest) { - Directory dir = null; + System.out.println("***"); + Date date = getScoresRequest.getDate(); + Date toDate = getScoresRequest.getToDate(); + Timestamp timestamp = getScoresRequest.getTimestamp(); + + PluginsValues pluginsValues = null; try { - dir = rootDir.newDirectory(dirName); - dir.save("create"); - } catch (Exception e) { - log.error("Error while creating shotoku directory: " + - rootDir.getFullName() + "/" + dirName, e); - throw new ScoresSaveException(e); + pluginsValues = ScoresManagerSync.getScores(date, toDate); + } catch (GetScoresException e) { + log.error(e); //TODO + return; //?? } - return dir; + RecordManager.add(timestamp, pluginsValues); + System.out.println("added! " + pluginsValues); } - - /** - * Gets name of Node containing saved data from specified datestamp. - * Notice that only year, month and day matter in passed <code>date</code>. - * - * @param date datestamp - * @return Node name - */ - private String getNodeName(Date date) { - - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - - return df.format(date); - } - /** - * @return name of Node containging data saved today - */ - private String getCurrentNodeName() { - - Calendar cal = Calendar.getInstance(); - Date today = cal.getTime(); - - return getNodeName(today); - } - - public PluginValuesImpl get(String portalName, String pluginId, Date date) - throws GetScoresException { - - PluginsValuesImpl pv = getPluginsValues(portalName, date); - return pv.getPluginValues(pluginId); - } } Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/model/GetScoresRequest.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/model/GetScoresRequest.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/model/GetScoresRequest.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -0,0 +1,40 @@ +/* + * 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.model; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.Date; + +/** +* @author Pawel Wrzeszcz +*/ +public interface GetScoresRequest extends Serializable { + + public Date getDate(); + + public Date getToDate(); + + public Timestamp getTimestamp(); + +} \ No newline at end of file Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/model/SaveRequest.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/model/SaveRequest.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/model/SaveRequest.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -0,0 +1,39 @@ +/* + * 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.model; + +import java.io.Serializable; +import java.util.List; + +import org.jboss.forge.common.projects.Projects; + +/** +* @author Pawel Wrzeszcz +*/ +public interface SaveRequest extends Serializable { + + public List<PluginConf> getPluginsConf(); + + public Projects getProjects(); + +} \ No newline at end of file Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/RecordManager.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/RecordManager.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/RecordManager.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -0,0 +1,44 @@ +package org.jboss.forge.status.tools; + +import java.sql.Timestamp; +import java.util.ArrayList; +import org.jboss.forge.status.service.model.PluginsValues; + +/** + * @author Pawel Wrzeszcz + */ +public class RecordManager { + + private static ArrayList<TimestampedScore> buff = + new ArrayList<TimestampedScore> (); + + private static int maxSize = 100; + + public static void add (Timestamp sent, PluginsValues pluginsValues) { + + // Remove the earliest item if the cache is full + if (buff.size () > maxSize) { + buff.remove (0); + } + + buff.add(new TimestampedScore(sent, pluginsValues)); + + System.out.println("added " + sent + " " + buff.size()); + } + + public static PluginsValues get(Timestamp sent) { + + System.out.println("get " + sent + " size=" + buff.size()); + + for (int i = 0; i < buff.size (); i++) { + + TimestampedScore ts = buff.get(i); System.out.print("get " + ts + " "); + + if (ts.getTimestamp().equals(sent)) { + return ts.getPluginsValues(); + } + } + return null; + } + +} Deleted: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManager.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManager.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManager.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -1,150 +0,0 @@ -/* - * 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.tools; - -import java.util.Date; -import java.util.List; -import java.util.Properties; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.jboss.forge.common.projects.Projects; -import org.jboss.forge.status.exceptions.GetScoresException; -import org.jboss.forge.status.exceptions.ScoresSaveException; -import org.jboss.forge.status.service.model.PluginConf; -import org.jboss.forge.status.service.model.PluginsValues; -import org.jboss.forge.status.service.model.ScoresService; -import org.jboss.forge.status.service.model.ScoresServiceLocal; -import org.jboss.forge.status.service.model.ScoresServiceRemote; - -/** -* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com) -*/ - -public class ScoresManager { - - private static String portalName; - private static boolean isRemote; - private static Properties properties; - - public static void init(String portalName, ServiceConf serviceConf) { - - ScoresManager.portalName = portalName; - - isRemote = serviceConf.isRemote(); - System.out.println("remote: " + isRemote); - - properties = serviceConf.getProperties(); - } - - public static void save(Projects projects, List<PluginConf> pluginsConf) - throws ScoresSaveException { - - ScoresService service = null; - - try { - service = getService(); - } catch (NamingException e) { - throw new ScoresSaveException(e); - } - - service.save(projects, pluginsConf, portalName); - } - - public static PluginsValues getScores(Date date, Date toDate) - throws GetScoresException { - - PluginsValues pluginsValues = null; - - try { - ScoresService service = getService(); - pluginsValues = service.getPluginsValues(portalName, date); - } catch (Exception e) { - throw new GetScoresException(e); - } - - if (pluginsValues == null) { - throw new GetScoresException(); - } - - return pluginsValues; - } - - /** - * For the specified plugin returns historical project score - * from the given <code>date</code> in the past. - * If scores from specified day are not available, - * the next available scores saved at the day before or equal - * to <code>toDate</code> are returned. - * - * Notice that only year, month and day matter in passed dates. - * - * @return project score from the given date for specified plugin - * @throws GetScoresException - */ - public static long getValue(String pluginId, String projectId, - Date date, Date toDate) - throws GetScoresException { - - PluginsValues pluginsValues = getScores(date, toDate); - - return pluginsValues.getPluginValue(pluginId, projectId); - } - - public static PluginsValues getCurrentScores() - throws GetScoresException { - - Date now = new Date(); - - return getScores(now, now); - } - - private static ScoresService getService() throws NamingException { - - Context context = new InitialContext(properties); - - // Perform look up using JNDI name of ejb object - String serviceBinding = - (isRemote ? Tools.STATUS_REMOTE_SERVICE : - Tools.STATUS_LOCAL_SERVICE); - Object ref = context.lookup(serviceBinding); - - // Narrow the reference of the object returned by lookup() method - ScoresService service = - (ScoresService) PortableRemoteObject.narrow( ref, - (isRemote ? ScoresServiceRemote.class : - ScoresServiceLocal.class)); - - return service; - } - - /* - * java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory - * java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces - * java.naming.provider.url=localhost:1099 - * jnp.disableDiscovery=true - */ -} Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManagerAsync.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManagerAsync.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManagerAsync.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -22,14 +22,14 @@ package org.jboss.forge.status.tools; +import java.io.Serializable; +import java.sql.Timestamp; import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Properties; import javax.jms.JMSException; -import javax.jms.MapMessage; +import javax.jms.ObjectMessage; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; @@ -38,11 +38,16 @@ import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; + import org.jboss.forge.common.projects.Projects; import org.jboss.forge.status.exceptions.GetScoresException; import org.jboss.forge.status.exceptions.ScoresSaveException; +import org.jboss.forge.status.service.impl.GetScoresRequestImpl; +import org.jboss.forge.status.service.impl.SaveRequestImpl; +import org.jboss.forge.status.service.model.GetScoresRequest; import org.jboss.forge.status.service.model.PluginConf; import org.jboss.forge.status.service.model.PluginsValues; +import org.jboss.forge.status.service.model.SaveRequest; /** * @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com) @@ -50,13 +55,12 @@ public class ScoresManagerAsync { - private static String portalName; private static boolean isRemote; private static Properties properties; public static void init(String portalName, ServiceConf serviceConf) { - ScoresManagerAsync.portalName = portalName; + ScoresManagerSync.init(portalName, serviceConf); //TODO inheritance isRemote = serviceConf.isRemote(); System.out.println("remote: " + isRemote); @@ -67,15 +71,13 @@ public static void save(Projects projects, List<PluginConf> pluginsConf) throws ScoresSaveException { - // Fill arguments - Map<String,Object> args = new HashMap<String,Object>(); - args.put("projects", projects); //TODO store these args names somewhere ;-) - args.put("pluginsConf", pluginsConf); - args.put("portalName", portalName); + SaveRequest saveRequest = new SaveRequestImpl(pluginsConf, projects); + //TODO request factory + //conf factory? // Send message try { - sendMessage("save", args); + sendMessage("save", saveRequest); } catch (Exception e) { throw new ScoresSaveException(e); } @@ -86,27 +88,39 @@ public static PluginsValues getScores(Date date, Date toDate) throws GetScoresException { //TODO toDate - - // Fill arguments - Map<String,Object> args = new HashMap<String,Object>(); - args.put("date", date); - args.put("portalName", portalName); + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + GetScoresRequest getScoresRequest = + new GetScoresRequestImpl(date, toDate, timestamp); + // Send message try { - sendMessage("getPluginsValues", args); + sendMessage("getPluginsValues", getScoresRequest); } catch (Exception e) { throw new GetScoresException(e); } - // TODO poll/wait for results + // poll/wait for results PluginsValues pluginsValues = null; + + for (;;) { //TODO when we give up? - if (pluginsValues == null) { - throw new GetScoresException(); - } + pluginsValues = RecordManager.get(timestamp); + + System.out.println("attempt: " + pluginsValues); + + if (pluginsValues != null) { + break; + } + + try { + Thread.sleep(2000); //TODO const + } catch (InterruptedException e) { + throw new GetScoresException(e); + } + } return pluginsValues; } @@ -140,7 +154,7 @@ return getScores(now, now); } - private static void sendMessage(String name, Map<String,Object> args) throws + private static void sendMessage(String name, Serializable request) throws NamingException, JMSException { Queue queue = null; @@ -149,19 +163,17 @@ QueueSender sender = null; Context context = new InitialContext(properties); - queue = (Queue) context.lookup("queue/jmm"); + queue = (Queue) context.lookup("queue/jmm"); //TODO const QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("ConnectionFactory"); connection = factory.createQueueConnection(); session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); - // Copy arguments into message - MapMessage message = session.createMapMessage(); - message.setString("name", name); - for (String argName : args.keySet()) { - message.setObject(argName, args.get(argName)); - } + // Create message + ObjectMessage message = session.createObjectMessage(); + message.setStringProperty("name", name); + message.setObject(request); sender = session.createSender(queue); sender.send(message); Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManagerSync.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManagerSync.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/ScoresManagerSync.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -0,0 +1,150 @@ +/* + * 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.tools; + +import java.util.Date; +import java.util.List; +import java.util.Properties; + +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.rmi.PortableRemoteObject; + +import org.jboss.forge.common.projects.Projects; +import org.jboss.forge.status.exceptions.GetScoresException; +import org.jboss.forge.status.exceptions.ScoresSaveException; +import org.jboss.forge.status.service.model.PluginConf; +import org.jboss.forge.status.service.model.PluginsValues; +import org.jboss.forge.status.service.model.ScoresService; +import org.jboss.forge.status.service.model.ScoresServiceLocal; +import org.jboss.forge.status.service.model.ScoresServiceRemote; + +/** +* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com) +*/ + +public class ScoresManagerSync { + + private static String portalName; + private static boolean isRemote; + private static Properties properties; + + public static void init(String portalName, ServiceConf serviceConf) { + + ScoresManagerSync.portalName = portalName; + + isRemote = serviceConf.isRemote(); + System.out.println("remote: " + isRemote); + + properties = serviceConf.getProperties(); + } + + public static void save(Projects projects, List<PluginConf> pluginsConf) + throws ScoresSaveException { + + ScoresService service = null; + + try { + service = getService(); + } catch (NamingException e) { + throw new ScoresSaveException(e); + } + + service.save(projects, pluginsConf, portalName); + } + + public static PluginsValues getScores(Date date, Date toDate) + throws GetScoresException { + + PluginsValues pluginsValues = null; + + try { + ScoresService service = getService(); + pluginsValues = service.getPluginsValues(portalName, date); + } catch (Exception e) { + throw new GetScoresException(e); + } + + if (pluginsValues == null) { + throw new GetScoresException(); + } + + return pluginsValues; + } + + /** + * For the specified plugin returns historical project score + * from the given <code>date</code> in the past. + * If scores from specified day are not available, + * the next available scores saved at the day before or equal + * to <code>toDate</code> are returned. + * + * Notice that only year, month and day matter in passed dates. + * + * @return project score from the given date for specified plugin + * @throws GetScoresException + */ + public static long getValue(String pluginId, String projectId, + Date date, Date toDate) + throws GetScoresException { + + PluginsValues pluginsValues = getScores(date, toDate); + + return pluginsValues.getPluginValue(pluginId, projectId); + } + + public static PluginsValues getCurrentScores() + throws GetScoresException { + + Date now = new Date(); + + return getScores(now, now); + } + + private static ScoresService getService() throws NamingException { + + Context context = new InitialContext(properties); + + // Perform look up using JNDI name of ejb object + String serviceBinding = + (isRemote ? Tools.STATUS_REMOTE_SERVICE : + Tools.STATUS_LOCAL_SERVICE); + Object ref = context.lookup(serviceBinding); + + // Narrow the reference of the object returned by lookup() method + ScoresService service = + (ScoresService) PortableRemoteObject.narrow( ref, + (isRemote ? ScoresServiceRemote.class : + ScoresServiceLocal.class)); + + return service; + } + + /* + * java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory + * java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces + * java.naming.provider.url=localhost:1099 + * jnp.disableDiscovery=true + */ +} Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/TimestampedScore.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/TimestampedScore.java 2006-05-17 16:21:54 UTC (rev 4285) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/TimestampedScore.java 2006-05-17 16:41:58 UTC (rev 4286) @@ -0,0 +1,30 @@ +package org.jboss.forge.status.tools; + +import java.sql.Timestamp; + +import org.jboss.forge.status.service.model.PluginsValues; + +/** + * @author Pawel Wrzeszcz + */ +public class TimestampedScore { + + private Timestamp timestamp; + private PluginsValues pluginsValues; + + public TimestampedScore(Timestamp timestamp, PluginsValues pluginsValues) { + + this.timestamp = timestamp; + this.pluginsValues = pluginsValues; + } + + public Timestamp getTimestamp() { + return timestamp; + } + + public PluginsValues getPluginsValues() { + return pluginsValues; + } + + +} |