git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/vre-management/VREModeler@20237 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
e3741bceea
commit
b2eb7c6d85
|
@ -3,6 +3,6 @@
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/VREMODELERLIBS"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/VREMODELERLIBS"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/GCORE050"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/GCORELIB"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -3,36 +3,11 @@ package org.gcube.vremanagement.vremodeler.db;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.StringReader;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.rmi.RemoteException;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Types;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.xml.transform.OutputKeys;
|
|
||||||
import javax.xml.transform.Transformer;
|
|
||||||
import javax.xml.transform.TransformerFactory;
|
|
||||||
import javax.xml.transform.dom.DOMSource;
|
|
||||||
import javax.xml.transform.stream.StreamResult;
|
|
||||||
import javax.xml.xpath.XPath;
|
|
||||||
import javax.xml.xpath.XPathConstants;
|
|
||||||
import javax.xml.xpath.XPathFactory;
|
|
||||||
import org.apache.axis.message.addressing.EndpointReferenceType;
|
|
||||||
import org.gcube.common.core.contexts.GHNContext;
|
|
||||||
import org.gcube.common.core.faults.GCUBEFault;
|
import org.gcube.common.core.faults.GCUBEFault;
|
||||||
import org.gcube.common.core.informationsystem.client.AtomicCondition;
|
|
||||||
import org.gcube.common.core.informationsystem.client.ISClient;
|
|
||||||
import org.gcube.common.core.informationsystem.client.queries.GCUBEGenericQuery;
|
|
||||||
import org.gcube.common.core.informationsystem.client.queries.GCUBEGenericResourceQuery;
|
|
||||||
import org.gcube.common.core.resources.GCUBEGenericResource;
|
|
||||||
import org.gcube.common.core.scope.GCUBEScope;
|
import org.gcube.common.core.scope.GCUBEScope;
|
||||||
import org.gcube.common.core.utils.logging.GCUBELog;
|
import org.gcube.common.core.utils.logging.GCUBELog;
|
||||||
import org.gcube.vremanagement.vremodeler.impl.ServiceContext;
|
import org.gcube.vremanagement.vremodeler.impl.ServiceContext;
|
||||||
import org.gcube.vremanagement.vremodeler.resources.Functionality;
|
|
||||||
import org.gcube.vremanagement.vremodeler.resources.MainFunctionality;
|
|
||||||
import org.gcube.vremanagement.vremodeler.resources.Service;
|
|
||||||
import org.gcube.vremanagement.vremodeler.resources.handlers.CollectionHandler;
|
import org.gcube.vremanagement.vremodeler.resources.handlers.CollectionHandler;
|
||||||
import org.gcube.vremanagement.vremodeler.resources.handlers.FunctionalityHandler;
|
import org.gcube.vremanagement.vremodeler.resources.handlers.FunctionalityHandler;
|
||||||
import org.gcube.vremanagement.vremodeler.resources.handlers.GHNHandler;
|
import org.gcube.vremanagement.vremodeler.resources.handlers.GHNHandler;
|
||||||
|
@ -42,9 +17,6 @@ import org.gcube.vremanagement.vremodeler.resources.handlers.MCollectionHandler;
|
||||||
import org.gcube.vremanagement.vremodeler.resources.handlers.MetadataFormatHandler;
|
import org.gcube.vremanagement.vremodeler.resources.handlers.MetadataFormatHandler;
|
||||||
import org.gcube.vremanagement.vremodeler.resources.handlers.NativeMetadataFormatHandler;
|
import org.gcube.vremanagement.vremodeler.resources.handlers.NativeMetadataFormatHandler;
|
||||||
import org.gcube.vremanagement.vremodeler.resources.handlers.RunningInstancesHandler;
|
import org.gcube.vremanagement.vremodeler.resources.handlers.RunningInstancesHandler;
|
||||||
import org.gcube.vremanagement.vremodeler.resources.kxml.KGCUBEGenericFunctionalityResource;
|
|
||||||
import org.w3c.dom.Document;
|
|
||||||
import org.w3c.dom.NodeList;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,12 +13,20 @@ import javax.xml.xpath.XPath;
|
||||||
import javax.xml.xpath.XPathConstants;
|
import javax.xml.xpath.XPathConstants;
|
||||||
import javax.xml.xpath.XPathExpressionException;
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
import javax.xml.xpath.XPathFactory;
|
import javax.xml.xpath.XPathFactory;
|
||||||
|
|
||||||
|
import org.apache.axis.message.addressing.EndpointReferenceType;
|
||||||
|
import org.gcube.common.core.contexts.GCUBERemotePortTypeContext;
|
||||||
|
import org.gcube.common.core.contexts.GHNContext;
|
||||||
import org.gcube.common.core.faults.GCUBEFault;
|
import org.gcube.common.core.faults.GCUBEFault;
|
||||||
|
import org.gcube.common.core.informationsystem.client.ISClient;
|
||||||
|
import org.gcube.common.core.informationsystem.client.queries.GCUBERIQuery;
|
||||||
import org.gcube.common.core.resources.GCUBECollection;
|
import org.gcube.common.core.resources.GCUBECollection;
|
||||||
import org.gcube.common.core.resources.GCUBEGenericResource;
|
import org.gcube.common.core.resources.GCUBEGenericResource;
|
||||||
import org.gcube.common.core.resources.GCUBEMCollection;
|
import org.gcube.common.core.resources.GCUBEMCollection;
|
||||||
|
import org.gcube.common.core.resources.GCUBERunningInstance;
|
||||||
import org.gcube.common.core.scope.GCUBEScope;
|
import org.gcube.common.core.scope.GCUBEScope;
|
||||||
import org.gcube.common.core.utils.handlers.GCUBEServiceClientImpl;
|
import org.gcube.common.core.utils.handlers.GCUBEServiceClientImpl;
|
||||||
|
import org.gcube.common.core.utils.handlers.GCUBEServiceHandler.NoQueryResultException;
|
||||||
import org.gcube.common.core.utils.logging.GCUBELog;
|
import org.gcube.common.core.utils.logging.GCUBELog;
|
||||||
import org.gcube.common.resources.kxml.KGCUBEResource;
|
import org.gcube.common.resources.kxml.KGCUBEResource;
|
||||||
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.AddResourcesParameters;
|
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.AddResourcesParameters;
|
||||||
|
@ -30,10 +38,12 @@ import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ResourceMan
|
||||||
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ScopeOption;
|
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ScopeOption;
|
||||||
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ServiceItem;
|
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ServiceItem;
|
||||||
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ServiceList;
|
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.ServiceList;
|
||||||
|
import org.gcube.vremanagement.resourcemanager.stubs.resourcemanager.service.ResourceManagerServiceAddressingLocator;
|
||||||
import org.gcube.vremanagement.vremodeler.db.DBInterface;
|
import org.gcube.vremanagement.vremodeler.db.DBInterface;
|
||||||
import org.gcube.vremanagement.vremodeler.impl.ModelerContext;
|
import org.gcube.vremanagement.vremodeler.impl.ModelerContext;
|
||||||
import org.gcube.vremanagement.vremodeler.impl.ModelerResource;
|
import org.gcube.vremanagement.vremodeler.impl.ModelerResource;
|
||||||
import org.gcube.vremanagement.vremodeler.impl.ModelerService;
|
import org.gcube.vremanagement.vremodeler.impl.ModelerService;
|
||||||
|
import org.gcube.vremanagement.vremodeler.impl.ServiceContext;
|
||||||
import org.gcube.vremanagement.vremodeler.impl.util.Pair;
|
import org.gcube.vremanagement.vremodeler.impl.util.Pair;
|
||||||
import org.gcube.vremanagement.vremodeler.impl.util.ResourceManagerServiceHandler;
|
import org.gcube.vremanagement.vremodeler.impl.util.ResourceManagerServiceHandler;
|
||||||
import org.gcube.vremanagement.vremodeler.portallayout.CollectionResourceCreation;
|
import org.gcube.vremanagement.vremodeler.portallayout.CollectionResourceCreation;
|
||||||
|
@ -115,9 +125,9 @@ public class DeployVRE extends Thread{
|
||||||
try {
|
try {
|
||||||
DBInterface.ExecuteUpdate("UPDATE VRE SET STATUS='"+VREState.FAILED+"' WHERE VRE.id='"+this.resourceId+"';");
|
DBInterface.ExecuteUpdate("UPDATE VRE SET STATUS='"+VREState.FAILED+"' WHERE VRE.id='"+this.resourceId+"';");
|
||||||
} catch (Exception e1) {
|
} catch (Exception e1) {
|
||||||
logger.error("impossible to update the VRE Status"+e1);
|
logger.error("impossible to update the VRE Status",e1);
|
||||||
}
|
}
|
||||||
logger.error("Error deploying the VRE with id "+this.resourceId+" "+e);
|
logger.error("Error deploying the VRE with id "+this.resourceId+" ",e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,183 +224,200 @@ public class DeployVRE extends Thread{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private boolean createVRE(List<String> ghnList) throws GCUBEFault{
|
@SuppressWarnings("static-access")
|
||||||
ResourceManagerServiceHandler<Boolean, Pair<List<String>, String>> vreManagerHandler= new ResourceManagerServiceHandler<Boolean,Pair<List<String>, String>>(){
|
private boolean createVRE(List<String> ghnList) throws Exception{
|
||||||
|
|
||||||
//the parameter is resourceID
|
|
||||||
@SuppressWarnings("static-access")
|
|
||||||
@Override
|
|
||||||
protected Boolean makeCall(ResourceManagerPortType rmPortType)
|
|
||||||
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.getParameter().second+"'; ");
|
|
||||||
if (!resGenericInfo.next()) throw new GCUBEFault("The VRE with ID "+this.getParameter().second+" 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);
|
|
||||||
|
|
||||||
//creating the GenericResources for Portlets and Collection
|
|
||||||
GenericResourcePortlet.createResource(getResource().getId(), vreName);
|
|
||||||
collectionResourceCreation.createAndPublish();
|
|
||||||
|
|
||||||
LayoutCreation createdlayout= new LayoutCreation(getResource().getId(), vreName);
|
|
||||||
createdlayout.createAndPublishLayout();
|
|
||||||
|
|
||||||
//waiting few seconds to be sure that generic resources will be published
|
|
||||||
Thread.currentThread().sleep(60000);
|
|
||||||
|
|
||||||
//Adding the resources to the new VRE
|
|
||||||
AddResourcesParameters arp= new AddResourcesParameters();
|
|
||||||
ResourceList rl= new ResourceList();
|
|
||||||
List<ResourceItem> resItemList= new ArrayList<ResourceItem>();
|
|
||||||
//retrieving Collection
|
|
||||||
try{
|
|
||||||
|
|
||||||
ResourceItem resItem;
|
|
||||||
ResultSet resRelatedCol =DBInterface.queryDB("select VRERELATEDCOLLECTION.collid from VRERELATEDCOLLECTION where VRERELATEDCOLLECTION.vreid='"+this.getParameter().second+"';");
|
|
||||||
while (resRelatedCol.next()){
|
|
||||||
resItem= new ResourceItem();
|
|
||||||
resItem.setID(resRelatedCol.getString(1));
|
|
||||||
logger.debug("selected collection:"+ resItem.getID());
|
|
||||||
resItem.setType(GCUBECollection.TYPE);
|
|
||||||
resItemList.add(resItem);
|
|
||||||
}
|
|
||||||
}catch(SQLException sqle){logger.error("Error contacting HSQLDB "+sqle);}
|
|
||||||
|
|
||||||
//retrieving MDCollection with native MDFormat
|
|
||||||
try{
|
|
||||||
ResourceItem resItem;
|
|
||||||
ResultSet resMdColNative =DBInterface.queryDB("select n.mdcollid from VRERELATEDMETADATAFORMAT AS s, NATIVEMDF as n where s.vreid='"+this.getParameter().second+"' and n.mdfid=s.mfid;");
|
|
||||||
while (resMdColNative.next()){
|
|
||||||
resItem= new ResourceItem();
|
|
||||||
resItem.setID(resMdColNative.getString(1));
|
|
||||||
logger.debug("selected MetadataCollection:"+ resItem.getID());
|
|
||||||
resItem.setType(GCUBEMCollection.TYPE);
|
|
||||||
resItemList.add(resItem);
|
|
||||||
}
|
|
||||||
}catch(SQLException sqle){
|
|
||||||
logger.error("Error contacting HSQLDB ",sqle);
|
|
||||||
}
|
|
||||||
|
|
||||||
//adding the CollectionResource genericResource
|
|
||||||
ResourceItem genResItem= new ResourceItem();
|
|
||||||
genResItem.setID(collectionResourceCreation.getCreatedResourceId());
|
|
||||||
genResItem.setType(GCUBEGenericResource.TYPE);
|
|
||||||
resItemList.add(genResItem);
|
|
||||||
|
|
||||||
genResItem= new ResourceItem();
|
|
||||||
genResItem.setID(createdlayout.getCreatedResourceId());
|
|
||||||
genResItem.setType(GCUBEGenericResource.TYPE);
|
|
||||||
resItemList.add(genResItem);
|
|
||||||
|
|
||||||
//adding the other needed resources
|
|
||||||
try{
|
|
||||||
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.debug("Needed GenericResources:"+ resItem.getID());
|
|
||||||
resItemList.add(resItem);
|
|
||||||
}
|
|
||||||
}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{
|
|
||||||
ServiceItem servItem;
|
|
||||||
List<ServiceItem> listService= 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.getParameter().second+"' 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.debug("selected services:"+ servItem.getServiceClass()+" "+servItem.getServiceName()+" "+servItem.getServiceVersion());
|
|
||||||
listService.add(servItem);
|
|
||||||
}
|
|
||||||
serviceList.setService(listService.toArray(new ServiceItem[0]));
|
|
||||||
}catch(SQLException sqle){logger.error("Error contacting HSQLDB "+sqle);}
|
|
||||||
|
|
||||||
//sets the GHNs
|
|
||||||
serviceList.setGHN(this.getParameter().first.toArray(new String[0]));
|
|
||||||
|
|
||||||
arp.setServices(serviceList);
|
|
||||||
|
|
||||||
scopeParameter.setAddResourcesParameters(arp);
|
|
||||||
scopeParameter.setName(this.scope.toString());
|
|
||||||
|
|
||||||
String report= "ok";
|
|
||||||
String reportId=rmPortType.createScope(scopeParameter);
|
|
||||||
|
|
||||||
int attempt=0;
|
|
||||||
do{
|
|
||||||
Thread.currentThread().sleep(20000);
|
|
||||||
report=rmPortType.getReport(reportId);
|
|
||||||
attempt++;
|
|
||||||
getResource().setSecondReport(report);
|
|
||||||
getResource().store();
|
|
||||||
}while (!isDeploymentStatusFinished(report) && attempt<20);
|
|
||||||
|
|
||||||
|
|
||||||
logger.info("is something failed in the second step?"+isSomethingFailed(report));
|
|
||||||
logger.trace("report step 2: "+report);
|
|
||||||
return isSomethingFailed(report);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
vreManagerHandler.clearBlackboard();
|
ResourceManagerPortType rmPortType=null;
|
||||||
vreManagerHandler.setHandled(new GCUBEServiceClientImpl());
|
int attempt=0;
|
||||||
vreManagerHandler.setParameter(new Pair<List<String>, String>(ghnList,this.resourceId));
|
do{
|
||||||
vreManagerHandler.scope=GCUBEScope.getScope(this.startingScope+"/"+this.vreName);
|
try{
|
||||||
try {
|
try{
|
||||||
vreManagerHandler.run();
|
Thread.currentThread().sleep(30000);
|
||||||
} catch (Exception e) {
|
}catch (Exception et){}
|
||||||
logger.error("DeployingVRE step 2 -- failed "+e);
|
|
||||||
throw new GCUBEFault(e);
|
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 " +
|
||||||
|
" let $scope:= $outer/Scopes/Scope[string() eq '"+GCUBEScope.getScope(this.startingScope+"/"+this.vreName).toString()+"'] " +
|
||||||
|
" where count($scope)>0 " +
|
||||||
|
" and $outer/Profile/ServiceName/string() eq 'ResourceManager' " +
|
||||||
|
" return $outer");
|
||||||
|
|
||||||
|
List<EndpointReferenceType> eprs = new ArrayList<EndpointReferenceType>();
|
||||||
|
for (GCUBERunningInstance instance : client.execute(query, GCUBEScope.getScope(this.startingScope+"/"+this.vreName)))
|
||||||
|
eprs.add(instance.getAccessPoint().getEndpoint("gcube/vremanagement/ResourceManager"));
|
||||||
|
if(eprs.size()==0) throw new NoQueryResultException();
|
||||||
|
ResourceManagerServiceAddressingLocator vmsal= new ResourceManagerServiceAddressingLocator();
|
||||||
|
rmPortType= vmsal.getResourceManagerPortTypePort(eprs.get(0));
|
||||||
|
rmPortType = GCUBERemotePortTypeContext.getProxy(rmPortType,GCUBEScope.getScope(this.startingScope+"/"+this.vreName), Integer.parseInt((String)ServiceContext.getContext().getProperty("resourceManagerTimeout", true)));
|
||||||
|
}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);
|
||||||
|
|
||||||
|
if (attempt>=10) throw new Exception("no ResourceMaanger can be retrieved for scope "+GCUBEScope.getScope(this.startingScope+"/"+this.vreName).toString());
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
//creating the GenericResources for Portlets and Collection
|
||||||
|
GenericResourcePortlet.createResource(getResource().getId(), vreName);
|
||||||
|
collectionResourceCreation.createAndPublish();
|
||||||
|
|
||||||
|
LayoutCreation createdlayout= new LayoutCreation(getResource().getId(), vreName);
|
||||||
|
createdlayout.createAndPublishLayout();
|
||||||
|
|
||||||
|
//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{
|
||||||
|
|
||||||
|
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.debug("selected collection:"+ resItem.getID());
|
||||||
|
resItem.setType(GCUBECollection.TYPE);
|
||||||
|
resItemList.add(resItem);
|
||||||
|
}
|
||||||
|
}catch(SQLException sqle){logger.error("Error contacting HSQLDB "+sqle);}
|
||||||
|
|
||||||
|
//retrieving MDCollection with native MDFormat
|
||||||
|
try{
|
||||||
|
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.debug("selected MetadataCollection:"+ resItem.getID());
|
||||||
|
resItem.setType(GCUBEMCollection.TYPE);
|
||||||
|
resItemList.add(resItem);
|
||||||
|
}
|
||||||
|
}catch(SQLException sqle){
|
||||||
|
logger.error("Error contacting HSQLDB ",sqle);
|
||||||
}
|
}
|
||||||
return vreManagerHandler.getReturnValue();
|
|
||||||
|
//adding the CollectionResource genericResource
|
||||||
|
ResourceItem genResItem= new ResourceItem();
|
||||||
|
genResItem.setID(collectionResourceCreation.getCreatedResourceId());
|
||||||
|
genResItem.setType(GCUBEGenericResource.TYPE);
|
||||||
|
resItemList.add(genResItem);
|
||||||
|
|
||||||
|
genResItem= new ResourceItem();
|
||||||
|
genResItem.setID(createdlayout.getCreatedResourceId());
|
||||||
|
genResItem.setType(GCUBEGenericResource.TYPE);
|
||||||
|
resItemList.add(genResItem);
|
||||||
|
|
||||||
|
//adding the other needed resources
|
||||||
|
try{
|
||||||
|
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.debug("Needed GenericResources:"+ resItem.getID());
|
||||||
|
resItemList.add(resItem);
|
||||||
|
}
|
||||||
|
}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{
|
||||||
|
ServiceItem servItem;
|
||||||
|
List<ServiceItem> listService= 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.debug("selected services:"+ servItem.getServiceClass()+" "+servItem.getServiceName()+" "+servItem.getServiceVersion());
|
||||||
|
listService.add(servItem);
|
||||||
|
}
|
||||||
|
serviceList.setService(listService.toArray(new ServiceItem[0]));
|
||||||
|
}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());
|
||||||
|
|
||||||
|
String report= "starting";
|
||||||
|
String reportId=rmPortType.createScope(scopeParameter);
|
||||||
|
|
||||||
|
int reportAttempt=0;
|
||||||
|
do{
|
||||||
|
try{
|
||||||
|
Thread.currentThread().sleep(20000);
|
||||||
|
}catch (Exception e) {}
|
||||||
|
report=rmPortType.getReport(reportId);
|
||||||
|
reportAttempt++;
|
||||||
|
getResource().setSecondReport(report);
|
||||||
|
getResource().store();
|
||||||
|
|
||||||
|
}while (!isDeploymentStatusFinished(report) && reportAttempt<40);
|
||||||
|
|
||||||
|
|
||||||
|
logger.info("is something failed in the second step?"+isSomethingFailed(report));
|
||||||
|
logger.trace("report step 2: "+report);
|
||||||
|
return isSomethingFailed(report);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -401,16 +428,33 @@ public class DeployVRE extends Thread{
|
||||||
*/
|
*/
|
||||||
private boolean isSomethingFailed(String report){
|
private boolean isSomethingFailed(String report){
|
||||||
boolean ret = false;
|
boolean ret = false;
|
||||||
String xpath = "/ResourceReport/DeploymentActivity/GHN/LastReportReceived/Packages/Package/Status";
|
String deploymentXpath = "/ResourceReport/DeploymentPlanCreation/Status";
|
||||||
|
String dependenciesResolutionXpath ="/ResourceReport/Services/Service/DependenciesResolutionStatus";
|
||||||
|
String serviceXpath="/ResourceReport/Services/Service/DeploymentActivity/GHN/LastReportReceived/Packages/Package/Status";
|
||||||
|
|
||||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||||
DocumentBuilder db;
|
DocumentBuilder db;
|
||||||
try {
|
try {
|
||||||
db = dbf.newDocumentBuilder();
|
db = dbf.newDocumentBuilder();
|
||||||
Document document = db.parse(new ByteArrayInputStream(report.getBytes()));
|
Document document = db.parse(new ByteArrayInputStream(report.getBytes()));
|
||||||
XPath engine = XPathFactory.newInstance().newXPath();
|
XPath engine = XPathFactory.newInstance().newXPath();
|
||||||
NodeList nl = (NodeList) engine.evaluate(xpath,document, XPathConstants.NODESET);
|
NodeList nDeployment = (NodeList) engine.evaluate(deploymentXpath,document, XPathConstants.NODESET);
|
||||||
for (int i = 0; i < nl.getLength(); i++) {
|
for (int i = 0; i < nDeployment.getLength(); i++) {
|
||||||
if(nl.item(i).getFirstChild().getNodeValue().compareTo("FAILED")==0){
|
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){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -428,7 +472,7 @@ public class DeployVRE extends Thread{
|
||||||
|
|
||||||
private boolean isDeploymentStatusFinished(String report) {
|
private boolean isDeploymentStatusFinished(String report) {
|
||||||
boolean ret = false;
|
boolean ret = false;
|
||||||
String xpath = "/ResourceReport/DeploymentActivity/GHN/LastReportReceived/Status";
|
String xpath = "/ResourceReport/Services/Service/DeploymentActivity/GHN/LastReportReceived/Status";
|
||||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||||
DocumentBuilder db;
|
DocumentBuilder db;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -76,7 +76,7 @@ public abstract class ResourceManagerServiceHandler<T, P> extends GCUBEServiceHa
|
||||||
rmpt = GCUBERemotePortTypeContext.getProxy(rmpt,scope, Integer.parseInt((String)ServiceContext.getContext().getProperty("resourceManagerTimeout", true)));
|
rmpt = GCUBERemotePortTypeContext.getProxy(rmpt,scope, Integer.parseInt((String)ServiceContext.getContext().getProperty("resourceManagerTimeout", true)));
|
||||||
this.usedhost= epr.getAddress().getHost();
|
this.usedhost= epr.getAddress().getHost();
|
||||||
this.setReturnValue(this.makeCall(rmpt));
|
this.setReturnValue(this.makeCall(rmpt));
|
||||||
}catch(Exception e){e.printStackTrace();throw e; }
|
}catch(Exception e){logger.error(e);throw e; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue