From: <ju...@us...> - 2009-06-24 16:38:38
|
Revision: 4447 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=4447&view=rev Author: justb Date: 2009-06-24 16:38:35 +0000 (Wed, 24 Jun 2009) Log Message: ----------- add harvesting Invoke GN service for the purpose of GN service test framework (synchronous run) Modified Paths: -------------- trunk/src/org/fao/geonet/kernel/harvest/Common.java trunk/src/org/fao/geonet/kernel/harvest/HarvestManager.java trunk/src/org/fao/geonet/kernel/harvest/harvester/AbstractHarvester.java Added Paths: ----------- trunk/src/org/fao/geonet/services/harvesting/Invoke.java Modified: trunk/src/org/fao/geonet/kernel/harvest/Common.java =================================================================== --- trunk/src/org/fao/geonet/kernel/harvest/Common.java 2009-06-24 16:18:23 UTC (rev 4446) +++ trunk/src/org/fao/geonet/kernel/harvest/Common.java 2009-06-24 16:38:35 UTC (rev 4447) @@ -95,7 +95,8 @@ INACTIVE("inactive"), ALREADY_ACTIVE("already-active"), ALREADY_INACTIVE("already-inactive"), - ALREADY_RUNNING("already-running"); + ALREADY_RUNNING("already-running"), + ERROR("error"); //------------------------------------------------------------------------ Modified: trunk/src/org/fao/geonet/kernel/harvest/HarvestManager.java =================================================================== --- trunk/src/org/fao/geonet/kernel/harvest/HarvestManager.java 2009-06-24 16:18:23 UTC (rev 4446) +++ trunk/src/org/fao/geonet/kernel/harvest/HarvestManager.java 2009-06-24 16:38:35 UTC (rev 4447) @@ -28,6 +28,7 @@ import jeeves.exceptions.MissingParameterEx; import jeeves.resources.dbms.Dbms; import jeeves.server.context.ServiceContext; +import jeeves.server.resources.ResourceManager; import jeeves.utils.Log; import jeeves.utils.Xml; import org.fao.geonet.constants.Edit; @@ -235,6 +236,20 @@ //--------------------------------------------------------------------------- + public OperResult invoke(ResourceManager resourceManager, String id) + { + Log.debug(Geonet.HARVEST_MAN, "Invoking harvester with id : "+ id); + + AbstractHarvester ah = hmHarvesters.get(id); + + if (ah == null) + return OperResult.NOT_FOUND; + + return ah.invoke(resourceManager); + } + + //--------------------------------------------------------------------------- + public Element getHarvestInfo(String harvestUuid, String id, String uuid) { Element info = new Element(Edit.Info.Elem.HARVEST_INFO); Modified: trunk/src/org/fao/geonet/kernel/harvest/harvester/AbstractHarvester.java =================================================================== --- trunk/src/org/fao/geonet/kernel/harvest/harvester/AbstractHarvester.java 2009-06-24 16:18:23 UTC (rev 4446) +++ trunk/src/org/fao/geonet/kernel/harvest/harvester/AbstractHarvester.java 2009-06-24 16:38:35 UTC (rev 4447) @@ -250,6 +250,52 @@ //-------------------------------------------------------------------------- + public synchronized OperResult invoke(ResourceManager rm) + { + // Cannot do invoke if this harvester was started (iei active) + if (status != Status.INACTIVE) + return OperResult.ALREADY_ACTIVE; + + Logger logger = Log.createLogger(Geonet.HARVESTER); + String nodeName = getParams().name +" ("+ getClass().getSimpleName() +")"; + OperResult result = OperResult.OK; + + try + { + status = Status.ACTIVE; + logger.info("Started harvesting from node : "+ nodeName); + doHarvest(logger, rm); + logger.info("Ended harvesting from node : "+ nodeName); + + rm.close(); + } + catch(Throwable t) + { + result = OperResult.ERROR; + logger.warning("Raised exception while harvesting from : "+ nodeName); + logger.warning(" (C) Class : "+ t.getClass().getSimpleName()); + logger.warning(" (C) Message : "+ t.getMessage()); + error = t; + t.printStackTrace(); + + try + { + rm.abort(); + } + catch (Exception ex) + { + logger.warning("CANNOT ABORT EXCEPTION"); + logger.warning(" (C) Exc : "+ ex); + } + } finally { + status = Status.INACTIVE; + } + + return result; + } + + //-------------------------------------------------------------------------- + public synchronized void update(Dbms dbms, Element node) throws BadInputEx, SQLException { doUpdate(dbms, id, node); Added: trunk/src/org/fao/geonet/services/harvesting/Invoke.java =================================================================== --- trunk/src/org/fao/geonet/services/harvesting/Invoke.java (rev 0) +++ trunk/src/org/fao/geonet/services/harvesting/Invoke.java 2009-06-24 16:38:35 UTC (rev 4447) @@ -0,0 +1,80 @@ +//============================================================================= +//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the +//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) +//=== and United Nations Environment Programme (UNEP) +//=== +//=== This program is free software; you can redistribute it and/or modify +//=== it under the terms of the GNU General Public License as published by +//=== the Free Software Foundation; either version 2 of the License, or (at +//=== your option) any later version. +//=== +//=== This program 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 +//=== General Public License for more details. +//=== +//=== You should have received a copy of the GNU General Public License +//=== along with this program; if not, write to the Free Software +//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +//=== +//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, +//=== Rome - Italy. email: geo...@os... +//============================================================================== + +package org.fao.geonet.services.harvesting; + +import jeeves.constants.Jeeves; +import jeeves.interfaces.Service; +import jeeves.server.ServiceConfig; +import jeeves.server.context.ServiceContext; +import org.fao.geonet.GeonetContext; +import org.fao.geonet.constants.Geonet; +import org.fao.geonet.kernel.harvest.Common; +import org.fao.geonet.kernel.harvest.HarvestManager; +import org.jdom.Attribute; +import org.jdom.Element; + +/** + * Run a harvester synchronously. + * + * The harvest "Run" service will run a harvester in the background, i.e. + * asynchronously. The "Invoke" service will run a harvester directly, i.e. + * synchronously. The main purpose for this service is testing, i.e. get results + * immmediately returned in a test script. + */ +public class Invoke implements Service +{ + //-------------------------------------------------------------------------- + //--- + //--- Init + //--- + //-------------------------------------------------------------------------- + + public void init(String appPath, ServiceConfig params) throws Exception + { + } + + //-------------------------------------------------------------------------- + //--- + //--- Service + //--- + //-------------------------------------------------------------------------- + + public Element exec(Element params, ServiceContext context) throws Exception + { + GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME); + HarvestManager hm = gc.getHarvestManager(); + + String id = params.getChildText("id"); + + // Invoke: synchronous "run" of harvester + Common.OperResult result = hm.invoke(context.getResourceManager(), id); + + // Construct result + return new Element(Jeeves.Elem.RESPONSE) + .addContent(new Element("id").setText(id).setAttribute(new Attribute("status", result.toString()))); + } +} + +//============================================================================= + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |