[jboss-svn-commits] JBL Code SVN: r5106 - 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
Fri Jul 14 17:51:01 EDT 2006
Author: wrzep
Date: 2006-07-14 17:50:51 -0400 (Fri, 14 Jul 2006)
New Revision: 5106
Added:
labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/DBService.java
labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBScoresRepositoryManager.java
labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBServiceImpl.java
labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java
Removed:
labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/AsyncScoresManager.java
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/common/Constants.java
labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresRepositoryManager.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/ShotokuScoresRepositoryManager.java
Log:
JBLAB-689
Pawel
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-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -30,7 +30,7 @@
import org.jboss.forge.status.exceptions.ScoresException;
import org.jboss.forge.status.service.ScoresManager;
import org.jboss.forge.status.service.ScoresRepositoryManager;
-import org.jboss.forge.status.service.impl.AsyncScoresManager;
+import org.jboss.forge.status.service.impl.ServiceScoresManager;
import org.jboss.forge.status.service.impl.ShotokuScoresRepositoryManager;
import org.jboss.forge.status.service.impl.protocol.ServiceConfImpl;
import org.jboss.forge.status.service.protocol.ServiceConf;
@@ -86,10 +86,10 @@
ServiceConf serviceConf = new ServiceConfImpl(serviceNode);
ScoresRepositoryManager repositoryManager =
- new ShotokuScoresRepositoryManager();
+ new ShotokuScoresRepositoryManager(portalName);
// will be replaced by DBScoresRepositoryManager :]
- ScoresManager scoresManager = new AsyncScoresManager(portalName, serviceConf,
+ ScoresManager scoresManager = new ServiceScoresManager(portalName, serviceConf,
repositoryManager);
status = new Status(portalName, statusRoot, pluginsRoot,
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-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -5,14 +5,17 @@
*/
public class Constants {
- public static final int MAX_ATTEMPTS = 10;
+ public static final int MAX_ATTEMPTS = 10;
- public static final String STATUS_LOCAL_SERVICE = "ScoresService/local";
- //"java:/ScoresService/local";
- public static final String STATUS_REMOTE_SERVICE = "ScoresService/remote";
- //"java:/ScoresService/remote";
+ public static final String STATUS_LOCAL_SERVICE = "ScoresService/local";
+ //"java:/ScoresService/local";
+ public static final String STATUS_REMOTE_SERVICE = "ScoresService/remote";
+ //"java:/ScoresService/remote";
+
+ public static final String DB_SERVICE = "ScoresDBService/local";
- public static final long CACHE_INTERVAL = 5*60*1000; /* milliseconds */
+ public static final long CACHE_INTERVAL = 5*60*1000; /* milliseconds */
+
/**
* This class cannot be instatiated.
Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/DBService.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/DBService.java 2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/DBService.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -0,0 +1,31 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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] gmail.com)
+*/
+public interface DBService {
+
+ public void save();
+}
\ No newline at end of file
Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresRepositoryManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresRepositoryManager.java 2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresRepositoryManager.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -35,9 +35,9 @@
public interface ScoresRepositoryManager {
- public void save(PluginsValues pluginsValues, String portalName)
+ public void save(PluginsValues pluginsValues)
throws ScoresSaveException;
- public PluginsValues get(String portalName, Calendar cal)
+ public PluginsValues get(Calendar cal)
throws GetScoresException;
}
Deleted: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/AsyncScoresManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/AsyncScoresManager.java 2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/AsyncScoresManager.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -1,235 +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.service.impl;
-
-import java.util.Calendar;
-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.ScoresException;
-import org.jboss.forge.status.exceptions.ScoresSaveException;
-import org.jboss.forge.status.service.ScoresManager;
-import org.jboss.forge.status.service.ScoresRepositoryManager;
-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.protocol.PluginConf;
-import org.jboss.forge.status.service.protocol.PluginsValues;
-import org.jboss.forge.status.service.protocol.ServiceConf;
-import org.jboss.forge.status.common.Constants;
-import org.jboss.logging.Logger;
-
-/**
-* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
-*/
-
-public class AsyncScoresManager implements ScoresManager {
-
- private Properties properties;
- private boolean isRemote;
- private Logger log;
-
- ScoresService service;
-
- public AsyncScoresManager(String portalName, ServiceConf serviceConf,
- ScoresRepositoryManager repositoryManager)
- throws ScoresException {
-
-
- properties = serviceConf.getProperties();
- isRemote = serviceConf.isRemote();
-
- log = Logger.getLogger(this.getClass());
-
- try {
- service = getService();
- service.init(portalName, this, repositoryManager);
- } catch (NamingException e) {
- throw new ScoresException(e);
- }
-
- }
-
- public void saveAsync(final Projects projects,
- final List<PluginConf> pluginsConf) {
-
- new Thread() {
-
- public void run() {
- saveAsyncOnce(projects, pluginsConf);
- }
-
- }.start();
-
- }
-
- private synchronized void saveAsyncOnce(Projects projects,
- List<PluginConf> pluginsConf) {
- try {
- log.info("Saving scores asynchronously...");
- save(projects, pluginsConf);
- log.info("Finished async save.");
- } catch (ScoresSaveException e) {
- log.warn("Async saving scores failed.");
- }
- }
-
- public void save(Projects projects,
- List<PluginConf> pluginsConf)
- throws ScoresSaveException {
-
- service.save(projects, pluginsConf);
- }
-
-
- public boolean hasScores(Calendar cal) throws NamingException {
-
- return service.hasPluginsValues(cal);
- }
-
-
- public PluginsValues getScores(Calendar cal)
- throws GetScoresException {
-
- PluginsValues pluginsValues = null;
-
- try {
- pluginsValues = service.getPluginsValues(cal);
- } catch (Exception e) {
- throw new GetScoresException(e);
- }
-
- if (pluginsValues == null) {
- throw new GetScoresException();
- }
-
- return pluginsValues;
- }
-
-
- public PluginsValues getLatestScores()
- throws GetScoresException {
-
- Calendar cal = Calendar.getInstance();
- int attempts = 0;
-
- for(;;) {
-
- System.out.println("Trying " + cal.getTime().toString());
-
- boolean hasScores;
-
- try {
- hasScores = hasScores(cal);
- } catch (NamingException e) {
- throw new GetScoresException(e);
- }
-
- if (hasScores) {
- return getScores(cal);
- }
-
- if ((++attempts) == Constants.MAX_ATTEMPTS) {
- throw new GetScoresException(
- "Can not find any recently saved scores. " +
- "Gave up after " + attempts + " attempts.");
- }
-
- cal.add(Calendar.DAY_OF_MONTH, -1);
- }
- }
-
-
- /**
- * For the specified plugin returns historical project score
- * from the given <code>date</code> in the past.
- *
- * Notice that only year, month and day matter in passed dates.
- *
- * @return project score from the given date for specified plugin
- * @throws GetScoresException
- */
- public long getValue(String pluginId, String projectId,
- Calendar cal)
- throws GetScoresException {
-
- PluginsValues pluginsValues = getScores(cal);
-
- return pluginsValues.getPluginValue(pluginId, projectId);
- }
-
- public long getValue(String id, String projectId,
- Calendar start, Calendar end) throws GetScoresException {
-
- long value;
- Calendar cal = start;
-
- for (;;) {
-
- if (cal.after(end)) {
- throw new GetScoresException();
- }
-
- try {
- value = getValue(id, projectId, cal);
- return value;
- } catch (GetScoresException e) {
- // try next
- cal.add(Calendar.DAY_OF_MONTH, 1);
- }
- }
- }
-
- private ScoresService getService() throws NamingException {
-
- Context context = null;
- if (isRemote) {
- context = new InitialContext(properties);
- } else {
- context = new InitialContext();
- }
-
- // Perform look up using JNDI name of ejb object
- String serviceBinding =
- (isRemote ? Constants.STATUS_REMOTE_SERVICE :
- Constants.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;
- }
-
-}
Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBScoresRepositoryManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBScoresRepositoryManager.java 2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBScoresRepositoryManager.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -0,0 +1,83 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.rmi.PortableRemoteObject;
+
+import org.jboss.forge.status.common.Constants;
+import org.jboss.forge.status.exceptions.GetScoresException;
+import org.jboss.forge.status.exceptions.ScoresSaveException;
+import org.jboss.forge.status.service.DBService;
+import org.jboss.forge.status.service.ScoresRepositoryManager;
+import org.jboss.forge.status.service.protocol.PluginsValues;
+
+
+/**
+* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
+*/
+
+public class DBScoresRepositoryManager
+ implements ScoresRepositoryManager {
+
+
+ private String portalName;
+
+ private DBService service;
+
+ public DBScoresRepositoryManager(String portalName)
+ throws NamingException {
+
+ this.portalName = portalName;
+
+ service = getService();
+ };
+
+ public void save(PluginsValues pluginsValues) throws ScoresSaveException {
+
+ service.save();
+ }
+
+ public PluginsValues get(Calendar cal) throws GetScoresException {
+
+ return null;
+ }
+
+ private DBService getService() throws NamingException {
+
+ Context context = new InitialContext();
+
+ // Perform look up using JNDI name of ejb object
+ Object ref = context.lookup(Constants.DB_SERVICE);
+
+ // Narrow the reference of the object returned by lookup() method
+ DBService service =
+ (DBService) PortableRemoteObject.narrow( ref, DBService.class);
+
+ return service;
+ }
+}
Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBServiceImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBServiceImpl.java 2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBServiceImpl.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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 javax.ejb.Local;
+import javax.ejb.Stateful;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.jboss.annotation.ejb.LocalBinding;
+
+import org.jboss.forge.status.common.Constants;
+import org.jboss.forge.status.service.DBService;
+
+
+/**
+* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
+*/
+
+ at Stateful
+ at Local(DBService.class)
+ at LocalBinding(jndiBinding=Constants.DB_SERVICE)
+public class DBServiceImpl implements DBService {
+
+ @PersistenceContext (unitName="scores")
+ protected EntityManager em;
+
+ public void save() {
+
+ ScoresEntity se = new ScoresEntity();
+ em.persist(se);
+ System.out.println("entity saved");
+ }
+
+
+}
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-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -28,9 +28,11 @@
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateful;
+import javax.naming.NamingException;
import org.jboss.annotation.ejb.LocalBinding;
import org.jboss.annotation.ejb.RemoteBinding;
+
import org.jboss.forge.common.projects.Projects;
import org.jboss.forge.status.common.Constants;
@@ -65,6 +67,7 @@
private ScoresManager scoresManager;
private ScoresRepositoryManager repositoryManager;
+
public void init(String portalName, ScoresManager scoresManager,
ScoresRepositoryManager repositoryManager) {
@@ -85,10 +88,8 @@
* @return true iff saving was successful
*/
public void save(Projects projects, List<PluginConf> pluginsConf)
- throws ScoresSaveException {
+ throws ScoresSaveException {
- System.out.println("log: " + log + " portalName: " + portalName);
-
log.info("Getting plugins...");
// Get plugins from conf
@@ -101,7 +102,21 @@
PluginsValuesImpl pluginsValues = new PluginsValuesImpl(projects, plugins);
log.info("Saving...");
- repositoryManager.save(pluginsValues, portalName);
+
+ repositoryManager.save(pluginsValues);
+
+ // <DEBUG>
+
+ ScoresRepositoryManager dbrm;
+ try {
+ dbrm = new DBScoresRepositoryManager(portalName);
+ dbrm.save(pluginsValues);
+ } catch (NamingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ // </DEBUG>
}
@@ -117,7 +132,7 @@
public PluginsValues getPluginsValues(Calendar cal)
throws GetScoresException {
- return repositoryManager.get(portalName, cal);
+ return repositoryManager.get(cal);
}
public boolean hasPluginsValues(Calendar cal) {
Added: 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-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -0,0 +1,234 @@
+/*
+ * 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 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.ScoresException;
+import org.jboss.forge.status.exceptions.ScoresSaveException;
+import org.jboss.forge.status.service.ScoresManager;
+import org.jboss.forge.status.service.ScoresRepositoryManager;
+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.protocol.PluginConf;
+import org.jboss.forge.status.service.protocol.PluginsValues;
+import org.jboss.forge.status.service.protocol.ServiceConf;
+import org.jboss.forge.status.common.Constants;
+import org.jboss.logging.Logger;
+
+/**
+* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
+*/
+
+public class ServiceScoresManager implements ScoresManager {
+
+ private Properties properties;
+ private boolean isRemote;
+ private Logger log;
+
+ ScoresService service;
+
+ public ServiceScoresManager(String portalName, ServiceConf serviceConf,
+ ScoresRepositoryManager repositoryManager)
+ throws ScoresException {
+
+ properties = serviceConf.getProperties();
+ isRemote = serviceConf.isRemote();
+
+ log = Logger.getLogger(this.getClass());
+
+ try {
+ service = getService();
+ service.init(portalName, this, repositoryManager);
+ } catch (NamingException e) {
+ throw new ScoresException(e);
+ }
+
+ }
+
+ public void saveAsync(final Projects projects,
+ final List<PluginConf> pluginsConf) {
+
+ new Thread() {
+
+ public void run() {
+ saveAsyncOnce(projects, pluginsConf);
+ }
+
+ }.start();
+
+ }
+
+ private synchronized void saveAsyncOnce(Projects projects,
+ List<PluginConf> pluginsConf) {
+ try {
+ log.info("Saving scores asynchronously...");
+ save(projects, pluginsConf);
+ log.info("Finished async save.");
+ } catch (ScoresSaveException e) {
+ log.warn("Async saving scores failed.");
+ }
+ }
+
+ public void save(Projects projects,
+ List<PluginConf> pluginsConf)
+ throws ScoresSaveException {
+
+ service.save(projects, pluginsConf);
+ }
+
+
+ public boolean hasScores(Calendar cal) throws NamingException {
+
+ return service.hasPluginsValues(cal);
+ }
+
+
+ public PluginsValues getScores(Calendar cal)
+ throws GetScoresException {
+
+ PluginsValues pluginsValues = null;
+
+ try {
+ pluginsValues = service.getPluginsValues(cal);
+ } catch (Exception e) {
+ throw new GetScoresException(e);
+ }
+
+ if (pluginsValues == null) {
+ throw new GetScoresException();
+ }
+
+ return pluginsValues;
+ }
+
+
+ public PluginsValues getLatestScores()
+ throws GetScoresException {
+
+ Calendar cal = Calendar.getInstance();
+ int attempts = 0;
+
+ for(;;) {
+
+ System.out.println("Trying " + cal.getTime().toString());
+
+ boolean hasScores;
+
+ try {
+ hasScores = hasScores(cal);
+ } catch (NamingException e) {
+ throw new GetScoresException(e);
+ }
+
+ if (hasScores) {
+ return getScores(cal);
+ }
+
+ if ((++attempts) == Constants.MAX_ATTEMPTS) {
+ throw new GetScoresException(
+ "Can not find any recently saved scores. " +
+ "Gave up after " + attempts + " attempts.");
+ }
+
+ cal.add(Calendar.DAY_OF_MONTH, -1);
+ }
+ }
+
+
+ /**
+ * For the specified plugin returns historical project score
+ * from the given <code>date</code> in the past.
+ *
+ * Notice that only year, month and day matter in passed dates.
+ *
+ * @return project score from the given date for specified plugin
+ * @throws GetScoresException
+ */
+ public long getValue(String pluginId, String projectId,
+ Calendar cal)
+ throws GetScoresException {
+
+ PluginsValues pluginsValues = getScores(cal);
+
+ return pluginsValues.getPluginValue(pluginId, projectId);
+ }
+
+ public long getValue(String id, String projectId,
+ Calendar start, Calendar end) throws GetScoresException {
+
+ long value;
+ Calendar cal = start;
+
+ for (;;) {
+
+ if (cal.after(end)) {
+ throw new GetScoresException();
+ }
+
+ try {
+ value = getValue(id, projectId, cal);
+ return value;
+ } catch (GetScoresException e) {
+ // try next
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ }
+ }
+ }
+
+ private ScoresService getService() throws NamingException {
+
+ Context context = null;
+ if (isRemote) {
+ context = new InitialContext(properties);
+ } else {
+ context = new InitialContext();
+ }
+
+ // Perform look up using JNDI name of ejb object
+ String serviceBinding =
+ (isRemote ? Constants.STATUS_REMOTE_SERVICE :
+ Constants.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;
+ }
+
+}
Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ShotokuScoresRepositoryManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ShotokuScoresRepositoryManager.java 2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ShotokuScoresRepositoryManager.java 2006-07-14 21:50:51 UTC (rev 5106)
@@ -32,9 +32,6 @@
import java.util.HashMap;
import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
import org.jboss.forge.status.common.Locations;
import org.jboss.forge.status.exceptions.GetScoresException;
import org.jboss.forge.status.exceptions.ScoresSaveException;
@@ -60,16 +57,18 @@
private Map<String,PluginsValues> values
= new HashMap<String,PluginsValues>();
+
+ private String portalName;
@Inject
private ContentManager cm;
- @PersistenceContext (unitName="scores")
- protected EntityManager em;
+ public ShotokuScoresRepositoryManager(String portalName) {
+
+ this.portalName = portalName;
+ };
- public ShotokuScoresRepositoryManager() {};
-
- public void save(PluginsValues pluginsValues, String portalName)
+ public void save(PluginsValues pluginsValues)
throws ScoresSaveException {
// Get directory where we store historical scores
@@ -103,7 +102,7 @@
log.info("Saved in DB");*/
}
- public PluginsValues get(String portalName, Calendar cal) throws GetScoresException {
+ public PluginsValues get(Calendar cal) throws GetScoresException {
String key = getNodeName(cal);
log.info("Returning plugins values (" + key + ") ...");
More information about the jboss-svn-commits
mailing list