UnicoreHostType host = (UnicoreHostType) jobExecutionContext.getApplicationContext().getHostDescription()
.getType();
String factoryUrl = host.getUnicoreBESEndPointArray()[0];
EndpointReferenceType eprt = EndpointReferenceType.Factory.newInstance();
eprt.addNewAddress().setStringValue(factoryUrl);
String userDN = getUserName(jobExecutionContext);
if (userDN == null || userDN.equalsIgnoreCase("admin")) {
userDN = "CN=zdv575, O=Ultrascan Gateway, C=DE";
}
String xlogin = getCNFromUserDN(userDN);
// create storage
StorageCreator storageCreator = new StorageCreator(secProperties, factoryUrl, 5, xlogin);
StorageClient sc = null;
try {
try {
sc = storageCreator.createStorage();
} catch (Exception e2) {
log.error("Cannot create storage..");
throw new GFacProviderException("Cannot create storage..", e2);
}
CreateActivityDocument cad = CreateActivityDocument.Factory.newInstance();
JobDefinitionDocument jobDefDoc = JobDefinitionDocument.Factory.newInstance();
JobDefinitionType jobDefinition = jobDefDoc.addNewJobDefinition();
try {
jobDefinition = JSDLGenerator.buildJSDLInstance(jobExecutionContext, sc.getUrl()).getJobDefinition();
cad.addNewCreateActivity().addNewActivityDocument().setJobDefinition(jobDefinition);
log.info("JSDL" + jobDefDoc.toString());
} catch (Exception e1) {
throw new GFacProviderException("Cannot generate JSDL instance from the JobExecutionContext.", e1);
}
// upload files if any
DataTransferrer dt = new DataTransferrer(jobExecutionContext, sc);
dt.uploadLocalFiles();
FactoryClient factory = null;
try {
factory = new FactoryClient(eprt, secProperties);
} catch (Exception e) {
throw new GFacProviderException(e.getLocalizedMessage(), e);
}
CreateActivityResponseDocument response = null;
try {
log.info(String.format("Activity Submitting to %s ... \n", factoryUrl));
response = factory.createActivity(cad);
log.info(String.format("Activity Submitted to %s \n", factoryUrl));
} catch (Exception e) {
throw new GFacProviderException("Cannot create activity.", e);
}
EndpointReferenceType activityEpr = response.getCreateActivityResponse().getActivityIdentifier();
log.info("Activity : " + activityEpr.getAddress().getStringValue() + " Submitted.");
// factory.waitWhileActivityIsDone(activityEpr, 1000);
jobId = WSUtilities.extractResourceID(activityEpr);
if (jobId == null) {
jobId = new Long(Calendar.getInstance().getTimeInMillis()).toString();
}
log.info("JobID: " + jobId);
jobExecutionContext.getNotifier().publish(new UnicoreJobIDEvent(jobId));
saveApplicationJob(jobExecutionContext, jobDefinition, activityEpr.toString());
factory.getActivityStatus(activityEpr);
log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(),
factory.getActivityStatus(activityEpr).toString()));
// TODO publish the status messages to the message bus
while ((factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FINISHED)
&& (factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FAILED)
&& (factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.CANCELLED)) {
ActivityStatusType activityStatus = null;
try {
activityStatus = getStatus(factory, activityEpr);
JobState jobStatus = getApplicationJobStatus(activityStatus);
String jobStatusMessage = "Status of job " + jobId + "is " + jobStatus;
jobExecutionContext.getNotifier().publish(new StatusChangeEvent(jobStatusMessage));
details.setJobID(jobId);
GFacUtils.updateJobStatus(jobExecutionContext, details, jobStatus);
} catch (UnknownActivityIdentifierFault e) {
throw new GFacProviderException(e.getMessage(), e.getCause());
}catch (GFacException e) {
throw new GFacProviderException(e.getMessage(), e.getCause());
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
continue;
}
ActivityStatusType activityStatus = null;
try {
activityStatus = getStatus(factory, activityEpr);
} catch (UnknownActivityIdentifierFault e) {
throw new GFacProviderException(e.getMessage(), e.getCause());
}
log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(), activityStatus.getState()
.toString()));
if ((activityStatus.getState() == ActivityStateEnumeration.FAILED)) {
String error = activityStatus.getFault().getFaultcode().getLocalPart() + "\n"
+ activityStatus.getFault().getFaultstring() + "\n EXITCODE: " + activityStatus.getExitCode();