[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [geclipse-dev] Job creation and submission code
|
Hi,
actually the libs are available here:
http://iwr-geclipse.fzk.de:8443/luntbuild/app.do
Then you need to setup up an eclipse PDE environment and extract the
geclipse zip.
Then you need to write a bundle containing the activator with the code
bellow (plugin project).
Romain
PS the class code:
package fr.cemagref.simexplorer.ide.osgi.processors;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import eu.geclipse.core.ExtensionManager;
import eu.geclipse.core.Extensions;
import eu.geclipse.core.JobStatusUpdater;
import eu.geclipse.core.Preferences;
import eu.geclipse.core.auth.AbstractAuthTokenProvider;
import eu.geclipse.core.auth.AuthTokenRequest;
import eu.geclipse.core.auth.AuthenticationTokenManager;
import eu.geclipse.core.auth.CaCertManager;
import eu.geclipse.core.auth.CoreAuthTokenProvider;
import eu.geclipse.core.auth.IAuthenticationToken;
import eu.geclipse.core.auth.ICaCertificate;
import eu.geclipse.core.auth.ICaCertificateLoader;
import eu.geclipse.core.auth.PasswordManager;
import eu.geclipse.core.jobs.GridJob;
import eu.geclipse.core.jobs.GridJobID;
import eu.geclipse.core.model.GridModel;
import eu.geclipse.core.model.GridModelException;
import eu.geclipse.core.model.IGridComputing;
import eu.geclipse.core.model.IGridElement;
import eu.geclipse.core.model.IGridJob;
import eu.geclipse.core.model.IGridJobID;
import eu.geclipse.core.model.IGridJobService;
import eu.geclipse.core.model.IGridJobStatus;
import eu.geclipse.core.model.IGridJobStatusListener;
import eu.geclipse.core.model.IVirtualOrganization;
import eu.geclipse.core.reporting.ProblemException;
import eu.geclipse.jsdl.JSDLJobDescription;
import eu.geclipse.voms.auth.VomsProxy;
import eu.geclipse.voms.auth.VomsProxyDescription;
import eu.geclipse.voms.model.FullyQualifiedAttributeName;
import eu.geclipse.voms.vo.VomsVirtualOrganization;
import eu.geclipse.voms.vo.VomsVoCreator;
import fr.cemagref.simexplorer.ide.core.ApplicativeContext;
import fr.cemagref.simexplorer.ide.core.InternalProcessingError;
import fr.cemagref.simexplorer.ide.core.UserBadDataError;
import fr.cemagref.simexplorer.ide.core.processors.modular.Processor;
public class JobLauncherProcessor extends Processor {
IProject project;
public JobLauncherProcessor(String description/*, EFSFile depot,
String id*/) {
super(description);
}
@Override
public void process(ApplicativeContext application) throws
UserBadDataError, InternalProcessingError {
try {
//Preferences.setUpdateJobsStatus(true);
VomsVoCreator crea = new VomsVoCreator();
crea.setVoHost("voms-biomed.in2p3.fr");
crea.setVoPort(15000);
crea.setVoHostDN("/O=GRID-FR/C=FR/O=CNRS/OU=CC-LYON/CN=cclcgvomsli01.in2p3.fr");
crea.setVoInfoService(URI.create("ldap://lappbdii.in2p3.fr:2170"));
crea.setVoName("biomed");
// crea.addCustomService(new
GliteJobService(URI.create("https://wms01.egee-see.org:9000")));
// GliteJobSubmissionService wms = new
GliteJobSubmissionService(URI.create("https://wms01.egee-see.org:9000"));
VomsVirtualOrganization biomed = new VomsVirtualOrganization();
crea.apply(biomed);
IGridJobService[] jss = biomed.getJobSubmissionServices(
null );
IWorkspace ws = ResourcesPlugin.getWorkspace();
IWorkspaceRoot swRoot = ws.getRoot();
IProject project = swRoot.getProject( "myproject" );
if ( ! project.exists() ) {
project.create( null );
}
project.open( null );
IFolder jsdlFolder = project.getFolder("jsdl");
if(!jsdlFolder.exists()) {
jsdlFolder.create(true,true,null);
}
IFolder jobsFolder = project.getFolder("jobs");
if(!jobsFolder.exists()) {
jobsFolder.create(true,true,null);
}
IFile file = jsdlFolder.getFile( "myjsld.jsdl" );
if(!file.exists()){
FileOutputStream tempOutStream= new
FileOutputStream(file.getRawLocation().toOSString());
tempOutStream.close();
FileInputStream tempInStream = new
FileInputStream(file.getRawLocation().toOSString());
file.create( tempInStream, true, null );
tempInStream.close();
}
JSDLJobDescription jsdl = null;
IGridElement element = GridModel.getRoot().findElement( file );
if (element instanceof JSDLJobDescription){
jsdl = ( JSDLJobDescription )element;
}
jsdl.createRoot();
jsdl.addJobDescription();
jsdl.addApplication();
//jsdl.addPOSIXApplicationDetails("hostname",
"/bin/hostname", null, null, "stdout", "stdout", "stderr", "stderr");
jsdl.addPOSIXApplicationDetails("hostname", "/bin/echo",
null, null, null, null, null, null);
jsdl.addArgument("Coucou");
// jsdl.getDataStagingOutStrings().
jsdl.save(file);
final String EUGRIDPMA_NAME = "European Policy Management
Authority for Grid Authentication";
ExtensionManager manager = new ExtensionManager();
List< IConfigurationElement > elements =
manager.getConfigurationElements(
Extensions.CA_CERT_LOADER_POINT,
Extensions.CA_CERT_LOADER_ELEMENT
);
ICaCertificateLoader loader = null;
for ( IConfigurationElement elt : elements ) {
String name = elt.getAttribute(
Extensions.CA_CERT_LOADER_NAME_ATTRIBUTE );
if ( EUGRIDPMA_NAME.equals( name ) ) {
loader = ( ICaCertificateLoader )
elt.createExecutableExtension(
Extensions.CA_CERT_LOADER_CLASS_ATTRIBUTE );
break;
}
}
ICaCertificate[] certs = null;
if ( loader != null ) {
URI[] uris = loader.getPredefinedRemoteLocations();
if ( ( uris != null ) && ( uris.length > 0 ) ) {
String[] certnames = loader.getCertificateList(
uris[ 0 ], null );
if ( certnames != null ) {
certs = new ICaCertificate[ certnames.length ];
for ( int i = 0 ; i < certnames.length ; i++ ) {
certs[ i ] = loader.getCertificate( uris[ 0
], certnames[ i ], null );
}
}
}
}
CaCertManager.getManager().addCertificates(certs);
VomsProxyDescription desc = new VomsProxyDescription (
new IVirtualOrganization[] { biomed },
new File("/home/reuillon/.globus/usercert.pem"),
new File("/home/reuillon/.globus/userkey.pem")
);
desc.addFqan(FullyQualifiedAttributeName.getFqan(biomed, new
String[] {"lcg1"}, null));
PasswordManager.registerPassword("/home/reuillon/.globus/userkey.pem", "");
desc.setLifetime( 86400 ); // In second, so one day here
VomsProxy proxy = ( VomsProxy )
AuthenticationTokenManager.getManager().createToken( desc );
if ( ! proxy.isValid() ) {
proxy.validate( new NullProgressMonitor() );
}
if ( ! proxy.isActive() ) {
proxy.setActive( true, null );
System.out.println("Proxy has been activated");
}
AuthenticationTokenManager.getManager().setDefaultToken(proxy);
AuthTokenRequest req = new AuthTokenRequest(desc,"","");
IAuthenticationToken tok =
CoreAuthTokenProvider.staticRequestToken(req);
IGridJob job = null;
// ArrayList<IGridJob> jobs = new ArrayList<IGridJob>();
for(IGridJobService js : jss) {
if(js.canSubmit(jsdl)) {
try{
IGridJobID id = js.submitJob(jsdl, new
NullProgressMonitor());
job = GridJob.createJobStructure(jobsFolder,
(GridJobID) id, js, jsdl, "test");
break;
}
catch(ProblemException e) {
e.printStackTrace();
}
}
}
while( job.getJobStatus().canChange() ) {
try {
Thread.sleep(5000);
job.updateJobStatus();
System.out.println(job.getJobStatus().getName() + ":
" + job.getJobStatus().getReason());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
long duration = (System.currentTimeMillis() -
job.getSubmissionTime().getTime()) / 1000;
System.out.println( duration + " s for executing a 'hello
world' !!!! That's HPC !!!" );
} catch (GridModelException e) {
e.printStackTrace();
} catch (CoreException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
POD69@xxxxxxx a écrit :
hi
could you please post a whole package that contains the libs etc.?
thx pod
-------- Or
iginal-Nachricht --------
Datum: Wed, 21 May 2008 17:44:42 +0200
Von: Romain <reuillon@xxxxxxxx>
An: Developer mailing list <geclipse-dev@xxxxxxxxxxx>
Betreff: [geclipse-dev] Job creation and submission code
Hi again all,
for info, you will find a code for creating and submitting a job using
gEclipse bundles at this address:
http://mann.clermont.cemagref.fr/projets/SimExplorer/wiki/HPC/gEcpliseJobsSubmission
Any comment is of course very welcome,
Cheers,
Romain.
_______________________________________________
geclipse-dev mailing list
geclipse-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/geclipse-dev