Un'[applicazione JSup] viene suddivisa, per supportare la multi-utenza, in due diversi domini: * '''Shared''': la parte comune, ''di sistema'' dell'applicazione; in altre parole è la parte che non dipende dall'utente e che deve funzionare anche in assenza dell'utente (si veda [JSup execution modes|modalità di esecuzione]). Per un'applicazione JSup in esecuzione viene creata un'unica istanza del dominio ''shared''. * '''User''': la parte specifica del singolo utente. Per ogni utente che si collega all'applicazione JSup viene creata una sua propria istanza del dominio User, con logica e valori dei [tag di JSup|tag] indipendenti dagli altri utenti. Per ciascun dominio si può definire del [JSup Code|codice] valido per l'intero dominio: * '''On startup''': un [JavaCode|JavaCode] che viene eseguito all'avvio del dominio (dell'applicazione nel caso del dominio shared, alla connessione utente nel caso del dominio user). * '''While active''': un [JavaCode|JavaCode] che viene eseguito periodicamente mentre il dominio è attivo (deprecato, meglio usare codice ''Triggered/timed''). * '''On shutdown''': un [JavaCode|JavaCode] che viene eseguito all'arresto del dominio (dell'applicazione nel caso del dominio shared, alla disconnessione utente nel caso del dominio user). * '''Condition''': codice associato ad una condizione (a sua volta un [JSup Code|codice] che ritorna vero/falso), alla condizione si può specificare cosa fare quando diventa vera la condizione, mentre la condizione è vera (con periodo di esecuzione indicato), quando la condizione diventa false e mentre la condizione è false (con periodo di esecuzione indicato). * '''Triggered / Timed''': codice che può essere eseguito sia quando cambia il valore (o viene forzato) di uno o più tag, oppure periodicamente ogni tot millisecondi, oppure può essere schedulato a livello di applicazione (in modalità edit) oppure può essere reso disponibile per la [JSup scheduler|schedulazione] da parte dell'utente (a runtime). Queste varie modalità di esecuzione non sono mutualmente esclusive. * '''JavaCode function''': funzioni scritte in [JavaCode|JavaCode] che possono accettare dei parametri, possono ritornare un valore (e anche lanciare eccezioni) e possono essere richiamate da codice JavaCode del medesimo dominio (ma le ''JavaCode function'' del dominio ''Shared'' possono essere rese disponibili anche per il dominio ''User'') o anche da [JSup Math code|Math code]. Possono essere richiamate anche da parte di [JSup Math code|Math code] embedded in stringhe, per esempio descrizioni di allarmi o [IOHook|Tag I/O item] [IOHook#Programmatically calculated items|calcolati]. * '''Key code''': disponibile solo per dominio ''User'', permette di associare (globalmente in tutta l'applicazione e non per una singola [JSup graphic windows|finestra]) la pressione di un tasto (o una combinazione di tasti) all'esecuzione di un codice ([JavaCode|JavaCode] tipicamente. * '''JavaCode common''': Codice Java che permette di definire campi statici globali o anche metodi statici, anche se è meglio, quando è possibile, utilizzare delle ''JavaCode function'' a questo scopo. == Dominio Shared == Il dominio condiviso (di sistema) comprende: * i '''[tag di JSup|tag]''' ''shared'' del database delle variabili: ''Tools / Tag database''; * la '''comunicazione''' con i dispositivi esterni (per i [tag di JSup|tag] shared per i quali vengono definiti degli [IOHook|I/O hook]); * la '''logica''' ''shared'': ''File / Application properties / Edit SHARED code''; * la [JSup Alarm system|gestione degli '''allarmi''']; * la gestione della '''storicizzazione''' delle variabili, degli allarmi e degli eventi: si veda [JSup historian]; * l'istanza ''shared'' dello [schedulatore di JSup]; * la gestione delle [sezioni critiche di JSup] (utilizzabili da [JavaCode] per sincronizzare l'accesso ad alcune risorse o operazioni da parte dei vari utenti connessi e/o della logica ''shared''). == Dominio User == Il dominio user è '''specifico di ogni utente''' connesso all'applicazione JSup, nel senso che, se ci sono più utenti connessi, ogni utente dispone di un'istanza privata del dominio user indipendente da quella degli altri utenti. Quindi la scrittura di un [tag di JSup|tag] ''user'' da parte di un utente non ha alcun effetto sul valore del medesimo [tag di JSup|tag] per gli altri utenti. Il dominio user comprende: * i '''[tag di JSup|tag]''' ''user'' del database delle variabili: ''Tools / Tag database''; * la '''logica''' ''user'': ''File / Application properties / Edit USER code''; * le '''[JSup graphic windows|'''finestre''' grafiche]''' con la relativa logica: ''Window / Window properties''; * l'istanza ''user'' dello [schedulatore di JSup] (il cui utilizzo è possibile, ma non comune). L'utilizzo del dominio user è utile per implementare l'interfaccia utente. Si veda, ad esempio: [Programmazione settimanale utenze con JSup e PLC].