La classe BatchManager est abstraite. Elle definit une interface qui doit etre implementee par des classes specialisees en fonction du gestionnaire de batch et de son API de communication. See Classes specifiques.
Toute action a destination du gestionnaire de batch doit etre precedee de l'instanciation d'un objet derivant de la classe BatchManager puisque c'est a travers cet objet que l'on aura acces a l'interface du gestionnaire.
Cette instanciation est realisee par une fabrique de gestionnaire de batch, instance elle-meme derivee de la classe abstraite FactBatchManager. See Classe FactBatchManager.
class BatchManager { public: // Constructeur et destructeur BatchManager(const FactBatchManager * parent, const char * host="localhost") throw(InvalidArgumentException); virtual ~BatchManager(); // Recupere l'identifiant d'un job deja soumis au BatchManager virtual const JobId getJobIdByReference(const string & ref); // Methodes pour le controle des jobs : virtuelles pures // soumet un job au gestionnaire virtual const JobId submitJob(const Job & job) = 0; // retire un job du gestionnaire virtual void deleteJob(const JobId & jobid) = 0; // suspend un job en file d'attente virtual void holdJob(const JobId & jobid) = 0; // relache un job suspendu virtual void releaseJob(const JobId & jobid) = 0; // modifie un job en file d'attente virtual void alterJob(const JobId & jobid, const Parametre & param, const Environnement & env) = 0; virtual void alterJob(const JobId & jobid, const Parametre & param) = 0; virtual void alterJob(const JobId & jobid, const Environnement & env) = 0; // renvoie l'etat du job virtual JobInfo queryJob(const JobId & jobid) = 0; // wrapping Python virtual string __repr__() const; protected: string _hostname; // serveur ou tourne le BatchManager const FactBatchManager * _parent; // fabrique qui a produit l'instance private: };
... // On recupere l'instance du catalogue de gestionnaires de batch Batch::BatchManagerCatalog cata = Batch::BatchManagerCatalog::getInstance(); // On cree un BatchManager qui se connecte au veritable gestionnaire // de batch Batch::BatchManager & bm = (* cata("PBS"))("monserver.mondomaine.fr"); // Maintenant, on peut utiliser toutes les fonctionnalites du // gestionnaire de batch a travers le variable myBM // On detruit l'objet BatchManager delete &bm; ...
Excepte un pointeur sur la fabrique qui a produit l'objet, See Classe FactBatchManager, le constructeur accepte zero ou un argument de type string decrivant soit le nom de domaine completement qualifie (FQDN, fully qualified domain name) du serveur de batch, soit son adresse IP dans un format decimal "aaa.bbb.ccc.ddd".
Une resolution du nom ou de l'adresse peut etre realisee en fonction des capacites de la plate-forme pour s'assurer que le serveur est connu et joignable. En cas d'echec, une exception InvalidArgumentException est levee. See Classe InvalidArgumentException. A priori, aucune verification n'est faite par defaut.
Ceci fait, une connexion est etablie avec le gestionnaire de batch qui est maintenue jusqu'a destruction de l'objet, si le gestionnaire le permet.
Le destructeur supprime la connexion precedemment etablie par le constructeur lorsque celle-ci a reussi.
Cette methode soumet le job passe en argument au gestionnaire de batch. Etant donne que le job ne peut pas etre envoye tel quel puisqu'il a un format generique au sein de la bibliotheque de classes Batch, cette methode est chargee de le convertir dans un format adapte au gestionnaire de batch sous-jacent.
Ce n'est que lorsque cette conversion est realisee que le job est soumis au gestionnaire a travers son API. L'identifiant propose par le gestionnaire est alors renvoye a l'appelant. Si la soumission echoue pour une raison ou une autre, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode retire le job dont l'identifiant est passe en argument de la file d'attente du gestionnaire, ou bien l'arrete s'il est en cours d'execution. Cette methode est inoperante sur des travaux deja termines, auquel cas une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode suspend le job dont l'identifiant est passe en argument au sein de la file d'attente du gestionnaire. Cette methode est inoperante sur des travaux en cours d'execution ou deja termines, ainsi que sur des travaux deja suspendus. En cas de probleme, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode relache un job precedemment suspendu en file d'attente dont l'identifiant est passe en argument. Elle est inoperante sur des travaux deja relaches, en cours d'execution ou termines. En cas de probleme, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Ces methodes permettent de modifier les parametres d'execution et d'environnement d'un job dont l'identifiant est passe en argument. See Classe Parametre. See Classe Environnement. Il est important de noter que le job doit etre encore place en file d'attente sinon la methode est inoperante. En cas de probleme, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode permet de recuperer les informations concernant le job dont l'identifiant est passe en argument dans un objet de classe JobInfo. See Classe JobInfo. On y retrouve les parametres d'execution et d'environnement du job tels qu'ils ont ete passes au gestionnaire au moment de la soumission, ainsi que des informations concernant l'execution du job comme par exemple la machine d'execution, le temps consomme, la memoire consommee, etc.
Il n'est pas toujours possible d'interroger un job deja termine. En cas de probleme, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode permet de recuperer au sein de la classe un identifiant de job a partir d'une chaine de caracteres obtenue par un biais externe. Cet identifiant pourra etre utilise par la suite au sein de la biliotheque de classes pour controler le job comme s'il avait ete cree et soumis depuis la biliotheque-meme.