View Javadoc

1   package fr.in2p3.jsaga.impl.job;
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.monitor.JobMonitorAdaptor;
6   import fr.in2p3.jsaga.engine.factories.JobAdaptorFactory;
7   import fr.in2p3.jsaga.engine.factories.JobMonitorAdaptorFactory;
8   import fr.in2p3.jsaga.engine.job.monitor.JobMonitorService;
9   import fr.in2p3.jsaga.impl.context.ContextImpl;
10  import fr.in2p3.jsaga.impl.job.description.SAGAJobDescriptionImpl;
11  import fr.in2p3.jsaga.impl.job.service.JobServiceImpl;
12  import fr.in2p3.jsaga.impl.session.SessionImpl;
13  import fr.in2p3.jsaga.sync.job.SyncJobFactory;
14  import org.ogf.saga.error.*;
15  import org.ogf.saga.job.*;
16  import org.ogf.saga.session.Session;
17  import org.ogf.saga.url.URL;
18  
19  import java.util.Map;
20  
21  /* ***************************************************
22   * *** Centre de Calcul de l'IN2P3 - Lyon (France) ***
23   * ***             http://cc.in2p3.fr/             ***
24   * ***************************************************
25   * File:   AbstractSyncJobFactoryImpl
26   * Author: Sylvain Reynaud (sreynaud@in2p3.fr)
27   * Date:   5 juin 2009
28   * ***************************************************
29   * Description:                                      */
30  /**
31   *
32   */
33  public abstract class AbstractSyncJobFactoryImpl extends JobFactory implements SyncJobFactory {
34      private JobAdaptorFactory m_adaptorFactory;
35      private JobMonitorAdaptorFactory m_monitorAdaptorFactory;
36  
37      public AbstractSyncJobFactoryImpl(JobAdaptorFactory adaptorFactory, JobMonitorAdaptorFactory monitorAdaptorFactory) {
38          m_adaptorFactory = adaptorFactory;
39          m_monitorAdaptorFactory = monitorAdaptorFactory;
40      }
41  
42      protected JobDescription doCreateJobDescription() throws NotImplementedException {
43          try {
44              return new SAGAJobDescriptionImpl();
45          } catch (Exception e) {
46              throw new NotImplementedException("INTERNAL ERROR: Unexpected exception");
47          }
48      }
49  
50      //NOTICE: resource discovery should NOT be done here because it should depend on the job description
51      public JobService doCreateJobServiceSync(Session session, URL rm) throws NotImplementedException, BadParameterException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, TimeoutException, NoSuccessException {
52          if (rm!=null && !rm.toString().equals("")) {
53              // get context (security + config)
54              ContextImpl context;
55              try {
56                  context = ((SessionImpl)session).getBestMatchingContext(rm);
57              } catch (DoesNotExistException e) {
58                  throw new NoSuccessException(e);
59              }
60  
61              // create adaptor instance
62              JobControlAdaptor controlAdaptor = m_adaptorFactory.getJobControlAdaptor(rm, context);
63              JobMonitorAdaptor monitorAdaptor = m_monitorAdaptorFactory.getJobMonitorAdaptor(controlAdaptor);
64  
65              // get attributes
66              Map attributes = m_adaptorFactory.getAttribute(rm, context);
67  
68              // connect to control/monitor services
69              m_adaptorFactory.connect(rm, controlAdaptor, attributes, context);
70              m_monitorAdaptorFactory.connect(rm, monitorAdaptor, attributes, context);
71  
72              // initialize translator
73              JobDescriptionTranslator translator = controlAdaptor.getJobDescriptionTranslator();
74              if (rm.getHost()!=null) {
75                  translator.setAttribute(JobDescriptionTranslator.HOSTNAME, rm.getHost());
76              }
77              for (Object o : attributes.entrySet()) {
78                  Map.Entry attr = (Map.Entry) o;
79                  translator.setAttribute(""+attr.getKey(), ""+attr.getValue());
80              }
81  
82              // create JobService
83              JobMonitorService monitorService = new JobMonitorService(rm, monitorAdaptor, attributes);
84              JobServiceImpl jobService = new JobServiceImpl(session, rm, controlAdaptor, monitorService, translator);
85  
86              // register
87              context.registerJobService(jobService);
88              return jobService;
89          } else {
90              throw new NotImplementedException("Resource discovery not yet implemented");
91          }
92      }
93  }