vai al contenuto principale

Manutenzione evolutiva

La piattaforma Livebase supporta il modellatore nella fase di manutenzione evolutiva della Cloudlet, verificando a seguito di modifiche apportate al modello la consistenza nella struttura e nella qualità dei dati presenti in quel momento su database.

Ciclo di sviluppo #

In qualunque momento, una Cloudlet in esecuzione può essere arrestata e il suo engine può essere sostituito con una versione aggiornata presente in libreria (Engine library). Questa operazione è detta manutenzione evolutiva e rende possibile apportare modifiche a un’applicazione Livebase esistente azzerando il rischio di perdere i dati presenti nel database.
Ogni volta che sono apportate modifiche all’engine o al database della Cloudlet, il Database checker verifica la compatibilità tra questi due elementi, rilevando e catalogando eventuali problemi di allineamento tra i dati presenti e la struttura del modello.

Un esempio di procedura di aggiornamento di una Cloudlet potrebbe essere il seguente:

Gestione Cloudlet

Un esempio di ciclo di sviluppo di un’applicazione Livebase

Nell’esempio seguente, l’engine attualmente installato sulla Cloudlet (Thesfor) viene sostituito da una nuova versione presente in libreria, l’engine Thesfor-NEW-ENGINE, innescando i controlli del checker ed eventualmente generando un report dei problemi di compatibilità.

Installazione di un nuovo modello sulla Cloudlet

Installazione di un nuovo modello su una Cloudlet

Allineamento tra database e modello #

Vediamo ora nel dettaglio tutte le fasi in cui la piattaforma controlla l’allineamento tra modello e database:

  1. Quando un modello è installato su una Cloudlet, prima ancora di verificare eventuali problemi di allineamento con il database, il Designer garantisce in tempo reale che il modello sia sempre valido e consistente: quando sono presenti issue non risolvibili automaticamente, o a maggior ragione issue che devono essere necessariamente risolti manualmente, la piattaforma impedisce il salvataggio del modello fin tanto che tali problemi non sono stati risolti.

  2. Dopo che l’utente ha salvato le modifiche, la piattaforma controlla che la struttura e i vincoli del modello siano compatibili con il database installato sulla Cloudlet. Viene dunque elaborato un piano d’intervento per aggiornare database e applicazione generata:

    • inizialmente, il DB Checker controlla che i dati esistenti siano compatibili con la nuova struttura, individuando e catalogando eventuali disallineamenti con i dati esistenti e la struttura del modello. Questo controllo viene eseguito ogni volta che il modello è modificato oppure a seguito di un comando esplicito lanciato dall’utente (Force check, accessibile cliccando col tasto destro sull’icona del database nella versione a tester);
    • in seguito, il DB Updater aggiorna la struttura del database, aggiungendo modificando e rimuovendo elementi a livello di struttura.
  3. Concluso l’allineamento col database, è possibile riavviare la Cloudlet; in questa fase, tutte le parti dell’applicazione coinvolte dalle modifiche vengono rigenerate.

Disallineamento tra engine e database

Disallineamento tra engine e database in seguito all’installazione sulla Cloudlet di una nuova versione del modello

Report dei problemi di allineamento #

I problemi di allineamento sono classificati in tre tipologie. L’icona () rappresenta il database della Cloudlet; quando è priva di warning, modello e database sono perfettamente allineati e la Cloudlet può essere avviata senza problemi. In caso di disallineamento, invece, l’icona cambia mostrando un warning diverso a seconda della loro gravità (severity):

  • Low severity issue: cambiamento di basso impatto, che può essere gestito automaticamente da Livebase senza perdita di dati. La Cloudlet può essere riavviata senza problemi;
  • Medium severity issue: disallineamento che può essere risolto automaticamente da Livebase, ma in alcuni casi comporta la perdita di dati. In presenza di questa tipologia di issue Livebase chiede all’utente di rivedere le modifiche e di dare conferma esplicita prima di procedere;
  • High severity issue: problema di allineamento grave che non può essere risolto automaticamente. Livebase impedisce di avviare la Cloudlet e obbliga l’utente a risolvere manualmente l’errore.

Il report delle issue di compatibilità è accessibile cliccando sull’icona del database e selezionando la scheda Engine compatibility issues; al suo interno è possibile vedere la gravità del problema (Severity), il tipo (Issue type), una breve descrizione (description), e l’azione necessaria per risolverlo (Required action).

La tab Engine compatibility issues

La tab Engine compatibility issues

Il pulsante Resolve all issues (in basso a destra) consente di allineare automaticamente modello e Database compiendo le operazioni necessarie.

Scenari di disallineamento tra modello e database #

Elenchiamo in questa sezione tutti i possibili scenari di disallineamento rilevabili dal Database checker, suddivisi per categorie. A fianco della descrizione è riportata la gravità del relativo issue di compatibilità; alcune tipologie di issue possono avere diversi livelli di gravità.

New model element #

TipoScenarioGravità
Class createdCreazione di una classe
Attribute createdCreazione di un attributo non required
Attribute createdCreazione di un attributo required in classe senza oggetti
Relation createdCreazione di una relazione con Foreign key required in una tabella senza dati
Relation createdCreazione di una relazione con Foreign key non required
Unique constraint addedCreazione di un vincolo di unicità in una tabella senza dati
Unique constraint addedCreazione di un vincolo di unicità in una tabella che rispetta tale vincolo
Index constraint createdCreazione di un indice sulla classe
Attribute NOT NULL constraint addedCreazione di un vincolo di integrità per un attributo in una classe senza oggetti o dove l’attributo è valorizzato per tutti i record della tabella

Model element deleted #

TipoScenarioGravità
Class deletedEliminazione di una classe senza oggetti
Class deletedEliminazione di una classe con almeno un oggetto
Attribute deletedEliminazione di un attributo in una classe senza oggetti
Attribute deletedEliminazione di un attributo in una classe con almeno un oggetto
Relationship deletedEliminazione di una relazione dove la Foreign key punta una tabella senza dati
Relationship deletedEliminazione di una relazione dove la Foreign key punta una tabella con dati
Unique constraint deletedEliminazione di un vincolo di unicità
Index constraint deletedEliminazione di un vincolo su un indice
Attribute NOT NULL constraint deletedEliminazione di un attributo required

Model element renamed #

TipoScenarioGravità
Class renamedRinominazione di una classe
Attribute renamedRinominazione di un attributo
Role renamedRinominazione di un ruolo

Attribute modified #

TipoScenarioGravità
Attribute type modifiedModifica del tipo di attributo con conversione del data type possibile
Attribute definition modifiedRinominazione di un attributo con conversione del data type possibile
Attribute definition modifiedRinominazione di un attributo required in una classe senza oggetti
Attribute definition modifiedRinominazione di un attributo con un vincolo sul dominio
Attribute domain modifiedModifica sulla restrizione del dominio di un attributo in una classe senza oggetti, o nella quale i record rispettano il nuovo dominio

Relation modified #

TipoScenarioGravità
Relation cardinality modifiedModifica della molteplicità di una relazione
Relation cardinality modifiedRilassamento della molteplicità (ad es. 01-010N-0N)
Relation cardinality modifiedRestringimento della molteplicità (ad es. 0N-0N01-01) per una relazione che non ha dati oppure i cui dati rispettano la nuova molteplicità
Relation navigability modifiedModifica della navigabilità di una relazione che cambia la source della relazione e pertanto il lato della Foreign key
Association transformed in compositionAssociazione trasformata in composizione
Composition transformed in associationComposizione trasformata in associazione

Enum literals modified #

TipoScenarioGravità
Enum literals modifiedModifica ai letterali di un Enum

Model constraint violated #

TipoScenarioGravità
Unique constraint violatedVincolo di unicità non rispettato dai dati della classe (verificato tramite issue Unique constraint added)
Attribute NOT NULL constraint violatedAttributo required non valorizzato dai dati della classe (verificato tramite issue Attribute NOT NULL constraint added)
Composition data corruptedComposizione non creabile/eliminabile poiché si avrebbero classi part senza classi whole
Attribute type incompatibleData type di un attributo non compatibile (verificato tramite issue Attribute type modified)
Attribute domain constraint violatedViolazione di una restrizione sul dominio di un attributo (verificato tramite issue Attribute domain modified)
Relation cardinality incompatiblemolteplicità non compatibile (verificato tramite issue Relation cardinality modified o Relation created)

Orphan database element #

TipoScenarioGravità
Orphan tableTabella orfana (senza un equivalente nel modello)
Orphan columnColonna orfana (senza un equivalente nel modello)

Orphan model element #

TipoScenarioGravità
Orphan classClasse orfana (senza un equivalente nel modello)
Orphan attributeAttributo orfano (senza un equivalente nel modello)

Model element versioned #

Alcune operazioni non sono supportate se il versioning è abilitato sulla classe:

TipoScenarioGravità
System versioning class addedAggiunta del versioning su una classe
System versioning class removedRimozione del versioning su una classe
System versioning not supportedAggiunta di un versioning su una classe in un database che non supporta versioning
Attribute type modified not supportedModifica del data type di un attributo non supportata a causa della presenza del versioning sulla classe
Attribute definition modified not supportedModifica di un attributo non supportata a causa della presenza del versioning sulla classe
Relation modified not supportedModifica di una relazione non supportata a causa della presenza del versioning sulla classe
Part class system versioning not supportedModifica di una classe part non supportata a causa della presenza del versioning sulla classe
Composition created not supportedCreazione di una composizione non supportata a causa della presenza del versioning sulla classe