2010-11-03 19:32:06 +01:00
package org.gcube.vremanagement.vremodeler.impl.deploy ;
2008-12-18 20:08:37 +01:00
import java.io.ByteArrayInputStream ;
import java.io.IOException ;
import java.sql.ResultSet ;
import java.sql.SQLException ;
import java.util.ArrayList ;
import java.util.List ;
2009-01-12 19:04:07 +01:00
import javax.xml.parsers.DocumentBuilder ;
2008-12-18 20:08:37 +01:00
import javax.xml.parsers.DocumentBuilderFactory ;
import javax.xml.parsers.ParserConfigurationException ;
import javax.xml.xpath.XPath ;
import javax.xml.xpath.XPathConstants ;
import javax.xml.xpath.XPathExpressionException ;
import javax.xml.xpath.XPathFactory ;
2010-06-04 17:07:28 +02:00
import org.apache.axis.message.addressing.EndpointReferenceType ;
import org.gcube.common.core.contexts.GCUBERemotePortTypeContext ;
import org.gcube.common.core.contexts.GHNContext ;
2008-12-18 20:08:37 +01:00
import org.gcube.common.core.faults.GCUBEFault ;
2010-06-04 17:07:28 +02:00
import org.gcube.common.core.informationsystem.client.ISClient ;
import org.gcube.common.core.informationsystem.client.queries.GCUBERIQuery ;
2008-12-18 20:08:37 +01:00
import org.gcube.common.core.resources.GCUBECollection ;
2009-02-09 19:43:07 +01:00
import org.gcube.common.core.resources.GCUBEGenericResource ;
2008-12-18 20:08:37 +01:00
import org.gcube.common.core.resources.GCUBEMCollection ;
2010-06-04 17:07:28 +02:00
import org.gcube.common.core.resources.GCUBERunningInstance ;
2008-12-18 20:08:37 +01:00
import org.gcube.common.core.scope.GCUBEScope ;
2010-11-09 19:58:58 +01:00
import org.gcube.common.core.scope.GCUBEScope.MalformedScopeExpressionException ;
2009-01-13 00:29:55 +01:00
import org.gcube.common.core.utils.handlers.GCUBEServiceClientImpl ;
2010-06-04 17:07:28 +02:00
import org.gcube.common.core.utils.handlers.GCUBEServiceHandler.NoQueryResultException ;
2008-12-18 20:08:37 +01:00
import org.gcube.common.core.utils.logging.GCUBELog ;
2009-05-08 19:58:31 +02:00
import org.gcube.common.resources.kxml.KGCUBEResource ;
2010-05-13 18:20:41 +02:00
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.AddResourcesParameters ;
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.CreateScopeParameters ;
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.OptionsParameters ;
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ResourceItem ;
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ResourceList ;
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ResourceManagerPortType ;
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ScopeOption ;
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ServiceItem ;
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ServiceList ;
2010-06-04 17:07:28 +02:00
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.service.ResourceManagerServiceAddressingLocator ;
2008-12-18 20:08:37 +01:00
import org.gcube.vremanagement.vremodeler.db.DBInterface ;
2009-01-14 18:30:25 +01:00
import org.gcube.vremanagement.vremodeler.impl.ModelerContext ;
import org.gcube.vremanagement.vremodeler.impl.ModelerResource ;
2009-01-16 19:37:02 +01:00
import org.gcube.vremanagement.vremodeler.impl.ModelerService ;
2010-06-04 17:07:28 +02:00
import org.gcube.vremanagement.vremodeler.impl.ServiceContext ;
2010-11-04 15:56:53 +01:00
import org.gcube.vremanagement.vremodeler.impl.util.ReportFiller ;
2010-06-04 17:03:10 +02:00
import org.gcube.vremanagement.vremodeler.impl.util.ResourceManagerServiceHandler ;
2009-01-22 20:22:51 +01:00
import org.gcube.vremanagement.vremodeler.portallayout.CollectionResourceCreation ;
2009-02-13 20:04:00 +01:00
import org.gcube.vremanagement.vremodeler.portallayout.GenericResourcePortlet ;
2010-11-03 19:32:06 +01:00
import org.gcube.vremanagement.vremodeler.stubs.deployreport.DeployReport ;
2009-01-14 18:30:25 +01:00
import org.globus.wsrf.ResourceException ;
2008-12-18 20:08:37 +01:00
import org.w3c.dom.Document ;
import org.w3c.dom.NodeList ;
import org.xml.sax.SAXException ;
2010-11-03 19:32:06 +01:00
public class DeployVRE extends Thread {
2008-12-18 20:08:37 +01:00
2009-01-16 19:37:02 +01:00
private static GCUBELog logger = new GCUBELog ( ModelerService . class ) ;
2009-01-14 18:30:25 +01:00
private ModelerResource wsResource = null ;
2008-12-18 20:08:37 +01:00
private String resourceId ;
2009-01-14 12:11:12 +01:00
private GCUBEScope startingScope ;
2008-12-18 20:08:37 +01:00
private String vreName = null ;
2009-02-09 19:43:07 +01:00
private CollectionResourceCreation collectionResourceCreation ;
2010-11-03 19:32:06 +01:00
2008-12-18 20:08:37 +01:00
2010-11-03 19:32:06 +01:00
public DeployVRE ( String resourceId , GCUBEScope scope ) throws GCUBEFault , Exception {
2008-12-18 20:08:37 +01:00
this . resourceId = resourceId ;
2009-01-14 12:11:12 +01:00
this . startingScope = scope ;
2010-11-03 19:32:06 +01:00
try {
ResultSet resGenericInfo = DBInterface . queryDB ( " select VRE.name from VRE where VRE.id=' " + this . resourceId + " '; " ) ;
if ( ! resGenericInfo . next ( ) ) {
throw new GCUBEFault ( " The VRE with ID " + this . resourceId + " cannot be retrieved on the DB " ) ;
}
vreName = resGenericInfo . getString ( 1 ) ;
2010-11-08 20:02:22 +01:00
System . out . println ( vreName ) ;
2010-11-03 19:32:06 +01:00
} catch ( Exception e ) {
logger . error ( " error retrieving the VRE Name " , e ) ;
throw e ;
}
2008-12-18 20:08:37 +01:00
}
2009-01-14 18:30:25 +01:00
private ModelerResource getResource ( ) throws ResourceException {
if ( wsResource = = null ) wsResource = ( ModelerResource ) ModelerContext . getPortTypeContext ( ) . getWSHome ( ) . find ( ModelerContext . getPortTypeContext ( ) . makeKey ( resourceId ) ) ;
return wsResource ;
}
2010-06-04 17:03:10 +02:00
/ * *
*
* /
2010-11-03 19:32:06 +01:00
public void run ( ) {
2008-12-18 20:08:37 +01:00
try {
2010-11-08 20:02:22 +01:00
getResource ( ) . setDeployReport ( new DeployReport ( ) ) ;
2010-11-04 15:56:53 +01:00
//reports initialization
2010-11-03 19:32:06 +01:00
getResource ( ) . getDeployReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Running ) ;
2010-11-04 15:56:53 +01:00
2010-11-03 19:32:06 +01:00
getResource ( ) . store ( ) ;
GHNstoUse ghnsToUse = null ;
if ( getResource ( ) . isUseCloud ( ) ) {
DeployGHNsOnCloud ghnOnCloud = new DeployGHNsOnCloud ( getResource ( ) . getNumberOfVMsForCloud ( ) , vreName ) ;
2010-11-08 20:02:22 +01:00
getResource ( ) . getDeployReport ( ) . setCloudDeployingReport ( ghnOnCloud . getReport ( ) ) ;
2010-11-03 19:32:06 +01:00
try {
ghnsToUse = ghnOnCloud . run ( ) ;
} catch ( Exception e ) {
logger . error ( " error creating VMs on cloud " , e ) ;
2010-11-08 20:02:22 +01:00
getResource ( ) . getDeployReport ( ) . getCloudDeployingReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Failed ) ;
throw new Exception ( " error creating VMs on cloud " , e ) ;
2010-11-03 19:32:06 +01:00
}
} else {
2010-11-08 20:02:22 +01:00
getResource ( ) . getDeployReport ( ) . getCloudDeployingReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Skipped ) ;
2010-11-03 19:32:06 +01:00
ResultSet resRelatedGHN = DBInterface . queryDB ( " select VRERELATEDGHN.ghnid, GHN.domain, VRERELATEDGHN.ISCANDIDATE from VRERELATEDGHN, GHN where GHN.id=VRERELATEDGHN.ghnid and VRERELATEDGHN.vreid=' " + this . resourceId + " ' ORDER BY GHN.host; " ) ;
ghnsToUse = new GHNstoUse ( ) ;
while ( resRelatedGHN . next ( ) ) {
if ( resRelatedGHN . getBoolean ( 3 ) ) {
ghnsToUse . setCandidateForRM ( resRelatedGHN . getString ( 1 ) ) ;
} else ghnsToUse . getGhns ( ) . add ( resRelatedGHN . getString ( 1 ) ) ;
}
2009-02-16 19:31:32 +01:00
}
2010-11-03 19:32:06 +01:00
2010-11-08 20:02:22 +01:00
if ( deployManagerOnVRE ( ghnsToUse . candidateForRM ) ) {
2010-11-03 19:32:06 +01:00
2010-11-08 20:02:22 +01:00
if ( createVRE ( ghnsToUse . getGhns ( ) ) ) {
2010-11-03 19:32:06 +01:00
DBInterface . ExecuteUpdate ( " UPDATE VRE SET STATUS=' " + org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Finished + " ' WHERE VRE.id=' " + this . resourceId + " '; " ) ;
getResource ( ) . getDeployReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Finished ) ;
getResource ( ) . store ( ) ;
2009-01-19 18:09:28 +01:00
logger . info ( " Deploying of the VRE with id " + this . resourceId + " FINISHED " ) ;
}
else {
logger . info ( " Deploying of the VRE with id " + this . resourceId + " FAILED on second step " ) ;
2010-11-03 19:32:06 +01:00
getResource ( ) . getDeployReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Failed ) ;
getResource ( ) . store ( ) ;
2009-01-19 18:09:28 +01:00
throw new Exception ( " Error Deployng the VRE failed on second step " ) ;
}
2009-01-19 16:20:22 +01:00
} else {
2010-11-03 19:32:06 +01:00
getResource ( ) . getDeployReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Failed ) ;
2010-11-09 19:58:58 +01:00
getResource ( ) . getDeployReport ( ) . getResourceManagerDeployingReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Failed ) ;
2009-02-13 12:00:20 +01:00
getResource ( ) . store ( ) ;
2009-01-19 18:09:28 +01:00
logger . info ( " Deploying of the VRE with id " + this . resourceId + " FAILED on first step " ) ;
throw new Exception ( " Error Deployng the VRE filed on first step " ) ;
2009-01-19 16:20:22 +01:00
}
2009-02-13 12:00:20 +01:00
2008-12-18 20:08:37 +01:00
} catch ( Exception e ) {
2009-01-19 16:20:22 +01:00
try {
2010-11-03 19:32:06 +01:00
DBInterface . ExecuteUpdate ( " UPDATE VRE SET STATUS=' " + org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Failed + " ' WHERE VRE.id=' " + this . resourceId + " '; " ) ;
getResource ( ) . getDeployReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Failed ) ;
getResource ( ) . store ( ) ;
2009-01-19 18:09:28 +01:00
} catch ( Exception e1 ) {
2010-06-04 17:07:28 +02:00
logger . error ( " impossible to update the VRE Status " , e1 ) ;
2009-01-19 16:20:22 +01:00
}
2010-06-04 17:07:28 +02:00
logger . error ( " Error deploying the VRE with id " + this . resourceId + " " , e ) ;
2008-12-18 20:08:37 +01:00
}
}
2010-11-09 19:58:58 +01:00
private boolean deployManagerOnVRE ( String candidateGhnId ) throws MalformedScopeExpressionException , Exception {
2008-12-18 20:08:37 +01:00
try {
DBInterface . ExecuteUpdate ( " UPDATE VRE SET STATUS='Deploying' WHERE VRE.id=' " + this . resourceId + " '; " ) ;
2009-10-01 16:59:26 +02:00
} catch ( Exception e ) {
2008-12-18 20:08:37 +01:00
logger . error ( " HSQLDB Error " + e ) ;
throw new GCUBEFault ( e ) ;
}
2010-11-03 19:32:06 +01:00
getResource ( ) . getDeployReport ( ) . getResourceManagerDeployingReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Running ) ;
getResource ( ) . store ( ) ;
2010-11-09 19:58:58 +01:00
ResourceManagerPortType rmPortType = getResourceMangerPT ( this . startingScope ) ;
2010-11-03 19:32:06 +01:00
2009-01-14 12:11:12 +01:00
2010-11-09 19:58:58 +01:00
String report ;
try {
AddResourcesParameters arp = new AddResourcesParameters ( ) ;
ServiceList services = new ServiceList ( ) ;
ServiceItem [ ] service = new ServiceItem [ 1 ] ;
service [ 0 ] = new ServiceItem ( ) ;
service [ 0 ] . setServiceClass ( " VREManagement " ) ;
service [ 0 ] . setServiceName ( " ResourceManager " ) ;
service [ 0 ] . setServiceVersion ( " 1.00.00 " ) ;
services . setService ( service ) ;
services . setGHN ( new String [ ] { candidateGhnId } ) ;
arp . setServices ( services ) ;
arp . setTargetScope ( this . startingScope + " / " + vreName ) ;
String reportId = rmPortType . addResources ( arp ) ;
logger . trace ( " the report id for Rm is " + reportId ) ;
//waiting few seconds
Thread . sleep ( 60000 ) ;
int attempt = 0 ;
do {
Thread . sleep ( 20000 ) ;
report = rmPortType . getReport ( reportId ) ;
attempt + + ;
getResource ( ) . getDeployReport ( ) . getResourceManagerDeployingReport ( ) . setResourceManagerReport ( report ) ;
getResource ( ) . store ( ) ;
} while ( ! isDeploymentStatusFinished ( report ) & & attempt < 10 ) ;
} catch ( Exception e ) { logger . error ( " error deploying RM on VRE " , e ) ; throw e ; }
logger . trace ( " report step 1: " + report ) ;
logger . info ( " is something failed in the first step? " + isSomethingFailed ( report ) ) ;
2009-02-09 19:43:07 +01:00
collectionResourceCreation = new CollectionResourceCreation ( this . resourceId , this . vreName ) ;
2010-11-03 19:32:06 +01:00
getResource ( ) . getDeployReport ( ) . getResourceManagerDeployingReport ( ) . setState ( org . gcube . vremanagement . vremodeler . stubs . deployreport . State . Finished ) ;
getResource ( ) . store ( ) ;
2010-11-09 19:58:58 +01:00
return ! isSomethingFailed ( report ) ;
2008-12-18 20:08:37 +01:00
}
2010-11-03 19:32:06 +01:00
2010-06-04 17:07:28 +02:00
@SuppressWarnings ( " static-access " )
private boolean createVRE ( List < String > ghnList ) throws Exception {
2010-11-04 15:56:53 +01:00
//report initialization
ReportFiller . initizlizeFunctionalityForReport ( getResource ( ) . getDeployReport ( ) . getFunctionalityDeployingReport ( ) , this . resourceId ) ;
ReportFiller . initializeResourcesForReport ( getResource ( ) . getDeployReport ( ) . getResourceDeployingReport ( ) , this . resourceId ) ;
2008-12-18 20:08:37 +01:00
2010-11-09 19:58:58 +01:00
ResourceManagerPortType rmPortType = getResourceMangerPT ( GCUBEScope . getScope ( this . startingScope + " / " + this . vreName ) ) ;
2010-06-04 17:07:28 +02:00
2010-11-03 19:32:06 +01:00
CreateScopeParameters scopeParameter = getScopeParameters ( ) ;
2010-06-04 17:07:28 +02:00
//creating the GenericResources for Portlets and Collection
GenericResourcePortlet . createResource ( getResource ( ) . getId ( ) , vreName ) ;
collectionResourceCreation . createAndPublish ( ) ;
//waiting few seconds to be sure that generic resources will be published
Thread . currentThread ( ) . sleep ( 120000 ) ;
//Adding the resources to the new VRE
AddResourcesParameters arp = new AddResourcesParameters ( ) ;
ResourceList rl = new ResourceList ( ) ;
List < ResourceItem > resItemList = new ArrayList < ResourceItem > ( ) ;
//retrieving Collection
try {
2010-11-03 19:32:06 +01:00
resItemList . addAll ( addCollections ( ) ) ;
2010-06-04 17:07:28 +02:00
} catch ( SQLException sqle ) { logger . error ( " Error contacting HSQLDB " + sqle ) ; }
//retrieving MDCollection with native MDFormat
try {
2010-11-03 19:32:06 +01:00
resItemList . addAll ( addMetadataFormats ( ) ) ;
2010-06-04 17:07:28 +02:00
} catch ( SQLException sqle ) {
logger . error ( " Error contacting HSQLDB " , sqle ) ;
2008-12-18 20:08:37 +01:00
}
2010-06-04 17:07:28 +02:00
//adding the CollectionResource genericResource
ResourceItem genResItem = new ResourceItem ( ) ;
genResItem . setID ( collectionResourceCreation . getCreatedResourceId ( ) ) ;
genResItem . setType ( GCUBEGenericResource . TYPE ) ;
resItemList . add ( genResItem ) ;
//adding the other needed resources
try {
2010-11-03 19:32:06 +01:00
resItemList . addAll ( addGenericResources ( ) ) ;
2010-06-04 17:07:28 +02:00
} catch ( SQLException sqle ) {
logger . error ( " Error contacting HSQLDB " + sqle ) ;
}
rl . setResource ( resItemList . toArray ( new ResourceItem [ 0 ] ) ) ;
arp . setResources ( rl ) ;
//retrieve services
ServiceList serviceList = new ServiceList ( ) ;
try {
2010-11-03 19:32:06 +01:00
serviceList . setService ( addServices ( ) . toArray ( new ServiceItem [ 0 ] ) ) ;
2010-06-04 17:07:28 +02:00
} catch ( SQLException sqle ) { logger . error ( " Error contacting HSQLDB " + sqle ) ; }
//sets the GHNs
serviceList . setGHN ( ghnList . toArray ( new String [ 0 ] ) ) ;
arp . setServices ( serviceList ) ;
scopeParameter . setAddResourcesParameters ( arp ) ;
scopeParameter . setName ( GCUBEScope . getScope ( this . startingScope + " / " + this . vreName ) . toString ( ) ) ;
2010-11-03 19:32:06 +01:00
String report = null ;
2010-06-04 17:07:28 +02:00
String reportId = rmPortType . createScope ( scopeParameter ) ;
2010-11-08 20:02:22 +01:00
logger . trace ( " the report id for Rm is " + reportId ) ;
2010-06-04 17:07:28 +02:00
int reportAttempt = 0 ;
do {
try {
Thread . currentThread ( ) . sleep ( 20000 ) ;
} catch ( Exception e ) { }
report = rmPortType . getReport ( reportId ) ;
reportAttempt + + ;
2010-11-03 19:32:06 +01:00
getResource ( ) . getDeployReport ( ) . getFunctionalityDeployingReport ( ) . setResourceManagerReport ( report ) ;
2010-11-04 15:56:53 +01:00
ReportFiller . reportElaboration ( getResource ( ) . getDeployReport ( ) ) ;
2010-06-04 17:07:28 +02:00
getResource ( ) . store ( ) ;
2010-11-03 19:32:06 +01:00
} while ( ! ( isDeploymentStatusFinished ( report ) ) & & reportAttempt < 40 ) ;
2010-06-04 17:07:28 +02:00
logger . info ( " is something failed in the second step? " + isSomethingFailed ( report ) ) ;
logger . trace ( " report step 2: " + report ) ;
2010-11-08 20:02:22 +01:00
return ! isSomethingFailed ( report ) ;
2008-12-18 20:08:37 +01:00
}
2009-01-16 19:37:02 +01:00
/ * *
* controls if something is failed deploying
* @param report the VRE deployment report
* @return true if Failed , else false
* /
2010-11-03 19:32:06 +01:00
private static boolean isSomethingFailed ( String report ) {
2009-01-16 19:37:02 +01:00
boolean ret = false ;
2010-06-04 17:07:28 +02:00
String deploymentXpath = " /ResourceReport/DeploymentPlanCreation/Status " ;
String dependenciesResolutionXpath = " /ResourceReport/Services/Service/DependenciesResolutionStatus " ;
String serviceXpath = " /ResourceReport/Services/Service/DeploymentActivity/GHN/LastReportReceived/Packages/Package/Status " ;
2009-01-16 19:37:02 +01:00
DocumentBuilderFactory dbf = DocumentBuilderFactory . newInstance ( ) ;
DocumentBuilder db ;
try {
db = dbf . newDocumentBuilder ( ) ;
Document document = db . parse ( new ByteArrayInputStream ( report . getBytes ( ) ) ) ;
XPath engine = XPathFactory . newInstance ( ) . newXPath ( ) ;
2010-06-04 17:07:28 +02:00
NodeList nDeployment = ( NodeList ) engine . evaluate ( deploymentXpath , document , XPathConstants . NODESET ) ;
for ( int i = 0 ; i < nDeployment . getLength ( ) ; i + + ) {
if ( nDeployment . item ( i ) . getFirstChild ( ) . getNodeValue ( ) . compareTo ( " FAILED " ) = = 0 ) {
return true ;
}
}
NodeList nResoulution = ( NodeList ) engine . evaluate ( dependenciesResolutionXpath , document , XPathConstants . NODESET ) ;
for ( int i = 0 ; i < nResoulution . getLength ( ) ; i + + ) {
if ( nResoulution . item ( i ) . getFirstChild ( ) . getNodeValue ( ) . compareTo ( " FAILED " ) = = 0 ) {
return true ;
}
}
NodeList sResoulution = ( NodeList ) engine . evaluate ( serviceXpath , document , XPathConstants . NODESET ) ;
for ( int i = 0 ; i < sResoulution . getLength ( ) ; i + + ) {
if ( sResoulution . item ( i ) . getFirstChild ( ) . getNodeValue ( ) . compareTo ( " FAILED " ) = = 0 ) {
2009-01-16 19:37:02 +01:00
return true ;
}
}
} catch ( ParserConfigurationException e ) {
return true ;
} catch ( SAXException e ) {
return true ;
} catch ( IOException e ) {
return true ;
} catch ( XPathExpressionException e ) {
return true ;
}
return ret ;
}
2010-11-03 19:32:06 +01:00
private static boolean isDeploymentStatusFinished ( String report ) {
2008-12-18 20:08:37 +01:00
boolean ret = false ;
2010-06-04 17:07:28 +02:00
String xpath = " /ResourceReport/Services/Service/DeploymentActivity/GHN/LastReportReceived/Status " ;
2008-12-18 20:08:37 +01:00
DocumentBuilderFactory dbf = DocumentBuilderFactory . newInstance ( ) ;
DocumentBuilder db ;
try {
db = dbf . newDocumentBuilder ( ) ;
Document document = db . parse ( new ByteArrayInputStream ( report . getBytes ( ) ) ) ;
XPath engine = XPathFactory . newInstance ( ) . newXPath ( ) ;
NodeList nl = ( NodeList ) engine . evaluate ( xpath , document , XPathConstants . NODESET ) ;
for ( int i = 0 ; i < nl . getLength ( ) ; i + + ) {
if ( i = = 0 ) {
ret = true ;
}
if ( nl . item ( i ) . getFirstChild ( ) . getNodeValue ( ) . compareTo ( " CLOSED " ) ! = 0 ) {
ret = false ;
break ;
}
}
} catch ( ParserConfigurationException e ) {
return false ;
} catch ( SAXException e ) {
return false ;
} catch ( IOException e ) {
return false ;
} catch ( XPathExpressionException e ) {
return false ;
}
return ret ;
}
2010-11-09 19:58:58 +01:00
private ResourceManagerPortType getResourceMangerPT ( GCUBEScope scope ) throws Exception {
2010-11-03 19:32:06 +01:00
ResourceManagerPortType rmPortType = null ;
int attempt = 0 ;
do {
try {
try {
Thread . sleep ( 30000 ) ;
} catch ( Exception et ) { }
ISClient client = GHNContext . getImplementation ( ISClient . class ) ;
GCUBERIQuery query = client . getQuery ( GCUBERIQuery . class ) ;
query . setExpression ( " declare namespace is = 'http://gcube-system.org/namespaces/informationsystem/registry'; " +
" for $outer in collection( \" /db/Profiles/RunningInstance \" )//Document/Data/is:Profile/Resource " +
2010-11-09 19:58:58 +01:00
" let $scope:= $outer/Scopes/Scope[string() eq ' " + scope . toString ( ) + " '] " +
2010-11-03 19:32:06 +01:00
" where count($scope)>0 " +
" and $outer/Profile/ServiceName/string() eq 'ResourceManager' " +
2010-11-09 19:58:58 +01:00
" and $outer/Profile/DeploymentData/Status/string() eq 'ready' " +
2010-11-03 19:32:06 +01:00
" return $outer " ) ;
List < EndpointReferenceType > eprs = new ArrayList < EndpointReferenceType > ( ) ;
2010-11-09 19:58:58 +01:00
for ( GCUBERunningInstance instance : client . execute ( query , scope ) )
2010-11-03 19:32:06 +01:00
eprs . add ( instance . getAccessPoint ( ) . getEndpoint ( " gcube/vremanagement/ResourceManager " ) ) ;
if ( eprs . size ( ) = = 0 ) throw new NoQueryResultException ( ) ;
ResourceManagerServiceAddressingLocator vmsal = new ResourceManagerServiceAddressingLocator ( ) ;
2010-11-09 19:58:58 +01:00
logger . trace ( " trying to contact instance at " + eprs . get ( 0 ) . getAddress ( ) ) ;
2010-11-03 19:32:06 +01:00
rmPortType = vmsal . getResourceManagerPortTypePort ( eprs . get ( 0 ) ) ;
2010-11-09 19:58:58 +01:00
rmPortType = GCUBERemotePortTypeContext . getProxy ( rmPortType , scope , Integer . parseInt ( ( String ) ServiceContext . getContext ( ) . getProperty ( " resourceManagerTimeout " , true ) ) ) ;
2010-11-03 19:32:06 +01:00
} catch ( Exception e ) {
logger . warn ( e ) ;
logger . warn ( " the query for resourceManager returned no result, re-trying in 30 secs ( " + attempt + " ) " ) ;
} finally { attempt + + ; }
} while ( rmPortType = = null & & attempt < 10 ) ;
2010-11-09 19:58:58 +01:00
if ( attempt > = 10 ) throw new Exception ( " no ResourceMaanger can be retrieved for scope " + scope ) ;
2010-11-03 19:32:06 +01:00
return rmPortType ;
}
private CreateScopeParameters getScopeParameters ( ) throws Exception {
ResultSet resGenericInfo = DBInterface . queryDB ( " select VRE.name, VRE.vredesigner, VRE.vremanager, VRE.IntervalTo, VRE.IntervalFrom, VRE.description from VRE where VRE.id=' " + this . resourceId + " '; " ) ;
if ( ! resGenericInfo . next ( ) ) throw new GCUBEFault ( " The VRE with ID " + this . resourceId + " cannot be retrieved " ) ;
CreateScopeParameters scopeParameter = new CreateScopeParameters ( ) ;
OptionsParameters optPar = new OptionsParameters ( ) ;
ScopeOption [ ] scopeOptionList = new ScopeOption [ 6 ] ;
ScopeOption soDesigner = new ScopeOption ( ) ;
soDesigner . setName ( " DESIGNER " ) ;
soDesigner . setValue ( resGenericInfo . getString ( " vredesigner " ) ) ;
scopeOptionList [ 0 ] = soDesigner ;
ScopeOption soCreator = new ScopeOption ( ) ;
soCreator . setName ( " CREATOR " ) ;
soCreator . setValue ( resGenericInfo . getString ( " vremanager " ) ) ;
scopeOptionList [ 1 ] = soCreator ;
ScopeOption soEndtime = new ScopeOption ( ) ;
soEndtime . setName ( " ENDTIME " ) ;
soEndtime . setValue ( KGCUBEResource . toXMLDateAndTime ( resGenericInfo . getDate ( " IntervalTo " ) ) ) ;
scopeOptionList [ 2 ] = soEndtime ;
ScopeOption soStarttime = new ScopeOption ( ) ;
soStarttime . setName ( " STARTTIME " ) ;
soStarttime . setValue ( KGCUBEResource . toXMLDateAndTime ( resGenericInfo . getDate ( " IntervalFrom " ) ) ) ;
scopeOptionList [ 3 ] = soStarttime ;
ScopeOption soDescription = new ScopeOption ( ) ;
soDescription . setName ( " DESCRIPTION " ) ;
soDescription . setValue ( resGenericInfo . getString ( " description " ) ) ;
scopeOptionList [ 4 ] = soDescription ;
ScopeOption soDisplayname = new ScopeOption ( ) ;
soDisplayname . setName ( " DISPLAYNAME " ) ;
soDisplayname . setValue ( resGenericInfo . getString ( " name " ) ) ;
scopeOptionList [ 5 ] = soDisplayname ;
optPar . setScopeOptionList ( scopeOptionList ) ;
scopeParameter . setOptionsParameters ( optPar ) ;
return scopeParameter ;
}
private List < ResourceItem > addCollections ( ) throws Exception {
List < ResourceItem > resItemList = new ArrayList < ResourceItem > ( ) ;
ResourceItem resItem ;
ResultSet resRelatedCol = DBInterface . queryDB ( " select VRERELATEDCOLLECTION.collid from VRERELATEDCOLLECTION where VRERELATEDCOLLECTION.vreid=' " + this . resourceId + " '; " ) ;
while ( resRelatedCol . next ( ) ) {
resItem = new ResourceItem ( ) ;
resItem . setID ( resRelatedCol . getString ( 1 ) ) ;
logger . trace ( " selected collection: " + resItem . getID ( ) ) ;
resItem . setType ( GCUBECollection . TYPE ) ;
resItemList . add ( resItem ) ;
}
return resItemList ;
}
private List < ResourceItem > addMetadataFormats ( ) throws Exception {
List < ResourceItem > resItemList = new ArrayList < ResourceItem > ( ) ;
ResourceItem resItem ;
ResultSet resMdColNative = DBInterface . queryDB ( " select n.mdcollid from VRERELATEDMETADATAFORMAT AS s, NATIVEMDF as n where s.vreid=' " + this . resourceId + " ' and n.mdfid=s.mfid; " ) ;
while ( resMdColNative . next ( ) ) {
resItem = new ResourceItem ( ) ;
resItem . setID ( resMdColNative . getString ( 1 ) ) ;
logger . trace ( " selected MetadataCollection: " + resItem . getID ( ) ) ;
resItem . setType ( GCUBEMCollection . TYPE ) ;
resItemList . add ( resItem ) ;
}
return resItemList ;
}
private List < ResourceItem > addGenericResources ( ) throws Exception {
List < ResourceItem > resItemList = new ArrayList < ResourceItem > ( ) ;
ResourceItem resItem ;
ResultSet neededRes = DBInterface . queryDB ( " select n.id, n.type from NEEDEDRESOURCES AS n; " ) ;
while ( neededRes . next ( ) ) {
resItem = new ResourceItem ( ) ;
resItem . setID ( neededRes . getString ( 1 ) ) ;
resItem . setType ( neededRes . getString ( 2 ) ) ;
logger . trace ( " Needed GenericResources: " + resItem . getID ( ) ) ;
resItemList . add ( resItem ) ;
}
return resItemList ;
}
private List < ServiceItem > addServices ( ) throws Exception {
ServiceItem servItem ;
List < ServiceItem > listServices = new ArrayList < ServiceItem > ( ) ;
ResultSet resService = DBInterface . queryDB ( " select DISTINCT s.name, s.class, s.version from VRERELATEDFUNCT AS vrf, SERVICES AS s where vrf.vreid=' " + this . resourceId + " ' AND s.id=vrf.funcid; " ) ;
while ( resService . next ( ) ) {
servItem = new ServiceItem ( ) ;
servItem . setServiceClass ( resService . getString ( " class " ) ) ;
servItem . setServiceName ( resService . getString ( " name " ) ) ;
servItem . setServiceVersion ( resService . getString ( " version " ) ) ;
logger . trace ( " selected services: " + servItem . getServiceClass ( ) + " " + servItem . getServiceName ( ) + " " + servItem . getServiceVersion ( ) ) ;
listServices . add ( servItem ) ;
}
return listServices ;
}
2010-11-04 15:56:53 +01:00
2010-11-03 19:32:06 +01:00
2008-12-18 20:08:37 +01:00
}