This commit is contained in:
Lucio Lelii 2010-02-22 13:17:57 +00:00
parent 6091eac3ff
commit 850c821a1a
6 changed files with 60 additions and 45 deletions

View File

@ -10,7 +10,7 @@ CREATE CACHED TABLE FUNCTIONALITY(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(S
CREATE CACHED TABLE METADATAFORMAT(ID VARCHAR NOT NULL PRIMARY KEY,NAME VARCHAR NOT NULL,SCHEMAURI VARCHAR NOT NULL,LANGUAGE VARCHAR NOT NULL)
CREATE CACHED TABLE NATIVEMDF(MDCOLLID VARCHAR NOT NULL,MDFID VARCHAR NOT NULL,PRIMARY KEY(MDCOLLID,MDFID),CONSTRAINT SYS_FK_178 FOREIGN KEY(MDCOLLID) REFERENCES MCOLLECTION(ID),CONSTRAINT SYS_FK_179 FOREIGN KEY(MDFID) REFERENCES METADATAFORMAT(ID))
CREATE CACHED TABLE VRERELATEDCOLLECTION(VREID VARCHAR NOT NULL,COLLID VARCHAR NOT NULL,PRIMARY KEY(VREID,COLLID))
CREATE CACHED TABLE VRERELATEDGHN(VREID VARCHAR NOT NULL,GHNID VARCHAR NOT NULL,PRIMARY KEY(VREID,GHNID))
CREATE CACHED TABLE VRERELATEDGHN(VREID VARCHAR NOT NULL,GHNID VARCHAR NOT NULL, ISCANDIDATE BOOLEAN,PRIMARY KEY(VREID,GHNID))
CREATE CACHED TABLE VRERELATEDCS(VREID VARCHAR NOT NULL,CSID VARCHAR NOT NULL,PRIMARY KEY(VREID,CSID))
CREATE CACHED TABLE VRERELATEDMETADATAFORMAT(VREID VARCHAR,COLLID VARCHAR,MFID VARCHAR)
CREATE CACHED TABLE SERVICES(ID INTEGER NOT NULL,NAME VARCHAR NOT NULL,CLASS VARCHAR NOT NULL, VERSION VARCHAR NOT NULL, PRIMARY KEY(ID,NAME,CLASS),CONSTRAINT SYS_FK_189 FOREIGN KEY(ID) REFERENCES FUNCTIONALITY(ID))

View File

@ -119,6 +119,7 @@
<xsd:complexType name="GHNArray">
<xsd:sequence>
<xsd:element name="CandidateGHN" type="xsd:string" nillable="true" minOccurs="1" maxOccurs="1" />
<xsd:element name="GHNElement" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>

View File

@ -132,15 +132,16 @@ public class ModelerService {
DBInterface.connect();
res= DBInterface.queryDB("select * from GHN ORDER BY GHN.host;");
ResultSet resRelated= DBInterface.queryDB("select ghnid from VRERELATEDGHN where VRERELATEDGHN.vreid='"+getResource().getId()+"';");
while(resRelated.next())
ResultSet resRelated= DBInterface.queryDB("select ghnid, ISCANDIDATE from VRERELATEDGHN where VRERELATEDGHN.vreid='"+getResource().getId()+"';");
String candidatedGHN="";
while(resRelated.next()){
relatedGHN.add(resRelated.getString(1));
if (resRelated.getBoolean(2)) candidatedGHN=resRelated.getString(1);
}
return XMLUtil.PrepareGHNsXML(res, relatedGHN,candidatedGHN);
}catch(Exception e) {
logger.error("VDL Model: error retreiving GHNs",e);
logger.error("VRE Model: error retreiving GHNs",e);
throw new GCUBEFault(e);}
return XMLUtil.PrepareGHNsXML(res, relatedGHN);
}
@ -155,17 +156,19 @@ public class ModelerService {
try{
String instanceID=(String) getResource().getId();
DBInterface.ExecuteUpdate("DELETE FROM VRERELATEDGHN WHERE VRERELATEDGHN.vreid='"+instanceID+"';");
String dlKey=instanceID;
ArrayList<String[]> values= new ArrayList<String[]>(request.getGHNElement().length);
ArrayList<String> row=null;
for (String ghnId: request.getGHNElement())
{
row= new ArrayList<String>(2);
row= new ArrayList<String>(3);
row.add(dlKey);
row.add(ghnId);
values.add(row.toArray(new String[2]));
if (request.getCandidateGHN().compareTo(ghnId)==0) row.add("true");
else row.add("false");
values.add(row.toArray(new String[3]));
}
DBInterface.insertInto("VRERELATEDGHN", values.toArray(new String[0][0]));

View File

@ -65,17 +65,23 @@ public class DeployVRE extends Thread{
public void run() {
try {
ResultSet resRelatedGHN=DBInterface.queryDB("select VRERELATEDGHN.ghnid, GHN.domain from VRERELATEDGHN, GHN where GHN.id=VRERELATEDGHN.ghnid and VRERELATEDGHN.vreid='"+this.resourceId+"' ORDER BY GHN.host; ");
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; ");
List<Couple<String, String>> GHNList= new ArrayList<Couple<String, String>>();
while (resRelatedGHN.next()) GHNList.add(new Couple<String, String>(resRelatedGHN.getString(1),resRelatedGHN.getString(2)));
String candidateGHN=null;
while (resRelatedGHN.next()) {
if(resRelatedGHN.getBoolean(3))
candidateGHN=resRelatedGHN.getString(1);
else GHNList.add(new Couple<String, String>(resRelatedGHN.getString(1),resRelatedGHN.getString(2)));
}
if (GHNList.size()<2){
throw new Exception("No ghn Selected (at least 2 GHNs have to be selcted)");
}
if (!deployManagerOnVRE(GHNList)){
//transforming the Couple<String, String> to a ghnid List<String>
if (!deployManagerOnVRE(GHNList, candidateGHN)){
//transforming the Pair<String, String> to a ghnid List<String>
List<String> ghnEpuredList = new ArrayList<String>();
for (Couple<String, String> cpl: GHNList) ghnEpuredList.add(cpl.first);
@ -105,7 +111,7 @@ public class DeployVRE extends Thread{
}
private boolean deployManagerOnVRE(List<Couple<String, String>> GHNList) throws GCUBEFault{
private boolean deployManagerOnVRE(List<Couple<String, String>> ghnList, String candidateGHN) throws GCUBEFault{
String vreName= null;
try {
DBInterface.ExecuteUpdate("UPDATE VRE SET STATUS='Deploying' WHERE VRE.id='"+this.resourceId+"';");
@ -120,15 +126,19 @@ public class DeployVRE extends Thread{
throw new GCUBEFault(e);
}
// Couple<GCUBEScope,Couple<String, String>>> is a triple with first GCUBEScope, second couple: first String is the VREName, second string is the GHNId
VREManagerServiceHandler<Boolean, Couple<String, List<Couple<String, String>>>> vreManagerHandler= new VREManagerServiceHandler<Boolean,Couple<String, List<Couple<String, String>>>>(){
VREManagerServiceHandler<Boolean, Object[]> vreManagerHandler= new VREManagerServiceHandler<Boolean,Object[]>(){
@SuppressWarnings("static-access")
@SuppressWarnings({ "static-access", "unchecked" })
@Override
protected Boolean makeCall(VREManagerPortType mbportType)
protected Boolean makeCall(VREManagerPortType vreManagerPT)
throws Exception {
String report;
try{
String vreName=(String) this.getParameter()[0];
List<Couple<String, String>> ghnList= (List<Couple<String, String>>) this.getParameter()[1];
String candidateGHN=(String) this.getParameter()[2];
AddResourcesParameters arp= new AddResourcesParameters();
ServiceList services= new ServiceList();
ServiceItem[] service= new ServiceItem[1];
@ -138,28 +148,29 @@ public class DeployVRE extends Thread{
service[0].setServiceVersion("1.00.00");
services.setService(service);
Couple<String, String> ghnId=null;
for (Couple<String, String> cpl: getParameter().second){
if (this.usedhost.contains(cpl.second)){
ghnId=cpl;
break;
//preparing the GHN where will be deployed the VREManager
if (candidateGHN==null){
Couple<String, String> ghnId=null;
for (Couple<String, String> cpl: ghnList){
if (this.usedhost.contains(cpl.second)){
ghnId=cpl;
break;
}
}
}
if (ghnId==null) ghnId=getParameter().second.get(0);
if (ghnId==null) ghnId=ghnList.get(0);
logger.debug("deploying the VREManager for the vre on "+ ghnId.second);
services.setGHN(new String[]{ghnId.first});
ghnList.remove(ghnId);
}else services.setGHN(new String[]{candidateGHN});
logger.debug("deploying the VREManager for the vre on "+ ghnId.second);
services.setGHN(new String[]{ghnId.first});
arp.setServices(services);
arp.setTargetScope(this.scope+"/"+this.getParameter().first);
getParameter().second.remove(ghnId);
String reportId=mbportType.addResources(arp);
arp.setTargetScope(this.scope+"/"+vreName);
String reportId=vreManagerPT.addResources(arp);
int attempt=0;
do{
Thread.currentThread().sleep(20000);
report=mbportType.getReport(reportId);
report=vreManagerPT.getReport(reportId);
attempt++;
getResource().setFirstReport(report);
getResource().store();
@ -174,8 +185,7 @@ public class DeployVRE extends Thread{
vreManagerHandler.clearBlackboard();
vreManagerHandler.setHandled(new GCUBEServiceClientImpl());
Couple<String, List<Couple<String, String>>> coupleParams= new Couple<String, List<Couple<String, String>>>(vreName, GHNList);
vreManagerHandler.setParameter(coupleParams);
vreManagerHandler.setParameter(new Object[]{vreName,ghnList,candidateGHN});
vreManagerHandler.scope=this.startingScope;
try {

View File

@ -67,15 +67,15 @@ public abstract class VREManagerServiceHandler<T, P> extends GCUBEServiceHandler
protected abstract T makeCall(VREManagerPortType mbportType) throws Exception;
protected void interact(EndpointReferenceType arg0) throws Exception{
VREManagerPortType mbpt= null;
protected void interact(EndpointReferenceType epr) throws Exception{
VREManagerPortType vmpt= null;
try{
VREManagerServiceAddressingLocator mbsal= new VREManagerServiceAddressingLocator();
mbpt= mbsal.getVREManagerPortTypePort(arg0);
mbpt = GCUBERemotePortTypeContext.getProxy(mbpt,scope, Integer.parseInt((String)ServiceContext.getContext().getProperty("vremanagerTimeout", true)));
this.usedhost= arg0.getAddress().getHost();
this.setReturnValue(this.makeCall(mbpt));
VREManagerServiceAddressingLocator vmsal= new VREManagerServiceAddressingLocator();
vmpt= vmsal.getVREManagerPortTypePort(epr);
vmpt = GCUBERemotePortTypeContext.getProxy(vmpt,scope, Integer.parseInt((String)ServiceContext.getContext().getProperty("vremanagerTimeout", true)));
this.usedhost= epr.getAddress().getHost();
this.setReturnValue(this.makeCall(vmpt));
}catch(Exception e){e.printStackTrace();throw e; }
}

View File

@ -79,7 +79,8 @@ public class XMLUtil {
public static String PrepareGHNsXML(ResultSet res, ArrayList<String> relatedGHNs){
@SuppressWarnings("unchecked")
public static String PrepareGHNsXML(ResultSet res, ArrayList<String> relatedGHNs, String candidateGHN){
Document doc= null;
try {
doc= DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
@ -104,7 +105,7 @@ public class XMLUtil {
}
Element ghnEl = addElements(doc, "GHN", new Element[]{
createTextElement(doc, "ID",res.getString(1)),
createTextElement(doc, "ID",res.getString(1),new Couple<String, String>("VREManagerUse",(candidateGHN.compareTo(res.getString("ID"))==0?"true":"false"))),
createTextElement(doc, "Host",res.getString(2)),
addElements(doc, "Info", new Element[]{
risElement,