Binary distribution

Download the QCG-Computing Java SDK from the downloads section. You will find all needed jars in the lib directory.

Example Usage

Job Management and Data Staging

The below example shows how to:

  • stage input file
  • submit a simple job and wait until it finishes
  • list remote directories
  • stage output files

We assume that you have already initialized your security context:

  • user cert and key installed in ~/.globus
  • trusted CAs installed either in ~/.globus/certificates or /etc/grid-security/certificates
		/* 1. Generate proxy from your certificate */
		GSIProxy.generateProxy("my-password");
		
		/* 2. Create service stubs */
		QCGFactory besFactory =  new QCGFactory(QCG_COMPUTING_HOST, QCG_COMPUTING_PORT, new GSIAuthentication());
		QCGStaging staging = new QCGStaging(QCG_COMPUTING_HOST, 19000, new GSIAuthentication(), new SimpleFileStagingHandler());
		
		
		/* 3. Create sandbox directory on remote cluster */
		String jobDir = UUID.randomUUID().toString();
		staging.mkdir(jobDir, "0700", null);
		
		/* 4. Create input file */
		FileWriter fw = new FileWriter("input.txt");
		fw.write("2 + 2\n");
		fw.close();
		
		/* 5. Stage the input file */
		JSDL stageInJSDL = new JSDL("stage-In");
		stageInJSDL.setWorkingDirectory(jobDir);
		stageInJSDL.getDataStaging().add(new JSDLDataStaging("input.txt" /* remote file name */, "input.txt" /* local file name */, null));
		staging.stageInFiles(stageInJSDL);
			
		
		/* 6. create JSDL document for simple job*/
		JSDL simpleJSDL = new JSDL("SimpleCalculation");
		
		simpleJSDL.setWorkingDirectory(jobDir);
		simpleJSDL.setExecutable("/usr/bin/bc");
		simpleJSDL.getArguments().add("-q");
		simpleJSDL.setInput("input.txt");
		simpleJSDL.setOutput("result.txt");
		
		/* 7. submit a job */
		ActivityEndpointReference jobEpr = besFactory.createActivity(simpleJSDL);
		System.out.println("Submitted a job: " + jobEpr.getActivityUUID());
		
		/* 8. wait for termination */
		QCGActivityStatus status = null;
		while (!( status = besFactory.getActivityStatus(jobEpr)).isFinalState()) { 
			Thread.sleep(2000);
			System.out.println("Status: " + status.getBESSubStateName());
		}
		
		/* 9. Print final status */
		if (status.getBESStateName().equals(QCGActivityStatus.QCG_ACTIVITY_STATE_FINISHED)) {
			System.out.println("Job has finished with exit status: " + status.getEndStatus().getExitStatus() );
		} else if (status.getBESStateName().equals(QCGActivityStatus.QCG_ACTIVITY_STATE_FAILED)){
			System.err.println("Job failed");
		} else if (status.getBESStateName().equals(QCGActivityStatus.QCG_ACTIVITY_STATE_CANCELLED)){
			System.err.println("Job was cancelled");
		}
		
		/* 10. Get file list */
		JSDL listJSDL = new JSDL("list-dir");
		listJSDL = staging.listDirectory(jobDir, null);
		List<String> fileList = new ArrayList<String>();
		for (JSDLDataStaging ds : listJSDL.getDataStaging()) {
			fileList.add(jobDir + "/" + ds.getFileName());
		}
		
		FileInfo filesInfo[] = staging.statFile(fileList, null);
		
		System.out.println("Directory listing: ");
		for (int i = 0; i < filesInfo.length; i++) {
			System.out.printf(" %-20s : size = %6d mode = %s\n", 
					listJSDL.getDataStaging().get(i).getFileName(), 
					filesInfo[i].getSize(),
					filesInfo[i].getMode()
					);
		}
		
		/* 11. Stage output file */
		JSDL stageOutJSDL = new JSDL("Stage-Out");
		stageOutJSDL.setWorkingDirectory(jobDir);
		stageOutJSDL.getDataStaging().add(new JSDLDataStaging("result.txt" /*remote file name */, null, "result.txt" /* local file name */));
		staging.stageOutFiles(stageOutJSDL);
		
		/* 12 Read file */
		BufferedReader br = new BufferedReader(new FileReader("result.txt"));
		System.out.println();
		System.out.println("result = " + br.readLine());
		br.close();
		
		/* 13 cleanup remote job directory*/
		for (int i = 0; i < filesInfo.length; i++) {
			if ((filesInfo[i].getMode() & FileInfo.S_IFDIR) == 0) 
				staging.delete(fileList.get(i), null);
		}
		staging.delete(jobDir, null);

Other authentication mechanisms

SSL (https)

/* mutual authentication - PEM files */
SSLAuthentication(String CAFile, String CAPath, String userCertKey, String keyPassphrase, String trustedDN) throws IOException
/* server only authentication - PEM files */
SSLAuthentication(String CAFile, String CAPath, String trustedDN)  throws IOException, GeneralSecurityException
/* mutual authentication - certs loaded from streams */
SSLAuthentication(List<InputStream> caList, InputStream userCertKey, String keyPassphrase, String trustedDN) throws IOException, GeneralSecurityException

GSI (httpg)

GSIAuthentication(String trustedDN) throws IOException

GSIAuthentication(String   userProxy, String trustedDN) throws IOException

GSIAuthentication(InputStream  userProxy, String trustedDN) throws IOException