Esempio server session multipla

Nel caso che debba realizzare una elaborazione batch su Instant Developer Cloud (ma anche su Foundation) si utilizza la Server Session che trovate documentata nel manuale Struttura di un’applicazione.

La cosa migliore per realizzare una Server Session è utilizzare un timer per cadenzare le operazioni da effettuare. I timer sono elementi che si utilizzano nelle videate e il consiglio è quello di utilizzarne una appositamente per queste operazioni.

Quello che vi descrivo lo potete vedere in un semplice esempio che trovate tra i progetti pubblici della Console di Instant Developer Cloud, il progetto server-session-multi-timer.

In questo progetto abbiamo l’applicazione MyApp che ha sia la parte front-end che back-end che banalmente sono esplicitate nelle videate Home e SessioniBatch.

Nell’evento onStart dell’applicazione web troviamo il seguente codice:

  // impostare a true per provare la server session
  let testServerSession = true;
  // Sono in server session oppure la sto testando dall'ide
  if (app.isServerSession() || (testServerSession && app.inPreview())) {
    App.SessioniBatch.show(app);
  }
  else {
    App.Home.show(app);
  }

Qui abbiamo la variabile testServerSession che imposto a true per provare la Server Session quando sono nell’ide, quando pubblico in produzione questa variabile va sempre impostata a false.

Nella videata SessioniBatch ho due timer denominati timerA e timerB per gestire le mie due diverse linee di processi.
I timer hanno la proprietà enabled impostata a false (vengono poi attivati nella load della videata SessioniBatch).
Ognuno dei due timer ha un suo valore della proprietà interval che indica quanti millisecondi devono trascorrere tra un tick e l’altro del timer. Ogni timer ha ha il proprio evento onTick che scatta ad ogni tick del timer.
Il codice di onTick del timerA è il seguente:

  try {
    this.enabled = false;
    let dInizio = new Date();
    console.log("PG - tick del timer A - inizio: " + app.locale.moment(dInizio).format("DD MMMM YYYY, h:mm:ss"));
    // Simulo un'operazione che dura 2 secondi
    yield app.sleep(2000);
    let dFine = new Date();
    console.log("PG - tick del timer A - fine: " + app.locale.moment().format("DD MMMM YYYY, h:mm:ss"));
    this.enabled = true;
  }
  catch (e) {
    console.log("PG - errore:", e);
    this.enabled = true;
  }

L’evento onTick di timerB è simile:

  try {
    this.enabled = false;
    let dInizio = new Date();
    console.log("PG - tick del timer B - inizio: " + app.locale.moment(dInizio).format("DD MMMM YYYY, h:mm:ss"));
    // Simulo un'operazione che dura 10 secondi
    yield app.sleep(10000);
    let dFine = new Date();
    console.log("PG - tick del timer B - fine: " + app.locale.moment().format("DD MMMM YYYY, h:mm:ss"));
    this.enabled = true;
  }
  catch (e) {
    console.log("PG - errore:", e);
    this.enabled = true;
  }

Nella Console di Instant Developer Cloud è presente il progetto pubblico server-session-multi-timer.

4 Mi Piace