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 nella sezione Engine models. 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 dell’engine.
Un esempio di procedura di aggiornamento di una Cloudlet potrebbe essere il seguente:
Nell’esempio seguente, l’engine attualmente installato sulla Cloudlet (Thesfor) viene sostituito da una nuova versione presente nella sezione Engine models, l’engine Thesfor-NEW-ENGINE, innescando i controlli del checker ed eventualmente generando un report dei problemi di compatibilità.
Allineamento tra database e engine #
Vediamo ora nel dettaglio tutte le fasi in cui la piattaforma controlla l’allineamento tra engine e database:
Quando un engine model è installato su una Cloudlet, prima ancora di verificare eventuali problemi di allineamento con il database, il Designer garantisce in tempo reale che il engine 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 engine fin tanto che tali problemi non sono stati risolti.
Dopo che l’utente ha salvato le modifiche, la piattaforma controlla che la struttura e i vincoli dell’engine 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 dell’engine. Questo controllo viene eseguito ogni volta che l’engine è 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.
- 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 dell’engine. Questo controllo viene eseguito ogni volta che l’engine è modificato oppure a seguito di un comando esplicito lanciato dall’utente (
Concluso l’allineamento col database, è possibile riavviare la Cloudlet; in questa fase, tutte le parti dell’applicazione coinvolte dalle modifiche vengono rigenerate.
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, engine 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
).
Il pulsante Resolve all issues
(in basso a destra) consente di allineare automaticamente engine e Database compiendo le operazioni necessarie.
Scenari di disallineamento tra engine 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 engine element #
Tipo | Scenario | Gravità |
---|---|---|
Class created | Creazione di una classe | |
Attribute created | Creazione di un attributo non required | |
Attribute created | Creazione di un attributo required in classe senza oggetti | |
Relation created | Creazione di una relazione con Foreign key required in una tabella senza dati | |
Relation created | Creazione di una relazione con Foreign key non required | |
Unique constraint added | Creazione di un vincolo di unicità in una tabella senza dati | |
Unique constraint added | Creazione di un vincolo di unicità in una tabella che rispetta tale vincolo | |
Index constraint created | Creazione di un indice sulla classe | |
Attribute NOT NULL constraint added | Creazione di un vincolo di integrità per un attributo in una classe senza oggetti o dove l’attributo è valorizzato per tutti i record della tabella |
Engine element deleted #
Tipo | Scenario | Gravità |
---|---|---|
Class deleted | Eliminazione di una classe senza oggetti | |
Class deleted | Eliminazione di una classe con almeno un oggetto | |
Attribute deleted | Eliminazione di un attributo in una classe senza oggetti | |
Attribute deleted | Eliminazione di un attributo in una classe con almeno un oggetto | |
Relationship deleted | Eliminazione di una relazione dove la Foreign key punta una tabella senza dati | |
Relationship deleted | Eliminazione di una relazione dove la Foreign key punta una tabella con dati | |
Unique constraint deleted | Eliminazione di un vincolo di unicità | |
Index constraint deleted | Eliminazione di un vincolo su un indice | |
Attribute NOT NULL constraint deleted | Eliminazione di un attributo required |
Engine element renamed #
Tipo | Scenario | Gravità |
---|---|---|
Class renamed | Rinominazione di una classe | |
Attribute renamed | Rinominazione di un attributo | |
Role renamed | Rinominazione di un ruolo |
Attribute modified #
Tipo | Scenario | Gravità |
---|---|---|
Attribute type modified | Modifica del tipo di attributo con conversione del data type possibile | |
Attribute definition modified | Rinominazione di un attributo con conversione del data type possibile | |
Attribute definition modified | Rinominazione di un attributo required in una classe senza oggetti | |
Attribute definition modified | Rinominazione di un attributo con un vincolo sul dominio | |
Attribute domain modified | Modifica sulla restrizione del dominio di un attributo in una classe senza oggetti, o nella quale i record rispettano il nuovo dominio |
Relation modified #
Tipo | Scenario | Gravità |
---|---|---|
Relation cardinality modified | Modifica della molteplicità di una relazione | |
Relation cardinality modified | Rilassamento della molteplicità (ad es. 01-01 → 0N-0N ) | |
Relation cardinality modified | Restringimento della molteplicità (ad es. 0N-0N → 01-01 ) per una relazione che non ha dati oppure i cui dati rispettano la nuova molteplicità | |
Relation navigability modified | Modifica della navigabilità di una relazione che cambia la source della relazione e pertanto il lato della Foreign key | |
Association transformed in composition | Associazione trasformata in composizione | |
Composition transformed in association | Composizione trasformata in associazione |
Enum literals modified #
Tipo | Scenario | Gravità |
---|---|---|
Enum literals modified | Modifica ai letterali di un Enum |
Engine constraint violated #
Tipo | Scenario | Gravità |
---|---|---|
Unique constraint violated | Vincolo di unicità non rispettato dai dati della classe (verificato tramite issue Unique constraint added) | |
Attribute NOT NULL constraint violated | Attributo required non valorizzato dai dati della classe (verificato tramite issue Attribute NOT NULL constraint added) | |
Composition data corrupted | Composizione non creabile/eliminabile poiché si avrebbero classi part senza classi whole | |
Attribute type incompatible | Data type di un attributo non compatibile (verificato tramite issue Attribute type modified) | |
Attribute domain constraint violated | Violazione di una restrizione sul dominio di un attributo (verificato tramite issue Attribute domain modified) | |
Relation cardinality incompatible | molteplicità non compatibile (verificato tramite issue Relation cardinality modified o Relation created) |
Orphan database element #
Tipo | Scenario | Gravità |
---|---|---|
Orphan table | Tabella orfana (senza un equivalente nell’engine) | |
Orphan column | Colonna orfana (senza un equivalente nell’engine) |
Orphan engine element #
Tipo | Scenario | Gravità |
---|---|---|
Orphan class | Classe orfana (senza un equivalente nell’engine) | |
Orphan attribute | Attributo orfano (senza un equivalente nell’engine) | |
Engine element versioned #
Alcune operazioni non sono supportate se il versioning è abilitato sulla classe:
Tipo | Scenario | Gravità |
---|---|---|
System versioning class added | Aggiunta del versioning su una classe | |
System versioning class removed | Rimozione del versioning su una classe | |
System versioning not supported | Aggiunta di un versioning su una classe in un database che non supporta versioning | |
Attribute type modified not supported | Modifica del data type di un attributo non supportata a causa della presenza del versioning sulla classe | |
Attribute definition modified not supported | Modifica di un attributo non supportata a causa della presenza del versioning sulla classe | |
Relation modified not supported | Modifica di una relazione non supportata a causa della presenza del versioning sulla classe | |
Part class system versioning not supported | Modifica di una classe part non supportata a causa della presenza del versioning sulla classe | |
Composition created not supported | Creazione di una composizione non supportata a causa della presenza del versioning sulla classe |