View Javadoc

1   package fr.in2p3.jsaga.impl.job.service;
2   
3   import fr.in2p3.jsaga.adaptor.job.control.JobControlAdaptor;
4   import fr.in2p3.jsaga.adaptor.job.control.description.JobDescriptionTranslator;
5   import fr.in2p3.jsaga.adaptor.job.control.manage.ListableJobAdaptor;
6   import fr.in2p3.jsaga.adaptor.job.monitor.JobMonitorAdaptor;
7   import fr.in2p3.jsaga.engine.job.monitor.JobMonitorService;
8   import fr.in2p3.jsaga.impl.AbstractSagaObjectImpl;
9   import fr.in2p3.jsaga.impl.job.description.AbstractJobDescriptionImpl;
10  import fr.in2p3.jsaga.impl.job.instance.JobImpl;
11  import fr.in2p3.jsaga.impl.job.staging.mgr.DataStagingManager;
12  import fr.in2p3.jsaga.impl.job.staging.mgr.DataStagingManagerFactory;
13  import fr.in2p3.jsaga.sync.job.SyncJobService;
14  import org.ogf.saga.SagaObject;
15  import org.ogf.saga.error.*;
16  import org.ogf.saga.job.*;
17  import org.ogf.saga.session.Session;
18  import org.ogf.saga.url.URL;
19  import org.w3c.dom.Document;
20  
21  import java.util.ArrayList;
22  import java.util.List;
23  import java.util.UUID;
24  
25  /* ***************************************************
26   * *** Centre de Calcul de l'IN2P3 - Lyon (France) ***
27   * ***             http://cc.in2p3.fr/             ***
28   * ***************************************************
29   * File:   AbstractSyncJobServiceImpl
30   * Author: Sylvain Reynaud (sreynaud@in2p3.fr)
31   * Date:   6 juin 2009
32   * ***************************************************
33   * Description:                                      */
34  /**
35   *
36   */
37  public abstract class AbstractSyncJobServiceImpl extends AbstractSagaObjectImpl implements SyncJobService {
38      protected static final String DEFAULT_HOST = "";
39      protected static final boolean DEFAULT_INTERACTIVE = false;
40  
41      public URL m_resourceManager;
42      public JobControlAdaptor m_controlAdaptor;
43      public JobMonitorService m_monitorService;
44      private JobDescriptionTranslator m_translator;
45  
46      /** constructor */
47      public AbstractSyncJobServiceImpl(Session session, URL rm, JobControlAdaptor controlAdaptor, JobMonitorService monitorService, JobDescriptionTranslator translator) {
48          super(session);
49          m_resourceManager = rm;
50          m_controlAdaptor = controlAdaptor;
51          m_monitorService = monitorService;
52          m_translator = translator;
53      }
54  
55      /** clone */
56      public SagaObject clone() throws CloneNotSupportedException {
57          AbstractSyncJobServiceImpl clone = (AbstractSyncJobServiceImpl) super.clone();
58          clone.m_resourceManager = m_resourceManager;
59          clone.m_controlAdaptor = m_controlAdaptor;
60          clone.m_monitorService = m_monitorService;
61          clone.m_translator = m_translator;
62          return clone;
63      }
64  
65      public Job createJobSync(JobDescription jobDesc) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
66          // create uniqId
67          String uniqId = UUID.randomUUID().toString(); //""+System.currentTimeMillis();
68  
69          // may modify jobDesc
70          DataStagingManager stagingMgr = DataStagingManagerFactory.create(m_controlAdaptor, jobDesc, uniqId);
71          jobDesc = stagingMgr.modifyJobDescription(jobDesc);
72  
73          // get JSDL
74          Document jsdlDOM;
75          if (jobDesc instanceof AbstractJobDescriptionImpl) {
76              jsdlDOM = ((AbstractJobDescriptionImpl) jobDesc).getJSDL();
77          } else {
78              throw new NotImplementedException("Unsupported JobDescription implementation: "+jobDesc.getClass().getName());
79          }
80  
81          // translate from JSDL
82          String nativeJobDesc = m_translator.translate(jsdlDOM, uniqId);
83  
84          // returns
85          return new JobImpl(m_session, nativeJobDesc, jobDesc, stagingMgr, uniqId, this);
86      }
87  
88      public Job runJobSync(String commandLine, String host, boolean interactive) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
89          try {
90              // set job description
91              JobDescription desc = JobFactory.createJobDescription(JSAGA_FACTORY);
92              desc.setAttribute(JobDescription.EXECUTABLE, commandLine);
93              desc.setAttribute(JobDescription.INTERACTIVE, ""+interactive);
94              desc.setVectorAttribute(JobDescription.CANDIDATEHOSTS, new String[]{""+host});
95  
96              // submit job
97              Job job = this.createJobSync(desc);
98              job.run();
99              return job;
100         } catch (IncorrectStateException e) {
101             throw new NoSuccessException(e);
102         } catch (DoesNotExistException e) {
103             throw new NoSuccessException(e);
104         }
105     }
106     public Job runJobSync(String commandLine, String host) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
107         return this.runJobSync(commandLine, host, DEFAULT_INTERACTIVE);
108     }
109     public Job runJobSync(String commandLine, boolean interactive) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
110         return this.runJobSync(commandLine, DEFAULT_HOST, interactive);
111     }
112     public Job runJobSync(String commandLine) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
113         return this.runJobSync(commandLine, DEFAULT_HOST, DEFAULT_INTERACTIVE);
114     }
115 
116     public List<String> listSync() throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, TimeoutException, NoSuccessException {
117         JobMonitorAdaptor monitorAdaptor = m_monitorService.getAdaptor();
118         if (monitorAdaptor instanceof ListableJobAdaptor) {
119             String[] array = ((ListableJobAdaptor)monitorAdaptor).list();
120             List<String> list = new ArrayList<String>();
121             for (int i=0; array!=null && i<array.length; i++) {
122                 String sagaJobId = "["+m_resourceManager.getString()+"]-["+array[i]+"]";
123                 list.add(sagaJobId);
124             }
125             return list;
126         } else {
127             throw new NotImplementedException("Not implemented yet..."); //todo: implement default behavior for method list()
128         }
129     }
130 
131     public Job getJobSync(String nativeJobId) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, DoesNotExistException, TimeoutException, NoSuccessException {
132         DataStagingManager stagingMgr = DataStagingManagerFactory.create(m_controlAdaptor);
133         return new JobImpl(m_session, nativeJobId, stagingMgr, this);
134     }
135 
136     public JobSelf getSelfSync() throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, TimeoutException, NoSuccessException {
137         throw new NotImplementedException("Not implemented by the SAGA engine", this);
138     }
139 }