POLITECNICO DI TORINO III Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica TESI DI LAUREA

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "POLITECNICO DI TORINO III Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica TESI DI LAUREA"

Transcript

1 POLITECNICO DI TORINO III Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica TESI DI LAUREA Middleware per il data editing in ambiente.net Relatori Ing. Fulvio Corno Ing. Maurizio Rebaudengo Candidato Marco Giuseppe Torre Novembre 2002

2 SOMMARIO Introduzione... 6 Livello Client... 9 Livello Presentazione Business Logic Layer Data Layer Fattori di maturità delle applicazioni web Scopo Struttura dei Capitoli L architettura.net Cos è.net? Il.NET Framework Modello di esecuzione in.net Assembly Livello Presentazione in ambiente.net ASP.NET Pagine ASP.NET Web form - principi di funzionamento Controlli Server Web Creazione di controlli server personalizzati Oggetti intrinseci Gestione dello stato Livello Applicazione in ambiente.net COM Componenti.NET Servizi offerti ai componenti Business Facade Layer Business Rules Layer Data Access Layer Esempio Gestione di un account Oggetti distribuiti NET Remoting XML XML Validazione di un documento XML DOM Architettura applicativa Introduzione Architettura Implementazione Lo schema XML La struttura dati Il generatore di controlli web L accesso ai dati Case Study i

3 La base dati Xml Utilizzo dei controlli generati Utilizzo del data layer Conclusioni ii

4 RINGRAZIAMENTI Desidero ringraziare tutte le persone che mi hanno aiutato nel mio percorso universitario. In particolare ringrazio i miei genitori per avermi supportato in questi anni e spronato anche nei più momenti difficili. Ringrazio il relatore, Ing. Fulvio Corno, per avermi consigliato ed aiutato durante la stesura della tesi. Ringrazio la Trim s.n.c. per l ospitalità fornitami, ed in particolare l Ing. Lorenzo Bazzani per avermi supportato durante lo svolgimento della tesi. Grazie. iii

5 GLOSSARIO API. Serie di procedure utilizzate da un applicazione per richiedere ed eseguire servizi. ASP. Active Server Pages, tecnologia utilizzata da microsoft per la generazione di pagine web dinamiche, è realizzata mediante l impiego di linguaggi di scripting. Business logic. Livello logico che implementa le funzionalità di una applicazione, in.net è realizzato mediante l utilizzo di componenti. CLR. Common Language Runtime, è l ambiente di esecuzione del framework.net. Data Access Layer. Livello logico di accesso ai dati, parte della logica applicativa di una applicazione. Deploy. Il processo col quale un componente software viene inserito in un ambiente operativo. COM. Component Object Model, tecnologia di Microsoft per lo sviluppo di componenti software. COM+. Insieme di servizi offerti su piattaforma windows atti a supportare la tecnologia COM. Codice Gestito. Codice progettato per operare all interno dell ambiente runtime di.net. Cluster. Gruppo di server collegati in rete sia fisicamente che a livello di software, allo scopo di fornire funzioni quali tolleranza ai guasti e bilanciamento del carico di lavoro. DCOM. Protocollo in grado di consentire ai componenti software di comunicare in modo remoto. DNA. Distribuited internet Architecture, piattaforma e metodologia di sviluppo orientata allo sviluppo di applicazioni in ambiente distribuito sviluppata da Microsoft. GUI. (Graphical User Interface) Interfaccia grafica dell utente. iv

6 Garbage Collector. Processo dell ambiente di runtime che si occupa del rilascio delle risorse inutilizzate. IL. Intermediate Language, è il linguaggio in esecuzione nell ambiente di runtime di.net. JIT. Just In Time. Nell ambiente.net indica lo svolgimento della fase finale della compilazione, dal linguaggio IL al codice macchina nativo. J2EE. Java 2 Enterprise Edition, tecnologia proposta da Sun per lo sviluppo di applicazioni distribuite. SSI. Server Side Include. Insieme di direttive ASP atte a favorire l organizzazione modulare del codice. Stored Procedure. Procedura memorizzata sul database che agisce sui dati. SQL (Structured Query Language). Linguaggio standard per definire, modificare ed interrogare database relazionali Transazione. Unità atomica di lavoro che modifica dei dati. Composta da una o più operazioni, che al termine della transazione sono o tutte rese persistenti (istruzione di commit) oppure sono tutte annullate (istruzione di rollback) XML (Extensible Markup Language). Linguaggio basato su tag che permette di definire tag personali per identificare contenuti, dati, testo all interno di documenti XML v

7 Capitolo 1 INTRODUZIONE La diffusione di standard aperti su Internet ha modificato radicalmente l architettura dei sistemi di elaborazione distribuiti, che nel breve volgere di pochi anni sono migrati definitivamente verso il web. Dalla metà degli anni 90 infatti, a seguito della diffusione del linguaggio base del Web, il linguaggio HTML (Hyper Text Markup Language), si è assistito ad uno sviluppo di questi tipi di architetture che si sono evolute a partire da uno schema funzionale di tipo Client Server, illustrato in figura 1.1. Figura Modello Client-Server Nel modello Client-Server è possibile evidenziare un processo Client che si occupa di presentare o acquisire dei dati interagendo con un processo Server, generalmente costituito da un Database. Anche se questo tipo di architettura presenta due strati, il livello Presentazione ed il livello Dati, è necessario mettere in evidenza uno strato funzionale (il Business Logic Layer ) che può 6

8 essere presente sul server, sul client o ripartito su entrambi con compiti di validazione, monitoraggio degli accessi ed implementazione di regole specifiche sui dati. Figura Fat Client Se il Business Logic Layer viene implemementato sul client si è in presenza di un fat client, termine traducibile come client pesante,mostrato in figura 1.2. Nel caso invece sia il server a sobbarcarsi l onere di implementare le regole di business si è in presenza di un thin client, letteralmente traducibile come client leggero, schematizzato in figura 1.3. Figura 1.3 Thin Client Le due componenti di questa architettura sono però fortemente connesse tra loro, in quanto modifiche ad un livello implicano l aggiornamento dell intera architettura rendendo così necessaria l installazione di nuove versioni sul server e su tutte le macchine client (anche diverse migliaia) con problemi legati anche al tipo di piattaforma. 7

9 L avvento delle architetture Web based permette di risolvere questo genere di problematiche implementando il livello client mediante pagine web e permettendo così all architettura di evolvere ad uno schema multilivello illustrato, in figura 1.4. Figura 1.4 Schema Multilivello Le componenti dello schema sono: Client Tier, essenzialmente un browser standard che visualizza le pagine web. Middle-Tier in cui è possibile individuare le seguenti componenti: o Presentation Layer, che si occupa di gestire la generazione delle pagine web sulla base delle scelte del client e delle informazioni scambiate con il livello sottostante. o Business Logic Layer, in cui vengono implementate le operazioni da effettuare sui dati. Data Layer, è il livello che rappresenta l origine dei dati. 8

10 Tale architettura permette di ridurre notevolmente i costi ed i tempi relativi allo sviluppo di client specifici per ogni piattaforma. Inoltre un architettura basata su livelli separati fornisce un incapsulazione che realizza una maggior robustezza della stessa. Ogni livello interagisce infatti con i livelli adiacenti unicamente attraverso input ed output ben definiti consentendo di modificare un componente senza intaccare la funzionalità degli altri moduli a patto che i servizi offerti agli altri strati restino invariati. Livello Client Il livello client si occupa della visualizzazione dell interfaccia grafica all utente finale, nelle applicazioni web questo compito viene realizzato da un browser installato sul client. Inizialmente i browser, sfruttando unicamente il linguaggio HTML, permettevano di acquisire e visualizzare dati demandando ogni controllo sulla validità degli stessi al livello sottostante che, in caso di errori si doveva preoccupare di ripresentare la pagina di inserimento con le opportune comunicazioni relative all errore per evitare che l utente lo ricommettesse. Un approccio di questo tipo genera quindi superflue comunicazioni tra client e server che subisce un maggior sovraccarico dovuto alla gestione degli errori. Linguaggi di scripting come VBscript e Javascript hanno però permesso di risolvere questo inconveniente consentendo di effettuare semplici operazioni di validazione direttamente in fase di inserimento segnalando così la presenza di errori ed evitando quindi inutili ritrasmissioni della stessa pagina. Nonostante questi tipi di linguaggi vengano compresi da tutti i browser più recenti, spesso gli sviluppatori si trovano di fronte ad alcune differenze di implementazione su differenti browser (è il caso ad esempio di Javascript su browser Internet Explorer o Netscape Navigator), rendendo spesso necessario un controllo della versione e del produttore per scegliere l opportuna codifica della funzione da realizzare. 9

11 Per realizzare un interfaccia utente sempre più gradevole ed interattiva vengono inoltre utilizzati controlli ActiveX ed applet Java, piccole applicazioni che vengono eseguite all interno del contesto del browser. Quando però è necessario realizzare client più potenti è possibile utilizzare tecnologie come JavaWebStart od i Winform.Net di Microsoft; tali tecnologie consentono di eseguire vere e proprie applicazioni sobbarcandosi il compito di scaricarle ed eseguirle in ambienti di runtime indipendenti dal browser. Livello Presentazione Questo livello è implementato all interno di un web server, le tecnologie con cui può essere realizzato devono essere supportate dallo stesso in maniera nativa o attraverso l installazione di opportuni moduli che ne estendano le funzionalità. La prima tecnologia che è stata utilizzata ma che resta comunque valida ancora oggi quando non si pone particolare attenzione alle prestazioni è CGI (Common Gateway Interface), che consente l attivazione di un programma (compilato) o di uno script (interpretato) che si occupa di generare le pagine HTML da fornire al client. Un alternativa a CGI realizzata però solo su piattaforma Microsoft è ISAPI, che consente l attivazione di una DLL all interno del contesto di esecuzione del web server. Negli ultimi anni la maggior parte degli sviluppatori ha però rivolto la propria attenzione verso tecnologie che permettessero di inserire porzioni di codice all interno di pagine HTML, queste tecnologie sono: JSP (Java Server Pages), ASP (Active Server Pages) e PHP. Le prime vengono compilate producendo delle Servlet in codice bytecode, le altre vengono semplicemente 10

12 interpretate poichè le parti di codice sono scritte mediante linguaggi di scripting (VBscript per le pagine ASP). Ad ASP è da poco succeduto ASP.NET che ha modificato radicalmente lo sviluppo in ambiente Microsoft e che sarà oggetto di un analisi più approfondita nel seguito. Business Logic Layer È il livello che realizza le funzionalità vere e proprie dell applicazione ovvero elabora ed interpreta i dati forniti dai livelli adiacenti. Esso viene eseguito all interno di un application server che segue il ciclo di vita di tutti i processi business e mette a disposizione dello sviluppatore un insieme di servizi necessari per la realizzazione di funzionalità avanzate quali gestione delle transazioni, gestione dello stato, gestione della comunicazione, bilanciamento del carico tra le componenti ecc Le applicazioni Web attuali vedono come principali attori in questo campo le piattaforme J2EE di Sun e.net di Microsoft come evoluzione dell architettura DNA Entrambe le soluzioni impiegano una metodologia di progettazione basata sullo sviluppo di componenti software: questo tipo di approccio permette di realizzare componenti che implentano specifiche funzioni comuni a diversi contesti ed usarli in diverse applicazioni in modo da ridurre i tempi di sviluppo ed i costi di manutenzione del software, nonché di ridurre notevolmente il time to market. Qualora situazioni di eccessivo carico di elaborazione rendano necessario un aumento delle prestazioni a questo livello è possibile distribuire questi oggetti su più sistemi fisici in modo da rendere l applicazione scalabile al variare delle necessità. 11

13 Data Layer È il livello cui è demandata la gestione dello stato dell applicazione ovvero la gestione dei dati, tipicamente questa funzione viene realizzata da DBMS, sono però anche possibili interazioni con server di posta elettronica e di documentazione elettronica. Fattori di maturità delle applicazioni web In meno di dieci anni di sviluppo di applicazioni web l industria del software è divenuta più matura nel progettare e sviluppare sistemi web based, i cui fattori chiave sono: Interoperabilità. Il software deve supportare ciò che oggi viene definito plug n play così da poter interoperare con altro software a livello binario senza per questo richiedere lo sviluppo di software aggiuntivo. Scalabilità. Un applicazione web potrebbe dover supportare un carico di un centinaio di utenti appena messa in opera ma, dopo poco tempo, può dover sostenere un carico di migliaia di utenti. A causa della natura del web l architettura delle applicazioni deve essere in grado di sopportare la crescita a seguito di un aumento del carico, questo deve essere realizzato senza rendere necessario apportare modifiche strutturali che farebbero incrementare costi e perdite di tempo. Disponibilità. Scalare ad un massivo numero di utenti non è sufficiente, un applicazione web deve essere disponibile in ogni minuto del giorno perché gli utenti possono usarla in qualsiasi istante. Per implementare questa caratteristica è necessario sviluppare del software robusto, prevedere meccanismi di failover (se un computer non è più in grado di portare a termine un elaborazione un altro si fa carico di rispondere alle richieste) e di clustering. 12

14 Gestibilità. È importante, per quanto possibile, avere un unico punto di gestione dell applicazione web indipendentemente da quanto sia complicata dal punto di vista fisico. Scopo Questa tesi è stata svolta su stimolo e con il supporto dell azienda Trim s.n.c., una società di informatica fondata, grazie anche al supporto di start-up fornito dall incubatore delle imprese innovative del Politecnico di Torino, da tre giovani ingegneri informatici che hanno creduto nello sviluppo dell information tecnology. L azienda, che offre servizi di consulenza informatica, è interessata allo studio delle nuove tecnologie che approdano sul mercato dell IT per potere sviluppare applicazioni che possano trarne beneficio, in quest ottica TRIM offre la possibilità ad alcuni studenti del settore dell informazione di effettuare queste valutazioni e di avere un primo contatto con il mondo del lavoro. Proprio in questo ambito si è sviluppata questa tesi, come valutazione di una nuova tecnologia e come individuazione dei principi e delle metodologie per permettere lo sviluppo di applicazioni che ne facciano uso..net infatti è una tecnologia di recente introduzione, in particolare i tool di sviluppo sono stati rilasciati a febbraio 2002, che si pone come erede dell ormai datata architettura DNA di Microsoft. Scopo di questa tesi quindi è in primo luogo fornire un introduzione allo sviluppo di applicazioni Web mediante la neonata piattaforma.net di Microsoft mettendone in evidenza le differenze fondamentali con la precedente piattaforma DNA. Infine, sfruttando quanto appreso nella prima parte si intende realizzare un infrastuttura software atta ad implementare una metodologia di sviluppo per applicazioni web in ambiente.net, in modo da fornire un approccio per 13

15 velocizzare e standardizzare la realizzazione di applicazioni web fortemente orientate alla gestione di una base dati realizzandone diverse componenti riutilizzabili sia a livello presentazione che a livello applicativo. In particolare, semplicemente descrivendo opportunamente la struttura dei dati considerata, si genereranno le interfacce necessarie per effettuare le operazioni di inserimento, modifica, cancellazione e ricerca di dati e si implementerà la logica ad esse sottostante. Struttura dei Capitoli Capitolo 2 La piattaforma.net. Presenta un introduzione generale alla piattaforma. NET. Capitolo 3 Livello Presentazione in.net. Intende esporre le novità apportate a livello presentazione dalla piattaforma.net. Capitolo 4 Livello Applicazione in.net. Presenta una panoramica delle tecnologie e delle architetture utilizzate a livello applicazione dalla piattaforma.net Capitolo 5 Xml. Intende fornire un introduzione alle funzionalità offerte da Xml e da DOM. Capitolo 6 Architettura. Presenta le motivazioni che hanno portato allo sviluppo della piattaforma e ne illustra l architettura. Capitolo 7 Implementazione. Si sofferma sulla descrizione dell implementazione della piattaforma proposta. Capitolo 8 Case study. Presenta l applicazione della piattaforma ad un semplice caso di studio. Capitolo 9 Conclusioni. Trae una valutazione critica del lavoro svolto. 14

16 Capitolo 2 L ARCHITETTURA.NET Prima di entrare nel dettaglio dello sviluppo delle applicazioni web in ambiente.net è necessario introdurre brevemente le caratteristiche fondamentali di questa piattaforma che si ripercuotono in maniera determinante sui vari aspetti realizzativi di un applicazione web. Cos è.net? Con il termine.net viene identificata la neonata piattaforma Microsoft, schematizzata in figura 2.1, per lo sviluppo di servizi Web. Figura 2.1 La piattaforma.net La piattaforma comprende le seguenti aree:.net Framework e Visual Studio.NET, l infrastruttura su cui si basa l intero sistema ed un insieme di strumenti per la programmazione in più linguaggi. 15

17 Infrastruttura Server.NET Enterprise, costituita da un insieme di applicazioni per la distribuzione, il coordinamento e l accesso ai servizi Web. Questi server non sono però costruiti sul.net framework. Servizi di base, un insieme di servizi Web XML forniti da Microsoft integrati anche da un ampia gamma di partner e sviluppatori. Dispositivi intelligenti, quali PC, laptop, palmari, telefoni cellulari in grado di rendere accessibili questi servizi in qualsiasi momento. Il.NET Framework Il cuore della piattaforma.net è rappresentato dal.net framework, schematizzato in figura 2.2, esso è stato progettato per soddisfare i seguenti obiettivi: Fornire un ambiente object-oriented coerente a diversi ambiti di programmazione, dalle applicazioni per windows a quelle per il web. Fornire un ambiente di esecuzione che faciliti il deploy del software, ossia il processo con il quale un componente viene inserito nel suo ambiente operativo, e risolva i problemi di versioning, cioè problemi legati alla disponibilità di una nuova versione di un componente non compatibile con quello precedente. Fornire un ambiente di esecuzione che garantisca l esecuzione sicura del codice. Fornire un ambiente di esecuzione che elimini i problemi di scarse prestazioni legati a linguaggi di scripting ed agli ambienti interpretati 16

18 Figura 2.2 Il framework.net Il componente alla base del framework.net è il CLR (Common Language Runtime), l elemento che di fatto si occupa di gestire l esecuzione del codice, avviandolo, assegnandogli i permessi opportuni, fornendogli la memoria in cui archiviare i propri dati ed in generale gestendo l allocazione ed il rilascio delle risorse interfacciandosi direttamente con il sistema operativo ed i servizi COM+. 17

19 Figura Namespaces delle classi del.net framework È inoltre integrato nel framework un elevato numero di classi, i cui namespaces sono schematizzati in figura 2.3, che permettono di svolgere un ampia gamma di operazioni, da quelle di base a quelle più complesse che possono essere delineate fra le seguenti: Funzioni di base e tipi di base. Supporto GUI di Windows. Web Forms (ASP.NET). Accesso ai Dati (ADO.NET) Accesso alle directory, al File System ed al Registro. Riflessione ed attributi di.net. 18

20 Interoperabilità con COM. Grafica. Modello di esecuzione in.net Figura 2.4 Architettura del CLR Il codice gestito dal CLR, la cui architettura è schematizzata in figura 2.4, viene definito Intermediate Language (IL); esso non è il codice nativo della macchina su cui il framework è installato bensì un linguaggio di basso livello progettato per essere convertito in codice macchina con grande rapidità, concettualmente molto simile al bytecode utilizzato nella piattaforma Java. Quando è quindi necessario eseguire un programma il CLR si occupa di compilare il codice IL mediante una tecnica JIT (Just in Time) producendo del codice nativo soggetto a tecniche di caching in modo da evitare il ripetersi a breve della stessa operazione. 19

21 Assembly Un assembly è l unità logica in cui è memorizzato il codice gestito (cioè il codice eseguito nel CLR) compilato, in questo senso esso è simile ai concetti di DLL, di file eseguibile o di file che ospita le componenti COM. Un assembly può essere memorizzato in più file ed in questo caso vi è un file principale che ne contiene il punto di ingresso e descrive gli altri file. Figura 2.5 Struttura di un assembly Oltre al codice IL, l assembly, schematizzato in figura 2.5, contiene dei metadati che descrivono i tipi ed i metodi definiti nel codice corrispondente ma anche l assembly stesso. I metadati risiedono in una zona detta manifesto e permettono di effettuare controlli sulla versione dell assembly e sulla sua integrità, consentendo alle applicazioni o ad altri assembly che ne fanno riferimento di sapere come accedere a tale assembly senza l ausilio di altre fonti quali ad esempio il registro di sistema. Si tratta di un cambiamento radicale rispetto al vecchio modus operandi di COM in cui i GUID (essenzialmente degli identificatori) di componenti ed interfacce si ottenevano dal registro. 20

22 Gli assembly si dividono in due categorie, quelli privati e quelli condivisi. Gli assembly privati sono normalmente inclusi in un software ed il loro impiego è riservato a tale programma, il deploy avviene semplicemente per copia nella cartella principale in cui è memorizzato l eseguibile od in una relativa sottocartella. Gli assembly condivisi fungono da librerie comuni utilizzabili da parte di tutte le altre applicazioni in questo caso gli assembly vengono collocati in uno speciale sottoalbero di directory, nel file system, detto cache dell assembly (GAC, Global Assembly Cache), per evitare inoltre il rischio di collisione tra due assembly viene assegnato ad ogni assembly uno strong name, letteralemente un nome forte, che viene garantito come univoco. Uno strong name è un nome in testo semplice accompagnato da una chiave pubblica (quella dell azienda che lo ha prodotto) e da una firma digitale dell assembly. 21

23 Capitolo 3 Livello Presentazione in ambiente.net ASP.NET È la parte dell architettura.net che si occupa dello sviluppo di applicazioni mediante la costruzione di pagine web e che ha maggiormente beneficiato dei servizi e delle possibilità offerte dalla nuova piattaforma. In passato, nell architettura DNA, il livello presentazione di un applicazione web era realizzato mediante pagine ASP (Active Server Pages), essenzialmente costituite da pagine HTML in cui venivano inserite porzioni di codice scritte in un linguaggio di scripting (tipicamente VBscript o Jscript) che permettevano di modificarne l aspetto dinamicamente. Le pagine prodotte con tale approccio, a causa di questa commistione di layout e codice, risultano però spesso di difficile gestione. E necessario inoltre considerare come modifiche a queste due componenti richiedano spesso competenze professionali molto diverse tra loro. ASP è un linguaggio di scripting e come tale, essendo interpretato, incide sulle prestazioni, sulla pulizia e sicurezza del codice non fornendo un adeguato controllo dei tipi, fondamentale nell interazione con le business component. ASP.NET risolve tutti questi inconvenienti riducendo in maniera fondamentale il gap con le tecniche di sviluppo per applicazioni tradizionali. Le caratteristiche fondamentali di un applicazione ASP.NET sono: Separazione di Layout e Codice. Modello di programmazione Object Oriented, quindi anche notevolmente tipizzato. Modello di programmazione Event-Driven. 22

24 Gestione avanzata dello stato. Codice parzialmente compilato, con un notevole miglioramento delle prestazioni. Funzionalità di Debug e Trace. Possibilità di scrivere codice in ogni linguaggio supportato da.net. Pagine ASP.NET Il framework di pagine ASP.NET crea un'astrazione dell'interazione Web client-server tradizionale in modo da consentire agli sviluppatori di programmare l'applicazione utilizzando strumenti e metodi di sviluppo tradizionali che supportano lo sviluppo rapido di applicazioni (RAD) e la programmazione orientata a oggetti (OOP). Questo modello di programmazione che permette di mascherare in maniera quasi trasparente la natura stateless del protocollo http, alla base della comunicazione sul web, viene identificato con il nome di Web Form. All'interno delle pagine Web Form è possibile operare su elementi HTML utilizzando proprietà, metodi ed eventi. Il framework di pagine ASP.NET elimina i dettagli implementativi relativi alla separazione di client e server intrinseca alle applicazioni basate su Web, presentando un modello unificato per rispondere agli eventi del client nel codice eseguito sul server. Una pagina Web Form è costituita da due parti: gli elementi visivi, quali HTML, controlli server Web e testo statico, e la logica di programmazione della pagina. E ancora possibile mantenere in uno stesso file queste componenti, ma è preferibile applicare la separazione tra gli elementi visivi che vengono creati in un file ASPX, mentre il codice risiede in un file di classe distinto: il code-behind file. Ecco come si presenta una semplice pagina aspx: 23

25 Mentre il codice della classe associata, identificata dall attributo inherits presente nell intestazione della pagina, è il seguente: using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace Sample { public class WebForm1 : System.Web.UI.Page { protected TextBox TextBox2; protected Button Button1; protected Label Label1; protected Label Label2; protected TextBox TextBox1; private void Page_Load(object sender, System.EventArgs e) { // inserire le operazioni da effettuare al caricamento della pagina } override protected void OnInit(EventArgs e) { InitializeComponent(); base.oninit(e); } private void InitializeComponent() { this.button1.click += newsystem.eventhandler(this.button1_click); this.load += new System.EventHandler(this.Page_Load); } 24

26 } } private void Button1_Click(object sender, System.EventArgs e) { TextBox2.Text = TextBox1.Text; TextBox1.Text=""; } Nella definizione della pagina aspx è possibile notare come siano presenti dei tag <asp:> che identificano dei controlli server che hanno poi una corrispondenza con gli oggetti creati nel code-behind file. In questo caso gli oggetti sono stati istanziati staticamente nel file aspx, è però possibile creare dinamicamente controlli server richiamando gli opportuni costruttori nel codice della classe associata alla pagina. Nella classe è inoltre possibile osservare come avvenga la gestione degli eventi della pagina e degli eventi causati da postback generati da Controlli Web presenti nella pagina. La generazione e la gestione degli eventi creati avviene seguendo l ordine illustrato in figura 3.1. Figura 3.1 Sequenza delle azioni causate da eventi di pagina 25

27 Web form - principi di funzionamento All atto della prima richiesta, da parte di un utente di una pagina aspx, il sistema istanzia un oggetto della classe associata a tale pagina scatenando su questo, nell ordine, gli eventi illustrati in figura 3.1. Il primo degli eventi ad essere scatenato è Init che causa quindi l invocazione del metodo OnInit, ad esso associato in maniera predefinita. Come è possibile osservare dalla classe illustrata in precedenza il metodo OnInit si preoccupa di effettuare operazioni di inizializzazione della pagina, nell esempio è possibile notare come agganci ad alcuni eventi gli opportuni gestori, dichiarando i metodi che dovranno essere invocati quando tali eventi si verificheranno. Il secondo evento di pagina ad essere generato è Load che porta all esecuzione del metodo Page_Load, esso è il metodo in cui si devono posizionare le operazioni che si intendono effettuare ad ogni caricamento della pagina. Essendo la prima richiesta della pagina non possono essersi verificati eventi relativi ai controlli presenti nella stessa, viene quindi generato il codice html da inviare al client e la pagina viene scaricata. Nel caso in cui sul client si verifichi un evento questo scatena una nuova richiesta della stessa pagina, che permette anche di comunicare lo stato dei controlli presenti nella pagina al server; questo processo viene definito postback.. La richiesta della pagina al server scatena nuovamente gli eventi Init e Load in maniera analoga a quanto descritto in precedenza. Questa volta però è possibile, grazie alle informazioni inviate dal client contestualmente alla richiesta della pagina, per il server accorgersi che un controllo ha scatenato un evento che causa quindi l esecuzione del metodo associato. Nell esempio questo procedimento porta all esecuzione del metodo Button1_Click, in cui si effettuano delle modifiche ai campi Text di due textbox presenti sulla pagina. Quindi il server genera il nuovo codice HTML da inviare al client e la pagina viene nuovamente scaricata. Questo ciclo si ripete ad ogni successiva richiesta della pagina, causata da un evento lato client, ovvero ad ogni postback. 26

28 Controlli Server Web I controlli server sono quindi degli oggetti eseguiti sul server che producono un output in HTML per implementare il comando nel browser, gestiscono il reperimento delle informazioni inserite dall utente e si preoccupano di mantenere lo stato tra un postback e l altro. Figura 3.2 Gerarchia di classi di controlli web. I tipi principali di controlli server, in figura 3.2 ne è mostrata la gerarchia, sono i seguenti: Controlli server HTML: Sono gli equivalenti dei comandi HTML. Essi creano un output pressoché identico alla definizione del comando nella pagina ed utilizzano gli stessi attributi degli elementi Html standard. Controlli di convalida: Sono una collezione di comandi che verificano e convalidano i valori immessi in altri comandi di una pagina. Eseguono una convalida lato-client, lato-server o entrambi a seconda del tipo di browser installato sulla macchina client. Controlli Webform: sono una collezione di controlli che vengono tradotti in comandi <form> HTML, ma non hanno, a differenza dei 27

29 controlli server HTML una corrispondenza uno ad uno con i comandi HTML. Controlli elenco ASP.NET: forniscono diversi metodi per la creazione di elenchi, possono essere associati ad una fonte di dati. Creazione di controlli server personalizzati L utilizzo dei controlli server presenti nella class library del.net framework non sempre è sufficiente ed in alcuni casi è necessario crearne di personalizzati che possono essere riutilizzati in diverse applicazioni web rendendoli così di fatto delle componenti server per la gestione dell interfaccia utente. Una strategia di questo tipo era realizzabile, anche se in modo notevolmente meno flessibile e potente, nella precedente tecnologia asp mediante direttive SSI (Server Side Include) che permette di riutilizzare moduli di scripting opportunamente pacchettizzati in file di include per la distribuzione in più applicazioni. Oggetti intrinseci In ASP.NET sono presenti degli oggetti intrinseci la cui struttura resta pressoché inalterata, rispetto a quelli già presenti in ASP, anche se alcuni metodi sono stati modificati ed altri aggiunti. Questi oggetti sono: Application, utilizzato per conservare lo stato dell applicazione, visibile da tutte le sessioni. Session, utilizzato per conservare lo stato di una sessione utente è accessibile solo da questa. 28

30 Server, consente di reperire informazioni sul server, di effettuare la gestire la restituzione di pagine. Request, consente di esaminare le informazioni inviate nella richiesta della pagina dal browser al server. Response, consente di modificare la risposta del server a seguito della richiesta della pagina in esame. Page, rappresenta la pagina corrente ed è il contenitore di tutti gli oggetti precedenti. Rispetto al passato è possibile notare la scomparsa dell oggetto ASPError in quanto adesso gli errori vengono gestiti tramite eccezioni. Gestione dello stato Le pagine Web vengono ricreate a seguito di ogni richiesta al server. Con le tradizionali metodologie di programmazione Web, tutte le informazioni associate alla pagina e ai controlli presenti nella pagina andrebbero persi ad ogni percorso di andata e ritorno tra browser e server web. Per superare questo limite della programmazione Web tradizionale, nel framework ASP.NET sono disponibili diverse opzioni che consentono di conservare lo stato di un applicazione web. Alcune opzioni includono la conservazione delle informazioni sul client, ad esempio direttamente nella pagina o in un cookie, mentre altre includono la memorizzazione delle informazioni sul server, ad esempio utilizzando gli oggetti Application o Session, tra i percorsi di andata e ritorno, ma queste sono del tutto analoghe al vecchio paradigma di programmazione ASP. In ASP.NET invece è inclusa una funzionalità denominata stato di visualizzazione realizzata mediante la proprietà Page.Viewstate che mantiene automaticamente i valori di proprietà della pagina e tutti i controlli che contiene tra i percorsi di andata e ritorno. Bisogna 29

31 però tenere presente che questa funzionalità viene realizzata inserendo un campo nascosto nel form che codifica lo stato di ogni controllo della pagina, questo campo viene inviato in continuazione tra client e server e, se i controlli sono complessi, può crescere notevolmente di dimensione rallentando i tempi di ricezione ed invio della pagina. In questo caso è possibile però limitare il mantenimento dello stato solo per i controlli per cui è effettivamente necessario o conveniente (in particolare andando a modificare la proprietà Control.EnableViewState). Un altra caratteristica rilevante di ASP.NET è la possibilità di ospitare lo stato di sessione all esterno del server web, in modo da evitare problemi dovuti alla presenza di dispostitivi di bilanciamento del carico in una server farm. In particolare questo può essere conservato su una macchina cui sia stato installato un servizio apposito (StateServer) oppure in cui sia installato SQL Server. 30

32 Capitolo 4 Livello Applicazione in ambiente.net Nonostante le modifiche apportate dalla piattaforma.net, in particolare con l introduzione del CLR, le caratteristiche di base della progettazione delle applicazioni rimangono invariate rispetto all architettura DNA. Nonostante l avvento delle pagine ASP.NET compilate, una buona progettazione delle applicazioni richiede ancora, anche per le applicazioni più compatte, l utilizzo dei componenti. Nella precedente architettura DNA, infatti, con l integrazione della logica applicativa all interno delle componenti COM era possibile godere di vantaggi assoluti in termini prestazionali rispetto ad una logica sviluppata mediante l utilizzo di linguaggi di scripting. Ora con l esecuzione delle pagine compilate un tale vantaggio non è più avvertibile; restano e sono fondamentali però le motivazioni di riutilizzo delle componenti realizzate, di un architettura robusta e di un codice facilmente mantenibile e leggibile. COM COM è l acronimo di Component Object Model, è una tecnologia per lo sviluppo di componenti software riutilizzabili, per fare ciò è necessario implementare la binary encapsulation, cioè la capacità del codice macchina del server di evolvere senza per questo rendere necessaria un evoluzione del client, e la binary compatibility, cioè la possibilità di usare il codice macchina di un oggetto che è stato creato usando un ambiente di sviluppo quando si sta sviluppando il codice client in un altro ambiente. Il meccanismo con cui COM realizza questo è mediante una netta separazione tra interfacce ed implementazione. I Client vedono gli oggetti COM solo usando le loro 31

33 interfacce, si osservi la figura 4.1; un interfaccia COM definisce un protocollo attraverso il quale un oggetto client può comunicare con un oggetto server. IUnknown ISample COM Object Figura 4.1 Oggetto COM che espone due interfacce. Lo sviluppo di componenti COM richiede l implementazione di alcune interfacce standard per la gestione stessa del componente e di una tecnica per la gestione degli errori basata su un codice HRESULTS. Inoltre sono presenti diversi problemi relativi alla distribuzione dei componenti dovuti al fatto che ogni interfaccia viene contrassegnata mediante un identificatore conservato centralmente nel registro della macchina. Quando il principio dell immutabilità delle interfacce viene disatteso rompendo così il contratto tra oggetto client ed oggetto server, si verificano problemi di difficile soluzione, ad esempio quando due client diversi richiedono due versioni di un stesso componente COM. Componenti.NET L approccio che.net utilizza per gestire i componenti sfrutta tutti vantaggi della tecnologia COM permettendo però un maggior livello di astrazione raggiunto grazie alla presenza di un ambiente di esecuzione unificato che permette di sollevare gli sviluppatori da compiti di basso livello necessari per aderire allo standard. Il CLR infatti si incarica dell automazione dei meccanismi necessari per la comunicazione tra le componenti evidenziati per le componenti COM. Un componente.net può quindi essere 32

34 semplicemente visto come la definizione di una o più classi e, quando istanziato viene gestito ed eseguito dal CLR beneficiando dei servizi offerti da questo, come la gestione degli errori mediante eccezioni e l ausilio del Garbage Collector per il rilascio delle risorse. Servizi offerti ai componenti Per sviluppare la logica applicativa i programmatori possono usufruire di una serie di servizi che permettono di agevolare la realizzazione di operazioni complesse che spesso coinvolgono l interazione e la condivisione di informazioni tra le componenti. Questi servizi permettono tra l altro di rendere l applicazione scalabile e di accelerare il tempo di risposta. Tali servizi sono: Thread pooling. Servizio che si incarica di ripartire il carico di lavoro su più thread automaticamente nascondendo i dettagli implementativi, questo permette di risparmiare le risorse di sistema e di semplificare lo sviluppo. Object pooling. La creazione di determinati oggetti può spesso impiegare un tempo non trascurabile per avere luogo. In un sistema scalabile e robusto gli oggetti devono poter essere creati e distrutti velocemente per poter mantenere la coerenza e l integrità dei dati. Nel caso in cui un oggetto, per la sua complessità, richieda un tempo notevole per essere creato il sistema crea inizialmente un insieme di questi oggetti e li mette in un pool, in questo modo quando uno di questi oggetti viene richiesto il sistema prende uno di questi oggetti dal pool e lo rende disponibile all applicazione. Il pool può essere configurato in modo da definire quanti devono essere al massimo od al minimo gli oggetti presenti al suo interno. 33

35 Connection pooling. Considerato che le connessioni a database sono estremamente preziose, costose da creare e da mantenere in memoria è conveniente applicare una tecnica di condivisione delle connessioni. Ad esempio se si possiedono solo dieci licenze ma il sistema deve supportare un centinaio di utenti queste devono essere condivise. Se un gran numero di utenti richiedono delle connessioni contemporaneamente il sistema impiegherebbe troppo tempo per creare queste connessioni e renderle disponibili per l uso. E quindi necessaria una gestione simile all object pooling in cui il sistema mantiene sempre un pool di connessioni che possono essere, a seguito di una richiesta, rese disponibili molto più velocemente per servirla. Gestione della sicurezza. Scrivere codice per gestire la sicurezza è un compito piuttosto arduo. Gli amministratori di sistema possono configurare il livello di sicurezza solo per un determinato processo, non per gli oggetti ed i metodi che il processo fornisce. Per realizzare una più facile e profonda gestione della sicurezza una tecnologia basata sulle componenti offre la nozione di sicurezza basata sui ruoli. La sicurezza basata sui ruoli è un astrazione della sicurezza fornita dal sistema che consente ai programmatori di definire semplicemente delle impostazioni di sicurezza per componenti, oggetti, interfacce e metodi. Gestione delle transazioni. Una transazione è costituita da una serie di operazioni che hanno successo o falliscono in gruppo, ossia se un operazione della serie fallisce, tutte le altre operazioni già completate durante la transazione devono essere riportate al loro stato iniziale. Le transazioni consentono di mantenere l integrità di un database poiché garantiscono l implementazione le proprietà ACID (dall inglese ACID acronimo di Atomicity, Consistency, Isolation, Durability ). 34

36 Elaborazione Disconnessa. Le applicazioni distribuite attraverso Internet sono basate su un sistema di code di messaggi che consentono di realizzare un meccanismo di comunicazione asincrono e debolmente accoppiato (spesso definito anche come disconnesso). Le applicazioni possono accodare messaggi che verranno poi in seguito disaccodate per consentirne l elaborazione. In questo modo è quindi possibile realizzare la comunicazione tra due componenti che non siano necessariamente attivi nello stesso istante. Attivazione JIT (Just In Time). Permette di creare un oggetto a seguito di una chiamata di metodo e lo rilascia non appena questo viene concluso. Questi servizi sono offerti sulla piattaforma.net da COM+ come era già in passato per la piattaforma DNA. COM+ nasce come componente aggiuntivo di Windows NT con il nome di MTS (Microsoft Transaction Server), in seguito all integrazione con COM e ad un potenziamento dei servizi offerti. I componenti.net che utilizzano i servizi COM+ vengono ora definiti Serviced Components cioè componenti serviti e, per poter accedere ai servizi, devono implementare funzionalità di interoperabilità con COM+ disponibili mediante il namespace System.EnterpriseServices, questo si rende necessario perché il CLR non fornisce implicitamente queste funzionalità. Sarebbe però errato presumere che solo perché si sta sviluppando un'applicazione aziendale è necessario utilizzare gli EnterpriseServices. Questi servizi sono molto efficienti e possono essere utilizzati in molti casi per semplificare in maniera significativa la codifica ma solo se le funzionalità fornite sono adatte per i requisiti dell'applicazione specifica. Architettura del Business tier La business logic è il cuore dell applicazione: in.net, a differenza di altre tecnologie è lasciata una relativa libertà nella scelta dell architettura di questo 35

37 livello. Vengono però comunque individuati alcuni livelli funzionali, si veda la figura 4.2, in cui può essere suddivisa la logica applicativa, un livello di facciata, uno per l implementazione delle regole di business ed uno per l accesso ai dati. L approccio che viene seguito di solito è di individuare le entità funzionali che caratterizzano l applicazione ed implementare una classe per ogni entità ad ogni livello codificandone le relative funzionalità. Figura 4.2 Architettura business tier E però necessario notare come questo sia solo un modo di affrontare il problema, nulla impedisce qualora ve ne siano le condizioni, di svincolarsi dalla complessità realizzativa di questa architettura e di realizzarne una ottimizzata per i propri scopi. Business Facade Layer Questa componente è spesso usata per fornire una coerente interfaccia verso gli oggetti di business sottostanti e per isolare il client dai cambiamenti della logica. I principali compiti svolti a questo livello sono: Ricevere input dal livello presentazione. 36

38 Usare direttamente il livello di accesso ai dati qualora sia necessaria un operazione di lettura dei dati. Passare le richieste al Business Rules Layer ed inoltrarne il responso verso il livello presentazione. Mantenere temporaneamente lo stato tra una chiamata e l altra agli oggetti business. Questo strato semplifica quindi l accesso del client al Business Rules Layer nascondendo la complessità delle interazioni tra gli oggetti business. Inoltre se si considera uno scenario distribuito questo strato concentra su di se le diverse chiamate remote che il client (il livello presentazione nel caso di un applicazione web) dovrebbe fare per accedere agli oggetti business. La presenza di questo strato si rivela molto utile quando il client non è basato sul web ma su applicazioni vere e proprie, evitando di rendere necessario la reinstallazione di tutti i client a seguito di una modifica della business logic. Business Rules Layer A questo livello risiedono gli oggetti o entità caratterizzanti il funzionamento del sistema, le regole che devono rispettare sono codificate all interno di questi oggetti. Il Business Rules Layer quindi: Riceve le richieste dal Business Facade Layer. Processa le richieste secondo le opportune regole di business. Usa il livello di accesso ai dati per caricare o rendere persistenti i dati. Passa il risultato verso il Business Facade Layer. 37

39 Data Access Layer Il Data Access Layer realizza la funzione di caricare i dati da e mandarli ad un database o ad un altro servizio dati. Il Data Access Layer: Riceve una richiesta da un oggetto business per caricare o mandare dati al Servizio di dati. Effettua la richiesta mediante stored procedure presenti sul database od elaborando direttamente la query. Restituisce il risultato della query all oggetto business tipicamente come oggetto DataSet tipizzato. Esempio Gestione di un account Per illustrare il funzionamento della business logic e le interazioni tra i livelli si osservi, in figura 4.3, l esempio della gestione di un account di un utente su un sito di commercio elettronico. 38

40 Figura 4.3 Diagramma di interazione tra le componenti presenti a livello web e gli strati del business tier Si osservino infine le codifiche dei metodi ai vari livelli. Metodo BusinessFacade.CustomerSystem.CreateCustomer: /// <summary> /// Creates a new customer. /// <remarks>custdata is passed back as an out parameter for remoting.</remarks> /// <param name=" address">customer's address.</param> /// <param name="password">customer's account password.</param> /// <param name="name">customer's name.</param> /// <param name="address">customer's address.</param> /// <param name="country">customer's country.</param> /// <param name="phonenumber">customer's phone number.</param> /// <param name="fax">customer's fax number.</param> /// <param name="custdata">returns customer's data.</param> /// <retvalue>true if Create is successful: otherwise, false.</retvalue> /// </summary> public bool CreateCustomer(String address, String password, String name, String address, String country, String phonenumber, String fax, out CustomerData custdata) { // // Create a new row // custdata = new CustomerData(); 39

41 DataTable table = custdata.tables[customerdata.customers_table]; DataRow row = table.newrow(); // // Fill input data into new row // row[customerdata. _field] = address; row[customerdata.password_field] = password; row[customerdata.name_field] = name; row[customerdata.address_field] = address; row[customerdata.country_field] = country; row[customerdata.phone_field] = phonenumber; row[customerdata.fax_field] = fax; // // Add it to the table // table.rows.add(row); // // Insert the customer using the business rules // return (new Customer()).Insert(custData); } In questo metodo, invocato direttamente dal livello presentazione, i dati relativi ad un cliente da inserire vengono memorizzati in un oggetto riga di un oggetto dataset tipizzato, esso li conterrà permettendone il passaggio al metodo Insert della classe Customer. Metodo BusinessRules.Customer.Insert: /// <summary> /// Validates and inserts a new customer /// <remarks> /// Returns customer data. If there are fields that contain errors /// that contain errors they are individually marked. /// </remarks> /// <param name="customer">customerdata to be inserted.</param> /// <retvalue>true if successful; otherwise, false.</retvalue> /// <exception> class='system.applicationexception'> /// An invalid customer was passed in. /// </exception> /// </summary> public bool Insert(CustomerData customer) { // // Check Preconditions // ApplicationAssert.CheckCondition(customer!= null,"customer Parameter cannot be null",applicationassert.linenumber); ApplicationAssert.CheckCondition(customer.Tables[CustomerData.CUSTO MERS_TABLE].Rows.Count == 1,"customer Parameter can only contain 1 row",applicationassert.linenumber); // 40

42 // Get the row // DataRow row = customer.tables[customerdata.customers_table].rows[0]; // // Do core validation // bool result = Validate(row); // // Do additional validation // if ( row.getcolumnerror(customerdata. _field) == String.Empty ) { // // address passed format verification, now ensure // that it does not already exist in the database. // CustomerData existingcustomer = GetCustomerBy (row[CustomerData. _FIELD].ToString()); if ( null == existingcustomer ) { // // is unique, do the insert // if ( result ) { using (Customers customersdataaccess = new Customers()) { result = CustomersDataAccess.InsertCustomer(customer); } } } else { // // is not unique, flag the error // row.setcolumnerror(customerdata. _field, CustomerData. _FIELD_NOT_UNIQUE); row.rowerror = CustomerData.INVALID_FIELDS; } result = false; } } // // Return the result of the operation // return result; Tale metodo si occupa di effettuare la validazione dei dati e di controllare se l non sia già presente per nessun altro cliente già inserito nel database, 41

43 garantendone così l unicità. Se le condizioni sono verificate passa i dati al data access layer per renderli persistenti. Metodo DataAccess.Customers.InsertCustomer: /// <summary> /// Inserts a new customer into the database. /// <param name="customer">a CustomerData containing detailed customer information.</param> /// <retvalue>success or failure of the database insert.</retvalue> /// </summary> public bool InsertCustomer(CustomerData customer) { if ( dscommand == null ) { throw new System.ObjectDisposedException( GetType().FullName ); } dscommand.insertcommand = GetInsertCommand(); dscommand.update(customer, CustomerData.CUSTOMERS_TABLE); // // Check for table errors to see if the update failed. // if ( customer.haserrors ) { customer.tables[customerdata.customers_table].geterrors()[0].clearerrors(); return false; } else { customer.acceptchanges(); return true; } } A livello DataAccess il metodo InsertCustomer dell oggetto Customers si occupa di realizzate l esecuzione del comando di inserimento del cliente sul Database, al fine di rendere persistenti le modifiche. Nell interazione tra i vari livelli è possibile notare come passando dal facade al data access layer si definiscano i dettagli dell implementazione del modello ad oggetti e delle operazioni che si compiono su questi. Il livello facade ha il compito di inoltrare i dati che caratterizzano l account da creare verso il livello business in cui questi vengono validati e, se corretti sono inviati al data access layer che ne gestisce la memorizzazione sul Database. E da notare come i dati che vengono passati tra i livelli siano oggetti di tipo DataSet tipizzati in modo da accogliere i dati di un cliente (in particolare CustomerData che deriva appunto dalla classe DataSet). Un DataSet è una rappresentazione di dati residente in memoria, che fornisce un modello di programmazione relazionale 42

44 coerente indipendentemente dall'origine dati. È possibile utilizzarlo con numerose e svariate origini dati, con dati XML o per la gestione di dati locali all'applicazione. Oggetti distribuiti Uno dei vantaggi delle architetture n-tier è la possibilità di potere distribuire i livelli, che fino a ad ora erano stati intesi come livelli logici, cioè classi o componenti (o assembly secondo il modello di.net) separati le une dalle altre, su differenti server in modo da permettere alle applicazioni di ripartire il carico di elaborazione tra più macchine. Questo richiede solitamente l aggiunta di codice che si occupi della gestione della comunicazione tra i livelli. Decidere di separare o meno i livelli è molto importante e dipende dal carico che ci si aspetta la propria applicazione debba sopportare. E necessario osservare come la separazione fisica dei livelli rallenti la comunicazione tra gli stessi, in quanto si introduce un ritardo nell interazione tra i server dovuto alla comunicazione che avviene tramite la rete. La comunicazione interprocesso tra due componenti è diversi ordini di grandezza più veloce rispetto alla comunicazione remota. Inoltre, come è facile intuire un applicazione distribuita aumenta i costi di deploy e di gestione in modo determinante. E quindi necessario realizzare applicazioni di questo tipo solo quando se ne abbia realmente la necessità. Gli scenari tipici di distribuzione per un applicazione web n-tier sono essenzialmente due. Il primo vede i livelli presentazione e business ospitati su una sola macchina che funge sia da Web server che da application server e, naturalmente il livello 43

45 dati, a causa dell intensivo sfruttamento di risorse che la gestione dei database comporta, su un database server. Il secondo propone una netta separazione tra i tre livelli ciascuno dei quali viene ospitato in un server. Questa soluzione è quella che maggiormente si presta a reagire ad un aumento di carico, è cioè maggiormente scalabile. E infatti possibile realizzare dei cluster, con un meccanismo di bilanciamento del carico, di server Web per la gestione del livello presentazione e fare altrettanto con il livello business che sarà ospitato da un cluster di application server, mentre il livello dati resta comunque solitamente ospitato da una sola macchina. In uno scenario come quello descritto deve essere quindi realizzata la comunicazione distribuita tra il livello presentazione ed il livello business, in.net questo avviene con la tecnologia Remoting..NET Remoting.Net Remoting è l evoluzione di DCOM che in passato permetteva di chiamare componenti COM in remoto. Uno degli obiettivi principali di.net Remoting è di fornire l infrastruttura in grado di nascondere la complessità dei metodi di chiamata per oggetti remoti e riportarne i risultati. E da considerarsi remoto qualsiasi oggetto esterno al dominio di applicazione dell oggetto chiamante, anche se è fisicamente sullo stesso computer. E possibile modificare un qualsiasi oggetto in un oggetto remoto facendolo derivare dalla classe MarshalByRefObject. Quando un client attiva un oggetto remoto riceve un proxy per questo oggetto, il proxy agisce da rappresentante lato client per l oggetto remoto. Di fatto quando il client chiama i metodi sull oggetto remoto, esso chiama i metodi sul proxy locale che implementa i metodi pubblici di un oggetto reale remoto. 44

46 Figura 4.4 Comunicazione tra client e server attraverso il proxy e lo stub. In figura 4.4 è possibile osservare come il proxy riceva le richieste dal client e comunichi con l infrastruttura remoting per formattare ed eseguire il marshalling della richiesta in modo da potere superare i limiti del dominio di applicazione del client. Lo stub, in pratica un oggetto che rappresenta il client per il server, riceve la richiesta e, dopo le fasi di unmarshalling e decifratura, la inoltra al server che restituisce in modo analogo il risultato tramite lo stub al proxy. In figura è possibile osservare come la trasmissione dei messaggi tra client e server venga realizzata da un canale. Questa architettura è estremamente flessibile rispetto a quanto gia presente in DCOM in quanto è possibile personalizzare i canali esistenti o crearne di nuovi con protocolli di comunicazione diversi, ad ogni canale è infatti associato un codificatore per definire il modo con cui i messaggi saranno inviati attraverso il canale. I canali predefiniti che è possibile usare sono HTTP e TCP. Si riporta un semplice esempio di Client e Server che utilizzano la tecnologia.net remoting su canale TCP : using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels.TCP; namespace RemotingSamples { public class Client { 45

47 public static int Main(string [] args) { TCPChannel chan = new TCPChannel(); ChannelServices.RegisterChannel(chan); ForwardMe param = new ForwardMe(); HelloServer obj = (HelloServer)Activator.GetObject( typeof(remotingsamples.helloserver), "tcp://localhost:8085/sayhello"); if (obj == null) System.Console.WriteLine("Could not locate server"); else { Console.WriteLine("The value is " + param.getvalue()); ForwardMe after = obj.hellomethod(param); Console.WriteLine("The value after the call is " + after.getvalue()); } return 0; } } } Il client, dopo la creazione e la registrazione di un canale è in grado, conoscendo la porta ed il computer su cui è in attesa l oggetto remoto di ottenere il proxy a tale oggetto. Grazie al proxy il client effettua, come se fosse locale, una chiamata ad un metodo dell oggetto remoto. Ecco infine l implementazione dell oggetto server: using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels.TCP; namespace RemotingSamples { public class HelloServer : IHello { public static int Main(string [] args) { TCPChannel chan = new TCPChannel(8085); ChannelServices.RegisterChannel(chan); RemotingServices.RegisterWellKnownType( "server", "RemotingSamples.HelloServer", "SayHello", WellKnownObjectMode.SingleCall); System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine(); return 0; } public HelloServer() { Console.WriteLine("HelloServer activated"); } ~HelloServer() { Console.WriteLine("Object Destroyed"); } 46

48 } public ForwardMe HelloMethod(ForwardMe obj) { Console.WriteLine("Hello.HelloMethod : {0}", name); return "Hi there " + name; } } Il server istanzia un oggetto canale TCP specificando però la porta su cui attenderà le eventuali chiamate da parte del client, lo registra e si dichiara definendo che tipo di oggetto sia e la relativa modalità di attivazione. In uno scenario di applicazione web come quello illustrato in precedenza è evidente come l applicazione ASP.NET eserciti il ruolo di client, mentre il business facade layer implementi le funzionalità di server consentendo tra l altro di concentrare su di sè le chiamate alla logica sottostante, che per quest ultimo è locale, permettendo così di ridurre i tempi di latenza per le chiamate agli oggetti. 47

49 Capitolo 5 XML XML XML, ovvero exstensible Markup Language, è uno standard supportato dall organizzazzione W3C per il markup dei documenti, che definisce una sintassi generica per contrassegnare i dati utilizzando tag semplici e leggibili. La sintassi XML rappresenta un formato standard per i documenti utilizzati dai computer; infatti esso risulta sufficientemente flessibile da poter essere personalizzato per l utilizzo in domini estremamente diversi, come ad esempio, le pagine web, lo scambio di dati elettronici, la grafica vettoriale, la genealogia, la serializzazione di oggetti, la chiamata di procedure remote ecc.. Un documento XML è essenzialmente un file di testo in cui i dati presenti all interno sono circondati dai tag che li descrivono. Una particolare unità di dati viene chiamata elemento. Le specifiche XML descrivono con precisione l esatta sintassi delle stringhe di testo: il modo con cui gli elementi sono delimitati dai tag, l aspetto dei tag, i nomi accettabili per gli elementi, il posizionamento degli attributi. Superficialmente la struttura di un documento XML assomiglia a quella di un documento HTML, sussistono però alcune differenze fondamentali tra i due. La differenza fondamentale consiste nel fatto che XML è un linguaggio di metamarkup cioè non ha un insieme prefissato di tag e di elementi che si suppone funzionino e siano utilizzati da tutti allo stesso modo e per tutte le applicazioni. Al contrario XML permette di definire gli elementi di cui si hanno bisogno per descrivere la realtà che si sta considerando in quel momento. Nonostante XML sia flessibile per quanto riguarda gli elementi, risulta piuttosto rigido sotto altri aspetti. Infatti la grammatica per i documenti regola 48

50 con precisione il posizionamento dei tag, i nomi legali ad essi assegnabili ed il modo in cui gli attributi possono essere associati agli elementi. Questa grammatica è sufficientemente specifica da permettere lo sviluppo di parser per comprendere la struttura di ogni documento che ne rispetti le regole, cioè che sia ben formato. Un documento che non sia ben formato non è considerato valido. Se in un determinato ambito si decide di utilizzare solo determinati tag si realizza un applicazione XML, dove col termine applicazione non si intende un programma eseguibile che utilizza il documento XML ma un applicazione della sintassi XML al un particolare dominio, come ad esempio la grafica vettoriale. Ecco un esempio di documento XML: <?xml version="1.0"?> <purchaseorder orderdate=" "> <shipto country="us"> <name>alice Smith</name> <street>123 Maple Street</street> <city>mill Valley</city> <state>ca</state> <zip>90952</zip> </shipto> <billto country="us"> <name>robert Smith</name> <street>8 Oak Avenue</street> <city>old Town</city> <state>pa</state> <zip>95819</zip> </billto> <comment>hurry, my lawn is going wild!</comment> <items> <item partnum="872-aa"> <productname>lawnmower</productname> <quantity>1</quantity> <USPrice>148.95</USPrice> <comment>confirm this is electric</comment> </item> <item partnum="926-aa"> <productname>baby Monitor</productName> <quantity>1</quantity> <USPrice>39.98</USPrice> <shipdate> </shipdate> </item> 49

51 </items> </purchaseorder> Validazione di un documento XML XML è estremamente flessibile ma non tutte le applicazioni possono gestire una simile flessibilità. Infatti molti programmi possono lavorare solo con alcuni tipi particolari di file XML, che rispettino uno standard prefissato. E quindi necessario assicurarsi che un dato documento rispetti le regole XML imposte dall applicazione stessa. La soluzione a questo problema è l utilizzo di XML Scheme. Gli schemi sono scritti secondo una sintassi formale che descrive con precisione quali elementi ed entità possono apparire all interno di un documento e quali possano essere i contenuti e gli attributi di tali elementi. E possibile quindi definire regole come, per esempio un oggetto persona deve possedere un attributo codice fiscale. Applicazioni XML differenti possono utilizzare schemi differenti per specificare ciò che risulta permesso o vietato all interno dei documenti. I parser che permettono di effettuare la validazione dei documenti, ne confrontano il contenuto rispetto ai relativi schemi e ne elencano i punti che non rispettano i vincoli specificati. Un documento valido include una dichiarazione che identifica lo schema che il documento deve soddisfare. Lo schema a sua volta elenca tutti gli elementi, gli attributi e le entità utilizzabili dal documento ed i contesti in cui possono essere utilizzati. La validazione opera sul principio che ciò che non è permesso è assolutamente vietato, quindi qualsiasi oggetto contenuto nel documento deve corrispondere ad una dichiarazione all interno dello schema. Nel caso in cui un documento soddisfi le specifiche imposte dal suo schema allora questo viene considerato valido. Ecco lo schema del precedente documento XML: <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:annotation> <xsd:documentation xml:lang="en"> Purchase order schema for Example. 50

52 </xsd:documentation> </xsd:annotation> <xsd:element name="purchaseorder" type="purchaseordertype"/> <xsd:element name="comment" type="xsd:string"/> <xsd:complextype name="purchaseordertype"> <xsd:sequence> <xsd:element name="shipto" type="usaddress"/> <xsd:element name="billto" type="usaddress"/> <xsd:element ref="comment" minoccurs="0"/> <xsd:element name="items" type="items"/> </xsd:sequence> <xsd:attribute name="orderdate" type="xsd:date"/> </xsd:complextype> <xsd:complextype name="usaddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:nmtoken" fixed="us"/> </xsd:complextype> <xsd:complextype name="items"> <xsd:sequence> <xsd:element name="item" minoccurs="0" maxoccurs="unbounded"> <xsd:complextype> <xsd:sequence> <xsd:element name="productname" type="xsd:string"/> <xsd:element name="quantity"> <xsd:simpletype> <xsd:restriction base="xsd:positiveinteger"> <xsd:maxexclusive value="100"/> </xsd:restriction> </xsd:simpletype> </xsd:element> <xsd:element name="usprice" type="xsd:decimal"/> <xsd:element ref="comment" minoccurs="0"/> <xsd:element name="shipdate" type="xsd:date" minoccurs="0"/> </xsd:sequence> <xsd:attribute name="partnum" type="sku" use="required"/> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> 51

53 <!-- Stock Keeping Unit, a code for identifying products -- > <xsd:simpletype name="sku"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[a-z]{2}"/> </xsd:restriction> </xsd:simpletype> </xsd:schema> DOM Il Document Object Model è una raccomandazione dell organizzazione W3C che descrive un modello ad oggetti, neutrale rispetto ai linguaggi di programmazione, utile ad immagazzinare documenti di tipo gerarchico in memoria. Recentemente è stato rilasciato il documento che definisce le specifiche del DOM level 3, anche se quello realizzato dagli ambienti di programmazione è il livello 2. Il DOM è stato concepito per essere neutrale rispetto ai sistemi operativi ed ai linguaggi di programmazione, di conseguenza è definito mediante la specifica di interfacce realizzate mediante IDL (Interface Description Language). Ogni linguaggio di programmazione che supporta DOM traduce queste interfacce secondo la propria sintassi e ne implementa i metodi. Tutte le interfacce del core di DOM sono derivate dall interfaccia Node, che fornisce un insieme generico di interfacce per accedere alla struttura ed al contenuto dell intero documento o di un suo frammento. DOM risulta più adatto per affrontare determinate classi di problemi e meno adatto per implementarne altre. In particolare, dato che la gerarchia di oggetti DOM memorizza riferimenti tra i vari nodi di un documento, è indispensabile leggere e sottoporre a parsing tutto il documento prima che il relativo modello ad oggetti possa essere messo a disposizione di un applicazione DOM. Ciò quindi comporta che l intero documento venga mantenuto in memoria provocando quindi un overhead non indifferente. Questo modello di utilizzo della memoria rende DOM poco adatto per applicazioni di trasformazione di documenti o per applicazioni che richiedano il parsing incrementale dei dati, 52

54 come i protocolli di comunicazione e scambio di messaggi. Infatti, nonostante DOM metta a disposizione alcuni metodi che permettono di modificare la struttura di un documento presente in memoria, esso non fornisce alcun supporto esplicito per effettuare il parsing di documenti o la serializzazione di nuovi documenti verso dispositivi di memorizzazione esterni (per tali esigenze è comunque possibile usare SAX, un altra API XML). Di contro, la capacità di DOM di permettere un accesso diretto e casuale ai documenti lo rende uno strumento eccellente per l editing di documenti, la ricerca di dati o la navigazione ed è proprio in questo ambito che verrà utilizzato. Una volta caricato il documento gli elementi vengono memorizzati in un albero, vedere figura 5.1, che può essere navigato in ampiezza od in profondità. Figura 5.1 Rappresentazione ad albero di un documento XML; sono visibili i link per percorrere la lista dei fratelli e dei figli. 53

55 Capitolo 6 ARCHITETTURA APPLICATIVA Introduzione Nella prima parte di questa tesi sono state descritte le innovazioni introdotte da.net nell ambito delle applicazioni web e la struttura di una applicazione web scalabile e robusta. Lo sviluppo delle applicazioni web in ambito enterprise è però attualmente dominato dalla tecnologia J2EE (Java 2 Enterprise Edition) di Sun, con cui.net si pone attualmente in concorrenza e da cui ha attinto più di una caratteristica. La Trim, l azienda presso cui è stata svolta questa tesi, ha ormai raggiunto una notevole esperienza nel progetto e nello sviluppo di applicazioni web in ambiente J2EE ed ha quindi grande interesse nella valutazione delle innovazioni susseguenti l introduzione della tecnologia.net. La metodologia di sviluppo di un applicazione web in ambiente J2EE è però notevolemente favorita dalla presenza di linee guida ben definite e descritte dalla stessa Sun che mirano all individuazione di alcune componenti che sfruttano in modo sensibile il supporto della piattaforma. Si è cercato quindi di porre queste caratteristiche a confronto con quanto evidenziato dall architettura proposta per una applicazione Web in ambiente.net, in cui vengono evidenziate le componenti fondamentali di un applicazione di questo tipo ma l interazione tra queste non è poi così ben delineata ed inoltre non sono presenti alcune delle agevolazioni offerte dalla piattaforma Sun. Proprio a seguito di questa constatazione nella seconda parte di questa tesi si è cercato quindi di individuare una linea guida per lo sviluppo di applicazioni web in ambiente.net andando a costruire una struttura da usare come base per lo sviluppo di questo tipo di applicazioni. 54

56 In particolare l attenzione è stata rivolta allo sviluppo di applicazioni web che potrebbero essere definite Data-Driven (orientate ai dati), in cui cioè lo scopo principale è la gestione dei dati, la gestione delle relazioni intercorrenti tra essi e la loro rappresentazione. Si è operato in modo da massimizzare il riuso di alcune componenti e su queste costruire il resto dell applicazione realizzandone le funzionalità specifiche. In questo modo si facilita lo sviluppo in modo considerevole anche tenendo conto dell agevolazione fornita da un ambiente comune su cui basare la progettazione dell applicazione, esigenza fondamentale quando ad occuparsi dello sviluppo è un team di persone con ruoli differenziati tra loro. Architettura Come si è visto in precedenza la struttura funzionale di un applicazione è organizzata secondo un modello a tre strati le cui componenti e le rispettive funzionalità per un applicazione fortemente orientata alla gestione di dati sono: Nel livello di accesso ai dati sono presenti le classi che rappresentano i dati su cui agisce l applicazione. Tipicamente viene codificata una classe per ogni entità, i metodi permettono di rendere persistenti i dati mediante la memorizzazione sul database o consentono di recuperare i dati che soddisfano alcune condizioni. La business logic è la componente che implementa le regole di business specifiche di ogni applicazione anche se spesso a questa componente sono affidate operazioni di validazione e di controllo per verificare che i dati soddisfino alcuni vincoli. Il livello presentazione realizza l elaborazione delle pagine web che costituiscono l interfaccia dell applicazione verso il client. Nonostante 55

57 una specificità notevole anche a questo livello è possibile identificare alcune componenti che sono strettamente legate alla struttura dei dati, quali le pagine che consentono di effettuare le operazioni base per ogni entità di dato cioè inserimento, modifica, cancellazione e ricerca. Nel tentativo di realizzare una struttura su cui basare lo sviluppo di un applicazione è quindi necessario essere a conoscenza della struttura dei dati da gestire, in quanto essa condiziona tutte le componenti dell applicazione. Osservando i compiti eseguiti dal livello di accesso ai dati ci si rende conto di come le operazioni base effettuate siano però essenzialmente sempre le stesse cioè acquisizione, modifica o cancellazione dei dati, ciò che varia nell implementazione di queste operazioni tra le varie classi è semplicemente l entità su cui vengono effettuate. Con un approccio classico, come si è illustrato nel capitolo IV, ogni entità porta solitamente alla codifica di una classe, in essa si implementano i metodi per l inserimento, la cancellazione e la modifica dei record nonché alcuni metodi in grado di restituire record di tale entità che soddisfano determinate condizioni. L esperienza effettuata da TRIM in questi anni di lavoro ha portato alla considerazione che gran parte del tempo necessario per lo sviluppo di un applicazione è solitamente dedicato ad operazioni che poco hanno a che vedere con la costruzione della logica applicativa che è la parte che effettivamente caratterizzante di ogni applicazione. L obiettivo che si vuole raggiungere è quello di trovare un approccio alternativo alla realizzazione di applicazioni fortemente orientate alla gestione dei dati, che permetta di svincolarsi dallo sviluppo esplicito del data access layer e dalla costruzione delle interfacce grafiche qualora queste siano strettamente legate alla struttura dei dati sottostanti. Si sono realizzate due componenti, evidenziate in figura 6.1, la prima, essenzialmente una libreria di web control, realizza le interfacce grafiche per 56

58 permettere l acquisizione, la modifica, la cancellazione e la ricerca dei dati. La seconda, un data access layer, consente di effettuare operazioni sui dati. Queste componenti devono però conoscere l architettura dei dati su cui andranno ad agire, è necessario quindi fornirne una dichiarazione. La struttura dei dati, delle regole di validazione dei campi e dei criteri di ricerca viene quindi descritta mediante un documento Xml, esso è acquisito dall applicazione in fase di avvio grazie alle funzionalità offerte dal DOM. A seguito di tale acquisizione viene quindi creato un modello di oggetti con lo scopo di rappresentare esplicitamente le relazioni tra i dati, la loro composizione, i vincoli di validazione ed i criteri di ricerca. Questa rappresentazione della struttura dati è utilizzata dai web control per adattarsi alla struttura dell entità a cui sono associati. È possibile considerare i web control generati come componenti utilizzabili all interno delle pagine aspx al pari dei normali controlli web forniti dal framework ASP.NET. A tali componenti è delegato anche il compito di eseguire la validazione dei dati permettendo così di sgravare la business logic da questo compito. Quindi nel caso in cui, come può capitare ad esempio per applicazioni puramente gestionali, non si renda necessario implementare particolari regole di business, è possibile richiamare direttamente da questi controlli i metodi del livello di accesso ai dati per rendere persistenti le modifiche effettuate. Se invece devono essere realizzate particolari operazioni a seguito di una modifica, di un inserimento, o di una cancellazione è possibile utilizzare comunque i controlli web per la generazione dell interfaccia grafica e la raccolta dei dati, che però non saranno passati al data layer ma ad opportuni oggetti business che ne implementeranno le regole di business ed eventualmente potranno chiamare un metodo del data layer per rendere persistenti le operazioni effettuate. 57

59 Gli oggetti business possono inoltre usufruire dei metodi di ricerca, anche complessi, definiti in fase di scrittura del file xml per ottenere insiemi di dati che soddisfino alcune caratteristiche richieste. Figura 6.1 Architettura del framework. Con questo framework si vuole quindi di fatto, con un approccio di tipo descrittivo, ridurre drasticamente i tempi di sviluppo per operazioni che non siano di business logic, quando la specificità delle operazioni da effettuare ai livelli di presentazione e di accesso ai dati non sia troppo elevata. Utilizzando i servizi offerti non è più necessaria quindi la codifica esplicita di classi a livello data layer, è sufficiente definire preventivamente i criteri di ricerca da effettuare sui dati, per poterli eseguire passando un opportuno parametro generato dal framework (un finder, che sarà illustrato nel seguito). Inoltre non è più necessario realizzare a mano le interfacce grafiche necessarie per le le 58

60 operazioni di inserimento, cancellazione, modifica e ricerca (qualora tale ricerca coinvolga una sola entità) di ogni tabella. 59

61 Capitolo 7 IMPLEMENTAZIONE Lo schema XML Per quanto detto in precedenza è evidente notare come sia necessario individuare uno schema in modo da poter descrivere la struttura dati caratterizzante l applicazione. Questa descrizione viene realizzata tramite un file XML, in particolare nel file si descrive la struttura delle tabelle nel database sottostante, delle regole di validazione per i campi delle tabelle e dei criteri di ricerca da effettuare sui dati. L utilizzo di uno schema Xml permette infatti di definire la struttura che deve avere il documento per essere valido, in questo modo si ha la garanzia che questo sia corretto almeno sintatticamente. Questo non dà però la garanzia che il documento anche se strutturalmente corretto descriva in maniera appropriata il modello che si intende implementare, per questo è necessario comprendere il significato dei tag ed il ruolo che essi giocano. Come è possibile notare dalla struttura dello schema Xml (vedere appendice A) rappresentato in figura 7.1, le informazioni codificate nel file xml permettono di definire: La struttura della base dati. I criteri di validazione. I criteri di ricerca. Il tag <table> descrive una tabella o una vista definite sul database, gli attributi definibili per esso sono: name, deve corrispondere al nome della tabella o della vista. 60

62 text, un campo descrittivo per la tabella, è usato nelle intestazioni per i controlli grafici. Questo tag può contenere due collezioni di dati, il tag <columns> in cui sono definiti i campi della tabella ed i <finders>, spiegati opportunamente nel seguito. Gli elementi che possono essere definiti all interno del tag <columns> possono essere di tipo <pk>, <fk>, <field>. Il tag <pk> descrive il campo primary key della tabella, gli attributi definibili per questo tag sono: name, deve corrispondere al nome del campo primary Key della tabella sul database. text, è semplicemente un campo descrittivo. Non sono necessari altri attributi per definire il tipo della tabella in quanto si impone che la chiave di ogni tabella sia costituita da un singolo campo intero, gestito in maniera automatica dal database server. 61

63 Figura 7.1 La struttura dello schema 62

64 Il tag <field> identifica un campo informativo dati all interno della tabella, è caratterizzato dai seguenti attributi: name, deve corrispondere al nome della colonna della tabella presente su DB. text, è il campo descrittivo che appare come etichetta nei controlli grafici generati. type, identifica il tipo di dati rappresentati in questa colonna. searchable, è un campo booleano che indica se si vuole che tale campo venga utilizzato per effettuare la ricerca nel form di ricerca generico. Tag di questo tipo possono contenere elementi di tipo <validator> illustrati nel seguito. Il tag <fk> identifica una foreign key di un altra tabella partecipante ad una relazione con la tabella che si sta descrivendo, è caratterizzato dai seguenti attributi: name, deve corrispondere al nome della primary key della tabella in relazione con quella corrente. text, rappresenta l etichetta di questo campo nei web control generati. table, deve corrispondere al nome della tabella con cui la tabella che si sta descrivendo è in relazione. chooseon, deve corrispondere della colonna descrittiva sulla tabella con cui si intende stabilire la relazione, si considera infatti poco significativo poter selezionare la relazione sulla base della primary key 63

65 di questa tabella. E necessario però che il valore in questo campo sia univoco pur non essendo una primary Key. mode, è un campo stringa i cui valori ammessi possono essere list oppure search. Nel primo caso nel controllo web generato in fase di inserimento o modifica è possibile scegliere tra tutti i record presenti sulla tabella che è in relazione con quella in esame. Nel caso questo attributo sia settato a search viene invece data la possibilità di restringere il numero di record restituiti effettuando una ricerca selettiva sul campo indicato dall attributo choosecol. type, identifica in tipo della colonna definita nell attributo choosecol. finder, indica il finder della tabella in relazione con quella corrente necessario per il funzionamento del web control, deve restituire la colonna indicata nel campo choosecol e la primary key. searchable, come nel tag field è un attributo booleano ed indica la possibilità offerta nel web control di ricerca di inserire questo campo tra i criteri di ricerca. needed, è un attributo booleano, deve essere impostato a true se la partecipazione alla relazione non è opzionale a false altrimenti. Il tag <validators> deve invece essere presente qualora si reputi necessario validare un campo dati, definito dal tag <field>. I tag che identificano il tipo validatore da inserire nei form di inserimento e modifica sono di tre tipi: <regexpval>, <requiredval> e <rangeval>. Il tag <regexpval> identifica un tipo di validatore utile qualora il campo da validare debba rispettare un particolare pattern, un esempio tipico è quello di un campo . 64

66 Il tag <regexpval> è caratterizzato dai seguenti attributi: regexp, deve essere impostato alla stringa che rappresenta il pattern da verificare. msg, è il messaggio di errore visualizzato in un sommario degli errori qualora il valore inserito non rispetti il pattern definito. text, è il testo che viene mostrato accanto al campo che non soddisfa i criteri definiti dal pattern. Si consiglia di impostare questo campo con il carattere *. Il tag <requiredval> è utilizzato per i campi che non possono essere lasciati vuoti, in particolare quindi per i campi che non possano essere definiti come null sul database. Questo tag è caratterizzato dai seguenti attributi: msg, è il messaggio di errore visualizzato in un sommario degli errori qualora non venga inserito alcun valore. text, è il testo che viene mostrato accanto al campo mancante. Si consiglia di impostare questo campo con il carattere *. Il tag <rangeval> permette di definire degli intervalli in cui deve essere compreso un particolare valore inserito. Può essere usato con qualsiasi tipo di dato. Questo tag è caratterizzato dai seguenti attributi: type, definisce il tipo dei dati da validare. max, rappresenta il limite massimo del range in cui deve essere compreso il valore del dato, nel caso venga lasciato vuoto viene settato di default al massimo valore rappresentabile con il tipo di dato considerato. 65

67 min, rappresenta il limite massimo del range in cui deve essere compreso il valore del dato, nel caso venga lasciato vuoto viene settato di default al minimo valore rappresentabile con il tipo di dato considerato. msg, è il messaggio di errore visualizzato in un sommario degli errori qualora il valore inserito non sia compreso nel range. text, è il testo che viene mostrato accanto al campo che non risulta compreso nel range definito. Il tag <finder> permette di definire un criterio di ricerca sulla base dati. Un elemento di questo tipo deve essere coerentemente legato alle entità che intende restituire. Si considerino ad esempio tre tabelle, una per i clienti, l altra per i prodotti e l ultima per le tipologie di prodotti; si intende effettuare una ricerca dei clienti che hanno ordinato un determinato tipo di prodotti. La query coinvolgerà oltre alla tabella dei clienti, anche le altre due, ma poiche si è interessati ai clienti questo finder sarà definito all interno di tale tabella. Il tag <finder> è caratterizzato dai seguenti attributi: name, è una stringa che deve identificare univocamente il finder per ogni tabella, permetterà in ambiente di programmazione di riferirsi ad un oggetto finder. view, deve riportare l insieme dei campi che si vuole che il finder restituisca separati da virgole, è anche possibile utilizzare lo specificatore * ma questa pratica è sconsigliata. tables, deve riportare il nome delle tabelle su cui la query agisce, se sono più di una devono essere separate da virgole. 66

68 query, deve riportare le condizioni cui deve soddisfare la query con eventuali parametri, le condizioni di join devono essere dichiarate esplicitamente. Alcuni finder devono essere dichiarati al fine di consentire un corretto funzionamento del framework.. Già nella descrizione del tag <fk> infatti è emerso come sia necessario fare riferimento ad un finder per ottenere i valori del campo indicato dall attributo choosecol. Finder di questo tipo devono restituire il campo indicato dall attributo choosecol seguito dal campo chiave della tabella e, per convenzione si consiglia di comporre il nome come segue: findfor[nome tabella]relation. Inoltre è necessario che per ogni tabella venga definito in finder di nome findall in cui devono essere presenti dei valori validi diversi da * nel campo view. Qualora un finder presenti un parametro nella query, questo deve essere presente nella lista degli elementi <parameters> del tag esaminato. Il tag <parameters> consente di stabilire esplicitamente una corrispondenza tra un parametro e la tabella e la colonna cui fa riferimento grazie agli attributi: name, deve indicare il nome di un parametro presente nella query. Il formato tipico di questi parametri impiegati deve essere indicato come progressivo]. table, deve riportare il nome della tabella cui appartiene la colonna in relazione con il parametro. Nel caso il parametro sia riferito ad una colonna della tabella cui il finder appartiene, è possibile indicare il nome della tabella oppure il termine this. columnname, campo stringa che deve riportare il nome della colonna con cui il parametro è in relazione. 67

69 E necessario specificare come laddove tra gli attributi dei tag sia stato definito un attributo type si possano indicare i quattro tipi fondamentali: data, double, integer, string. Questi sono i tipi di gestiti dall applicazione, non si considera una limitazione eccessiva essersi ristretti solo a questi tipi fondamentali in quanto consentono comunque di esprimere opportunamente la realtà in esame anche se è possibile che questo porti incompatibilità qualora si cerchi di applicare il framework ad un database già esistente. La struttura dati La definizione della struttura dati presente nel file Xml viene acquisita mediante le funzionalità offerte dal DOM nelle fasi di avvio dell applicazione. Essa consente di costruire un modello ad oggetti in grado di rappresentare le relazioni intercorrenti tra le entità costituenti la struttura dati presente sul database così come questa è stata definita nel file. In particolare si ha una corrispondenza biunivoca con i tag definiti nel file Xml, ma questa rappresentazione è molto più potente in quanto consente di mettere in relazione esplicitamente i vari oggetti in modo da rendere più agevole la navigazione del modello; nel file xml le relazioni sono definite attraverso particolari attributi dei tag o attraverso la posizione di un tag all interno del documento. Gli oggetti alla base di questo modello sono gli oggetti tabella che rappresentano le entità su cui agisce l applicazione, da questi, come è possibile notare dallo schema in figura 7.2 è possibile raggiungere gli altri oggetti che caratterizzano la composizione informativa di ogni entità; in particolare gli oggetti colonna ed i vincoli su questi rappresentati dagli oggetti validator. Gli oggetti di tipo relation consentono di mettere in relazione tra loro le tabelle mantenendo inoltre la corrispondenza con l oggetto colonna su cui l utente finale va ad effettuare la selezione per stabilire la corrispondenza. L oggetto finder, così come era stato illustrato 68

70 nella descizione dei tag Xml permette di esprimere i criteri di ricerca su una particolare entità. Figura 7.2 Schema Classi Relazioni Il modello è alla base delle funzionalità offerte dal framework è infatti grazie alle informazioni raccolte in questo che la libreria dei controlli grafici crea le interfacce grafiche per ogni tabella ed il data access layer consente di realizzare le operazioni sui dati. E però necessario che l intera applicazione abbia la visibilità di questi oggetti, nel caso quindi di una semplice applicazione ASP.NET è possibile definirli come oggetti globali dichiarando la collezione di oggetti tabella come membro della classe Global nel file Global.asax.cs. 69

71 Il generatore di controlli web Questo modulo, che opera a livello presentazione, si occupa della generazione delle interfacce utente per le operazioni da effettuare sulla base dati. In particolare consente la creazione di controlli web personalizzati che implementano le funzionalità realizzabili su una base dati. I controlli web che vengono creati sono di tipo composito, sono cioè contenitori di altri controlli. La classe Control possiede infatti una proprietà Controls di tipo ControlCollection che può contenere controlli figlio. Quando si effettua il rendering di un controllo lo si effettua anche di tutti i suoi controlli figlio in maniera ricorsiva, permettendo così di effettuare il rendering dell intero controllo. Per la realizzazione di questo tipo di controlli è necessario implementare il metodo CreateChildControls() del controllo contenitore a cui si agganciano opportunamente i controlli figlio. I controlli di questo tipo possono essere utilizzati all interno di una qualsiasi pagina aspx esattamente come qualunque altro controllo web di base fornito dal framework ASP.NET. Per inserire un controllo personalizzato nella pagina è necessario inserire un controllo web di tipo Panel o di tipo PlaceHolder, che fungerà da contenitore per questi controlli. I controlli di tipo Panel, posizionati all interno della pagina aspx, consentono di costruirne le parti restanti mediante il supporto RAD offerto dall ambiente di sviluppo. I controlli di tipo PlaceHolder invece non possono essere disposti in un punto particolare della pagina, essi rendono quindi difficile l integrazione di altri elementi; se ne consiglia l uso quando il controllo che si intende creare sia l unico presente nella pagina. È evidente come alla pagina sia demandato il compito del passaggio dei parametri opportuni necessari per la creazione del controllo. Per inserire un controllo sarà quindi possibile, dopo averlo creato, aggiungerlo alla collezione Controls di uno dei due tipi di controlli individuati 70

72 precedentemente. Nel capitolo successivo questo procedimento sarà mostrato in dettaglio. I controlli che è possibile creare sono di tre tipi: Di inserimento. Di modifica/cancellazione. Di ricerca. I controlli generati consentono di realizzare direttamente le operazioni su database qualora queste non necessitino di una particolare logica di gestione, questo capita di frequente considerando che con un opportuno utilizzo dei validatori si ha la garanzia che i dati inseriti siano validi. Si elencano le modalità di creazione dei controlli web specificando che tipo di controllo viene restituito dal costruttore. Per generare un form di inserimento relativo ad un opportuna tabella che realizzi direttamente tale operazione su DB è possibile richiamare i seguenti costruttori: InsModControl( oggetto tabella ); InsModControl( oggetto tabella,true); in questo caso il parametreo booleano indica esplicitamente la scelta di fare eseguire direttamente al controllo le operazioni di inserimento. Per realizzare invece un controllo di inserimento che si limiti alla sola presentazione dell interfaccia grafica ed alla raccolta dei parametri da inserire, senza effettuare effettivamente l inserimento nel database. I parametri così raccolti possono essere passati ad un opportuno oggetto business che ne 71

73 implementa le opportune regole di business. In questo caso si utilizza il seguente costruttore : InsModControl( oggetto tabella,false); Per generare un form con funzionalità di modifica e cancellazione che realizzi effettivamente tali operazioni sul database è necessario chiamare uno tra i seguenti costruttori: InsModControl( oggetto tabella, stringid) InsModControl( oggetto tabella, stringid,true) Il parametro stringid è per entrambi la rappresentazione in forma di stringa del campo chiave del record da modificare o cancellare, tipicamente viene recuperato direttamente dalla querystring della pagina. Anche in questo caso, se non si vuole che il controllo esegua direttamente l aggiornamento del DB è possibile creare l oggetto tramite il costruttore: InsModControl( oggetto tabella, stringid,false). E inoltre possibile usufruire di un controllo di ricerca generica che consente di effettuare delle ricerche sui campi in cui nella definizione xml era stato definito come true l attributo searchable, questo dà inoltre la possibilità di effettuare delle ricerche in base ai valori di opportuni campi di altre tabelle relazionate con quella in esame. E possibile ottenere questo controllo mediante il costruttore: SearchControl( oggetto tabella ). Si è cercato di realizzare questi controlli non considerando l aspetto grafico degli stessi che può però essere opportunamente gestito dall utilizzatore finale andando ad assegnare alle varie componenti di un controllo le classi di stile 72

74 definiti in un file CSS, questo può essere realizzato assegnando le classi del foglio di stile ad opportune proprietà del controllo. Sempre al fine di rendere flessibile la realizzazione dell applicazione web che sfrutti questa infrastruttura è possibile definire le pagine cui è necessario essere rediretti dopo che un controllo realizzi un postback. L accesso ai dati Questo componente permette di offrire servizi di accesso ai dati sia ai controlli web precedentemente descritti che alle componenti di business logic che necessitino di farvi accesso. Un ruolo fondamentale in questo componente viene svolto da una classe di supporto che si occupa di trasportare i valori da inserire nel database mettendoli in relazione con le colonne cui fanno riferimento nella tabella considerata. In particolare il codice della classe è il seguente: public class Parametro { public Parametro(string colonna,object valore) { this.col = colonna; this.val = valore; } public string Col { get{return col;} set{col = value;} } public object Val { get {return val;} set {val = value;} } string col; object val; } 73

75 Nonostante la semplicità apparente questa classe, che tra l altro è la stessa utilizzata per il trasporto dei dati da parte dei controlli web, è estremamente potente permettendo di associare ad una colonna, identificata dalla proprietà Col, un oggetto di tipo Object. L oggetto Object è l oggetto da cui derivano tutti i gli oggetti nella gerarchia delle classi di.net, è quindi possibile intenderlo come un oggetto generico. Con una tecnica di boxing è possibile fare corrispondere a questo oggetto un oggetto di qualsiasi tipo. La corrispondenza garantita da questa applicazione vede però solo i quattro tipi di dati accennati in precedenza. Una collezione di questi oggetti, un oggetto per ogni campo informativo della tabella che si sta considerando, viene passata ogni volta che si intende realizzare un operazione di inserimento, update o cancellazione. In particolare i protitipi per queste operazioni sono: public int Insert(string table, ArrayList Pars) public int Update(string table, ArrayList Pars, Parametro ParID ) public int Delete(string table, Parametro ParId) Nel caso delle operazioni di Update e Delete deve inoltre essere passato l oggetto parametro relativo alla chiave primaria, tale oggetto deve quindi essere composto da un oggetto parametro che ha come campo Col il nome della colonna che identifica la chiave primaria e nel campo Val il relativo valore del record su cui effettuare l operazione. La funzionalità probabilmente più importante di questo componente è quella di permettere di ottenere un insieme di dati che rispondano alle condizioni espresse in un finder definito in sede di scrittura del file Xml. In questo modo è sufficiente definire precedentemente i criteri di ricerca che si ritiene questo modulo debba offrire per vederli realizzati senza scrivere altro codice che agisca a questo livello. 74

76 Queste funzionalità vengono offerte in modo da restituire i dati in due tipi differenti di oggetto, un DataReader ed un DataSet. Il primo è l ideale quando lo scopo della ricerca sia essenzialmente di quello ottenere un elenco di dati da esaminare o da visualizzare, se invece si vuole ottenere questi dati per possibili successive elaborazioni è più indicato l oggetto DataSet. I metodi che restituiscono i datareader sono i seguenti: public SqlDataReader CallReadFinder(Finder finder) public SqlDataReader CallReadFinder(Finder finder,arraylist Pars) Il primo di questi metodi permette di ottenere un insieme di dati definendo il finder che ne identifica i criteri qualora questo non richieda alcun parametro, nel secondo caso è invece contemplato il caso questo richieda uno o più parametri, anche in questo caso l oggetto utilizzato per il trasporto sarà di tipo Parametro. In maniera analoga i metodi che restituiscono un oggetto DataSet sono invece: public DataSet CallFinder(Finder finder) public DataSet CallFinder(Finder finder,arraylist Pars) Sono inoltre forniti anche due metodi che permettono di eseguire una generica query passata come parametro, questa può essere utile ad esempio quando si presenti la necessità di comporre la query dinamicamente, magari mediante un form di ricerca generico. public DataSet DSExecuteQuery(string Query) public SqlDataReader ExecuteQuery(string Query) 75

77 Capitolo 8 CASE STUDY In questo capitolo si vuole applicare l architettura descritta precedentemente ad un semplice caso pratico per mostrarne la filosofia di utilizzo ed alcuni aspetti implementativi. L esempio considerato non ha quindi la pretesa di analizzare un problema complesso, quanto piuttosto di fornire una breve analisi degli aspetti pratici di questa piattaforma permettendo però di valutare i vantaggi offerti dall approccio proposto. L applicazione intende realizzare una gestione delle fatture ponendole in relazione con i clienti a cui corrispondono, è inoltre possibile classificare i clienti in opportune categorie al fine per esempio di elaborare alcune statistiche sulla spesa di una particolare categoria di clienti. Si consideri che un cliente possa appartenere ad una sola categoria e possano esistere clienti non legati ad alcuna categoria. La base dati Il modello Entità relazioni, da cui è anche possibile osservare i campi informativi di ogni entità, è mostrato in figura

78 Figura 8.1 Semplice diagramma ER del caso di studio La traduzione di questo modello in tabelle del database relazionale SqlServer, considerando i vincoli imposti dall architettura, porta alla creazione delle tabelle mostrate in figura 8.2. Figura 8.2 Tabelle create sul database server. E quindi ora necessario evidenziare le scelte che condizioneranno la scrittura del file Xml. 77

79 1. Definire i campi in base ai quali l utente finale definirà una relazione. In particolare in fase di inserimento o modifica sulla tabella dei clienti deve essere data la possibilità di identificare la possibile categoria cui il cliente può, opzionalmente, appartenere. Il campo della tabella TipologieClienti cui l utente finale farà riferimento sarà il campo Tipologia. Nel caso invece di operazioni sulle fatture è evidente come non possa esistere una fattura non associata ad un cliente, in questo caso la corrispondenza sarà definita dal campo RagioneSociale. 2. Definire i criteri di validazione per i campi informativi. In particolare, per la tabella TipologieClienti: Il campo Tipologia non può essere vuoto. Sul campo descrizione non vi è alcuna condizione. Per la tabella Clienti: Il campo Cliente non può essere vuoto. Sul campo Indirizzo non viene posta alcuna condizione. Il campo può essere nullo, ma se presente deve rappresentare effettivamente un valore valido per un indirizzo di posta elettronica. Per la tabella Fattura: Il campo Numero deve essere presente, è di tipo intero e non può essere negativo. Il campo Importo deve essere presente, è di tipo decimale e non può essere negativo. 78

80 Il campo Data deve essere presente, deve effettivamente rappresentare una data dell anno in corso. 3. Definire i criteri di ricerca, in primo luogo di quelli necessari per il funzionamento dei web control, in particolare quelli definiti dai nomi findall e findbypk; infine i criteri che serviranno all applicazione per implementare particolari funzionalità. In questo esempio si intende ottenere un elenco delle fatture di clienti appartenenti ad una certa categoria su cui effettuare una serie di statistiche; il finder sarà quindi relativo alla tabella Fatture. A seguito di queste condizioni è quindi possibile codificare il documento Xml. Xml <?xml version="1.0" encoding="utf-8"?> <tables xmlns="http://tempuri.org/xmlfile.xsd"> <table name="tipologieclienti" text="tipologie Clienti"> <columns> <pk name="tipologiaid" text="pk Tipologia Cliente"> </pk> <field name="tipologia" text="tipologia" type="string" searchable="true"> <validators> <requiredval msg="campo Tipologia Richiesto" text="*"> </requiredval> </validators> </field> <field name="descrizione" text="descrizione Tipologia" type="string" searchable="true"> </field> </columns> <finders> <finder name="findall" tables="tipologieclienti" view="tipologia, TipologiaID" query=""> </finder> <finder name="findforclientirelation" tables="tipologieclienti" view="tipologia, TipologiaID" query=""> </finder> <finder name="findbypk" tables="tipologieclienti" view="*" <parameters> 79

81 <parameter table="this" columnname="tipologiaid"> </parameter> </parameters> </finder> </finders> </table> <table name="clienti" text="gestione Dati Cliente"> <columns> <pk name="clienteid" text="pk Cliente"> </pk> <fk name="tipologiaid" table="tipologieclienti" chooseon="tipologia" needed="false" mode="list" finder="findforclientirelation" searchable="true" text="fk su tabella clienti" type="string"> </fk> <field name="rag_sociale" text="ragione Sociale" type="string" searchable="true"> <validators> <requiredval msg="il campo Ragione Sociale deve essere presente" text="*"> </requiredval> </validators> </field> <field name="ind_sede" text="indirizzo Sede" type="string" searchable="true"> </field> <field name=" " text=" Cliente" type="string" searchable="true"> <validators> <regexpval msg="il valore inserito non può essere un " text="*" </regexpval> </validators> </field> </columns> <finders> <finder name="findall" tables="clienti" view="rag_sociale, Ind_Sede, , ClienteID" query=""> </finder> <finder name="findforfatturerel" tables="clienti" view="rag_sociale, ClienteID" query=""> </finder> <finder name="findbypk" tables="clienti" view="*" <parameters> <parameter table="this" columnname="clienteid"> </parameter> </parameters> </finder> </finders> </table> <table name="fatture" text="gestione Dati Fatture"> <columns> 80

82 <field name="nfattura" text="numero Fattura" type="integer" searchable="true"> <validators> <requiredval msg="campo Numero Fattura Richiesto" text="*"> </requiredval> <rangeval msg="campo Numero Fattura Intero" text="*" valuetype="integer" min="1" max=""> </rangeval> </validators> </field> <field name="importo" text="importo Fattura" type="double" searchable="false"> <validators> <rangeval msg="l'importo deve essere maggiore di zero" text="*" valuetype="double" min="0" max="100000"> </rangeval> <requiredval msg="l'importo deve essere presente" text="*"> </requiredval> </validators> </field> <field name="data" text="data Fattura" type="date" searchable="false"> <validators> <rangeval msg="il formato non è corretto per la data o è fuori dal range" text="*" valuetype="date" min="1/1/2002" max="31/12/2002"> </rangeval> <requiredval msg="campo Data Richiesto" text="*"> </requiredval> </validators> </field> <pk name="fatturaid" text="pk Fattura"> </pk> <fk name="clienteid" table="clienti" chooseon="rag_sociale" finder="findforfatturerel" mode="search" searchable="true" needed="true" text="fk su tabella clienti" type="string"> </fk> </columns> <finders> <finder name="findall" tables="fatture" view="fatturaid, NFattura, Importo" query=""> </finder> <finder name="findbypk" tables="fatture" view="*" <parameters> <parameter table="this" columnname="fatturaid"> </parameter> </parameters> </finder> <finder name="findbytipologiacliente" tables="fatture, Clienti, TipologieClienti" view="fatturaid, Importo, Data" query="fatture.clienteid=clienti.clienteid AND 81

83 Clienti.TipologiaID=TipologieClienti.TipologiaID AND <parameters> <parameter table="tipologieclienti" columnname="tipologiaid"> </parameter> </parameters> </finder> </finders> </table> </tables> Utilizzo dei controlli generati Dopo la definizione del documento Xml si è in grado di utilizzare le funzionalità offerte dalla piattaforma, nel seguito si mostra come è possibile per una pagina ASP.NET richiamare un web control per effettuare l inserimento in una tabella. In figura 8.4 è mostrata la pagina aspx utilizzata per l inserimento. Figura 8.3 Pagina apx di inserimento public class inserimento: System.Web.UI.Page { protected System.Web.UI.WebControls.PlaceHolder Pannello; private void Page_Load(object sender, System.EventArgs e) { tablens.table tab; ArrayList OutPars = new ArrayList(); 82

84 //Ottengo l'oggetto Tabella dal nome, passato in querystring if((tab=tablens.tablesutil.findbyname(global.tables,reques t.params["table"]))!=null) { ControlLib.InsControllo = new InsModControl(tab,true); Pannello.Controls.Add(InsControllo); } else Response.Write("Passaggio parametri non corretto!"); } //... } Questo frammento di codice riporta parte della classe presente nel codebehind file di una pagina di inserimento generica in grado di funzionare per tutte le tabelle su cui è basata l applicazione. Infatti la tabella su cui effettuare l inserimento viene passata come parametro attraverso la querystring. Grazie a questo parametro una funzione di utilità permette di ricavare l oggetto tabella necessario alla creazione del webcontrol opportuno. Naturalmente il raggiungimento di questa pagina avverrà mediante un link da un altra pagina dell applicazione garantendo quindi la correttezza dei parametri passati nella querystring. Nell esempio il Web Control inserisce direttamente i dati nel database. In figura 8.4 è possibile osservare come appare il controllo di inserimento, senza la definizione di alcuno stile, generato per la tabella Clienti. 83

85 Figura 8.4 Form di inserimento per la tabella Clienti Utilizzo del data layer Infine si intende mostrare come un oggetto di business possa accedere all insieme di dati definito dal finder findbytipologiacliente. Si consideri che una pagina aspx abbia permesso ad un utente di selezionare la tipologia, tra quelle presenti in tabella ed abbia opportunamente caricato in una lista di oggetti Parametro il valore della chiave primaria di tale tipologia. A queste conzioni è sufficiente richiamare l oggetto business passando l oggetto tabella e la lista dei paramentri del finder stesso come parametri. Così l oggetto business potrà ottenere l oggetto finder opportuno come mostrato nell esempio seguente. namespace BusinessObjects { public class Statistics 84

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web Tecnologie di Sviluppo per il Web Programmazione Web: Architetture versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca mecca@unibas.it

Dettagli

Architetture Web. parte 1. Programmazione in Ambienti Distribuiti A.A. 2003-04

Architetture Web. parte 1. Programmazione in Ambienti Distribuiti A.A. 2003-04 Architetture Web parte 1 Programmazione in Ambienti Distribuiti A.A. 2003-04 Architetture Web (1) Modello a tre livelli in cui le interazioni tra livello presentazione e livello applicazione sono mediate

Dettagli

APPENDICE B Le Active Server Page

APPENDICE B Le Active Server Page APPENDICE B Le Active Server Page B.1 Introduzione ad ASP La programmazione web è nata con la Common Gateway Interface. L interfaccia CGI tuttavia presenta dei limiti: ad esempio anche per semplici elaborazioni

Dettagli

Flavio De Paoli depaoli@disco.unimib.it

Flavio De Paoli depaoli@disco.unimib.it Flavio De Paoli depaoli@disco.unimib.it 1 Il web come architettura di riferimento Architettura di una applicazione web Tecnologie lato server: Script (PHP, Pyton, Perl), Servlet/JSP, ASP Tecnologie lato

Dettagli

BizTalk server fa parte dell offerta di Microsoft per la grande azienda.

BizTalk server fa parte dell offerta di Microsoft per la grande azienda. Web Service Dopo le applicazioni desktop e quelle per Internet, i servizi Web sono la terza componente essenziale delle applicazioni.net. I Web Service sono una nuova tecnologia che permette la realizzazione

Dettagli

APPENDICE A Servlet e Java Server Page

APPENDICE A Servlet e Java Server Page APPENDICE A Servlet e Java Server Page A.1 Cosa è una Servlet e come funziona Una servlet è un particolare tipo di applicazione Java, in grado di essere eseguita all'interno di un web server e di estenderne

Dettagli

Novità di Visual Studio 2008

Novità di Visual Studio 2008 Guida al prodotto Novità di Visual Studio 2008 Introduzione al sistema di sviluppo di Visual Studio Visual Studio Team System 2008 Visual Studio Team System 2008 Team Foundation Server Visual Studio Team

Dettagli

Siti interattivi e dinamici. in poche pagine

Siti interattivi e dinamici. in poche pagine Siti interattivi e dinamici in poche pagine 1 Siti Web interattivi Pagine Web codificate esclusivamente per mezzo dell HTML non permettono alcun tipo di interazione con l utente, se non quella rappresentata

Dettagli

Tipi fondamentali di documenti web

Tipi fondamentali di documenti web Tipi fondamentali di documenti web Statici. File associati al web server il cui contenuto non cambia. Tutte le richieste di accesso conducano alla visualizzazione della stessa informazione. Dinamici. Non

Dettagli

Concetti base. Impianti Informatici. Web application

Concetti base. Impianti Informatici. Web application Concetti base Web application La diffusione del World Wide Web 2 Supporto ai ricercatori Organizzazione documentazione Condivisione informazioni Scambio di informazioni di qualsiasi natura Chat Forum Intranet

Dettagli

Il.NET Framework. By Dario Maggiari. L architettura del.net Framework è riassunta, nel complesso, nella figura seguente:

Il.NET Framework. By Dario Maggiari. L architettura del.net Framework è riassunta, nel complesso, nella figura seguente: Il.NET Framework By Dario Maggiari L architettura del.net Framework è riassunta, nel complesso, nella figura seguente: Il cuore del.net Framework è costituito dal CLR (Common Language Runtime) che, secondo

Dettagli

Protocolli e architetture per WIS

Protocolli e architetture per WIS Protocolli e architetture per WIS Web Information Systems (WIS) Un Web Information System (WIS) usa le tecnologie Web per permettere la fruizione di informazioni e servizi Le architetture moderne dei WIS

Dettagli

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER L architettura CLIENT SERVER è l architettura standard dei sistemi di rete, dove i computer detti SERVER forniscono servizi, e computer detti CLIENT, richiedono

Dettagli

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari Gubiani & Montanari Il DBMS Oracle 1 Il DBMS Oracle Express Edition Donatella Gubiani e Angelo Montanari Il DBMS Oracle Il DBMS Oracle Oracle 10g Express Edition Il DBMS Oracle (nelle sue versioni più

Dettagli

Architetture per le applicazioni web-based. Mario Cannataro

Architetture per le applicazioni web-based. Mario Cannataro Architetture per le applicazioni web-based Mario Cannataro 1 Sommario Internet e le applicazioni web-based Caratteristiche delle applicazioni web-based Soluzioni per l architettura three-tier Livello utente

Dettagli

Introduzione al linguaggio Java: Servlet e JSP

Introduzione al linguaggio Java: Servlet e JSP Introduzione al linguaggio Java: Servlet e JSP Corso di Gestione della Conoscenza d Impresa A. A. 2006/2007 Dipartimento di Informatica Università degli Studi di Bari 1 Servlet e JSP: il contesto Un applicazione

Dettagli

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 4/5. ADO.NET e Connessione Prof. Mauro Giacomini

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 4/5. ADO.NET e Connessione Prof. Mauro Giacomini SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA 4/5. ADO.NET e Connessione Prof. Mauro Giacomini Sommario Archiettura del framework.net Architettura di ADO.NET Connessione a un DB Gestione della

Dettagli

Framework di Middleware. per Architetture Enterprise

Framework di Middleware. per Architetture Enterprise Framework di Middleware per Architetture Enterprise Corso di Ingegneria del Software A.A.2011-2012 Un po di storia 1998: Sun Microsystem comprende l importanza del World Wide Web come possibile interfaccia

Dettagli

INTRODUZIONE AD ASP.NET

INTRODUZIONE AD ASP.NET Indice Introduzione XI PARTE PRIMA INTRODUZIONE AD ASP.NET 1 Capitolo 1 Framework.NET 3 1.1 Il framework di programmazione.net 3 1.2 VB.NET, C# e i linguaggi.net 4 1.3 Common Language Runtime 9 1.4 La

Dettagli

Novell ZENworks Configuration Management in ambiente Microsoft * Windows *

Novell ZENworks Configuration Management in ambiente Microsoft * Windows * Guida GESTIONE SISTEMI www.novell.com Novell ZENworks Configuration Management in ambiente Microsoft * Windows * Novell ZENworks Configuration Management in ambiente Microsoft Windows Indice: 2..... Benvenuti

Dettagli

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Giampiero Allamprese 0000260193 PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Reti di Calcolatori LS prof. Antonio Corradi A.A. 2007/2008 ABSTRACT L obiettivo di questo progetto è la realizzazione

Dettagli

Tecnologie per il Web. Il web: Architettura HTTP HTTP. SSL: Secure Socket Layer

Tecnologie per il Web. Il web: Architettura HTTP HTTP. SSL: Secure Socket Layer Tecnologie per il Web Il web: architettura e tecnologie principali Una analisi delle principali tecnologie per il web Tecnologie di base http, ssl, browser, server, firewall e proxy Tecnologie lato client

Dettagli

POLITECNICO DI TORINO III Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica TESI DI LAUREA

POLITECNICO DI TORINO III Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica TESI DI LAUREA POLITECNICO DI TORINO III Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica TESI DI LAUREA Architetture Web basate su Enterprise JavaBeans in ambiente Open Source Relatori Ing. Fulvio Corno

Dettagli

Architetture Software

Architetture Software Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Ingegneria del Software Architetture Software Giulio Destri Ing. del Sw: Architettura - 1 Scopo del modulo

Dettagli

SWIM v2 Design Document

SWIM v2 Design Document PROGETTO DI INGEGNERIA DEL SOFTWARE 2 SWIM v2 DD Design Document Matteo Danelli Daniel Cantoni 22 Dicembre 2012 1 Indice Progettazione concettuale Modello ER Entità e relazioni nel dettaglio User Feedback

Dettagli

Sviluppo di applicazioni web con il pattern Model-View-Controller. Gabriele Pellegrinetti

Sviluppo di applicazioni web con il pattern Model-View-Controller. Gabriele Pellegrinetti Sviluppo di applicazioni web con il pattern Model-View-Controller Gabriele Pellegrinetti 2 MVC: come funziona e quali sono vantaggi che derivano dal suo utilizzo? La grande diffusione della tecnologia

Dettagli

Corso di Informatica Modulo T3 B1 Programmazione web

Corso di Informatica Modulo T3 B1 Programmazione web Corso di Informatica Modulo T3 B1 Programmazione web 1 Prerequisiti Architettura client/server Elementi del linguaggio HTML web server SQL server Concetti generali sulle basi di dati 2 1 Introduzione Lo

Dettagli

Sistemi Informativi Distribuiti

Sistemi Informativi Distribuiti Corso di Laurea Magistrale in Ingegneria Gestionale Corso di Sistemi Informativi Modulo II A. A. 2013-2014 SISTEMI INFORMATIVI MODULO II Sistemi Informativi Distribuiti 1 Sistemi informativi distribuiti

Dettagli

Architettura SW Definizione e Notazioni

Architettura SW Definizione e Notazioni Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Stili Architetturali E. TINELLI Architettura SW Definizione e Notazioni Definizione ANSI/IEEE Std Std1471-2000

Dettagli

Lezione di Basi di Dati 1 18/11/2008 - TECNOLOGIE PER IL WEB: CGI - AJAX SERVLETS & JSP

Lezione di Basi di Dati 1 18/11/2008 - TECNOLOGIE PER IL WEB: CGI - AJAX SERVLETS & JSP EVOLUZIONE DEL WEB: PAGINE STATICHE vs PAGINE DINAMICHE Il Web è nato a supporto dei fisici, perché potessero scambiare tra loro le informazioni inerenti le loro sperimentazioni. L HTTP è nato inizialmente

Dettagli

Introduzione alle Applicazioni Web

Introduzione alle Applicazioni Web Introduzione alle Applicazioni Web di Mary Ercolini Con il termine Applicazione Web si intende un applicazione risiedente in un Server Web alla quale si accede tramite un browser Internet o un altro programma

Dettagli

DBMS ed Applicazioni Motivazioni

DBMS ed Applicazioni Motivazioni DBMS ed Applicazioni Motivazioni Sin ora abbiamo visto SQL come linguaggio per interrogare DBMS da interfaccia interattiva Nella pratica, un efficace sfruttamento delle potenzialità dei DBMS deriva dalla

Dettagli

Architetture Web: un ripasso

Architetture Web: un ripasso Architetture Web: un ripasso Pubblicazione dinamica di contenuti. Come si fa? CGI Java Servlet Server-side scripting e librerie di tag JSP Tag eseguiti lato server Revisione critica di HTTP HTTP non prevede

Dettagli

Basi di Dati. Introduzione ai sistemi di basi di dati. K.Donno - Introduzione ai sistemi di basi di dati

Basi di Dati. Introduzione ai sistemi di basi di dati. K.Donno - Introduzione ai sistemi di basi di dati Basi di Dati Introduzione ai sistemi di basi di dati Introduzione ai sistemi di basi di dati Gestione dei Dati Una prospettiva storica File system verso DBSM Vantaggi di un DBMS Modelli dei dati Utenti

Dettagli

Introduzione all elaborazione di database nel Web

Introduzione all elaborazione di database nel Web Introduzione all elaborazione di database nel Web Prof.ssa M. Cesa 1 Concetti base del Web Il Web è formato da computer nella rete Internet connessi fra loro in una modalità particolare che consente un

Dettagli

Componenti Web: client-side e server-side

Componenti Web: client-side e server-side Componenti Web: client-side e server-side side Attività di applicazioni web Applicazioni web: un insieme di componenti che interagiscono attraverso una rete (geografica) Sono applicazioni distribuite logicamente

Dettagli

Sistema Operativo Compilatore

Sistema Operativo Compilatore MASTER Information Technology Excellence Road (I.T.E.R.) Sistema Operativo Compilatore Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Il Sistema

Dettagli

Introduzione ai sistemi di basi di dati

Introduzione ai sistemi di basi di dati Basi di Dati Introduzione ai sistemi di basi di dati Alessandro.bardine@gmail.com alessandro.bardine@iet.unipi.it Introduzione ai sistemi di basi di dati Gestione dei Dati Una prospettiva storica File

Dettagli

Database e reti. Piero Gallo Pasquale Sirsi

Database e reti. Piero Gallo Pasquale Sirsi Database e reti Piero Gallo Pasquale Sirsi Approcci per l interfacciamento Il nostro obiettivo è, ora, quello di individuare i possibili approcci per integrare una base di dati gestita da un in un ambiente

Dettagli

Tratte da (18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET)

Tratte da (18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET) Tratte da (18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET) Ipotesi di partenza: concetti di base del networking Le ipotesi di partenza indispensabili per poter parlare di tecniche di accesso

Dettagli

Corso Web programming

Corso Web programming Corso Web programming Modulo T3 A1 Modelli di programmazione 1 Prerequisiti Concetto di rete Processi e thread Concetti generali sui database 2 1 Introduzione Un particolare ambito della programmazione

Dettagli

Seminario di Sistemi Distribuiti: RPC su SOAP

Seminario di Sistemi Distribuiti: RPC su SOAP Corso di Sistemi Distribuiti Prof. S. Balsamo Seminario di Sistemi Distribuiti: RPC su SOAP [ 777775] 1 INTRODUZIONE 3 2 RPC 3 3 SOAP (SIMPLE OBJECT ACCESS PROTOCOL) 3 4 UTILIZZO DI SOAP COME PROTOCOLLO

Dettagli

Implementazione di MVC. Gabriele Pellegrinetti

Implementazione di MVC. Gabriele Pellegrinetti Implementazione di MVC Gabriele Pellegrinetti 2 Come implementare il pattern Model View Controller con le tecnologie JSP, ASP e XML Implementazione del pattern MVC in Java (JSP Model 2) SUN è stato il

Dettagli

Informatica Documentale

Informatica Documentale Informatica Documentale Ivan Scagnetto (scagnett@dimi.uniud.it) Stanza 3, Nodo Sud Dipartimento di Matematica e Informatica Via delle Scienze, n. 206 33100 Udine Tel. 0432 558451 Ricevimento: giovedì,

Dettagli

Appunti della lezione del 8/10/2008 del corso di Basi di dati I - Università del Salento

Appunti della lezione del 8/10/2008 del corso di Basi di dati I - Università del Salento Appunti della lezione del 8/10/2008 del corso di Basi di dati I - Università del Salento Tecnologie per lo sviluppo di applicazioni La tendenza attuale dell'ingegneria è quella dell'integrazione di componenti

Dettagli

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni)

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni) Progettazione di Sistemi Interattivi Struttura e supporti all implementazione di applicazioni in rete (cenni) Docente: Daniela Fogli Gli strati e la rete Stratificazione da un altro punto di vista: i calcolatori

Dettagli

ASP.NET: archiettura. Architettura del framework.net

ASP.NET: archiettura. Architettura del framework.net ASP.NET ASP.NET Evoluzione, più flessibile, delle Active Server Pages (ASP) Sono pagine web attive che espongono risorse del server Elaborazione server-side di Web forms Indipendenti dal linguaggio Indipendenti

Dettagli

Architetture Web I Server Web e gli Standard della Comunicazione

Architetture Web I Server Web e gli Standard della Comunicazione Architetture Web I Server Web e gli Standard della Comunicazione Alessandro Martinelli alessandro.martinelli@unipv.it 27 Marzo 2012 Architetture Architetture Web Protocolli di Comunicazione Il Client Side

Dettagli

18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET

18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET 18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET Ipotesi di partenza: concetti di base del networking Le ipotesi di partenza indispensabili per poter parlare di tecniche di accesso ai database

Dettagli

Sistemi Informativi e WWW

Sistemi Informativi e WWW Premesse Sistemi Informativi e WWW WWW: introduce un nuovo paradigma di diffusione (per i fornitori) e acquisizione (per gli utilizzatori) delle informazioni, con facilità d uso, flessibilità ed economicità

Dettagli

CAPITOLO 10 - TECNOLOGIA ASP.NET - WEB FORM

CAPITOLO 10 - TECNOLOGIA ASP.NET - WEB FORM INTRODUZIONE Nel capitolo 5, dedicato all ambiente di sviluppo, si è descritto come implementare un progetto Web tramite lo strumento di sviluppo Microsoft Visual Studio 2010. Un progetto web (o sito web)

Dettagli

Gli XML Web Service. Prof. Mauro Giacomini. Complementi di Informatica Medica 2008/2009 1

Gli XML Web Service. Prof. Mauro Giacomini. Complementi di Informatica Medica 2008/2009 1 Gli XML Web Service Prof. Mauro Giacomini Medica 2008/2009 1 Definizioni i i i Componente.NET che risponde a richieste HTTP formattate tramite la sintassi SOAP. Gestori HTTP che intercettano richieste

Dettagli

Cod. SWUM_00399_it RCCL

Cod. SWUM_00399_it RCCL Cod. SWUM_00399_it RCCL Libreria di comunicazione CISS Manuale utente Aggiornamento 2/9/2008 Sommario 1. Presentazione... 3 2. Installazione del prodotto... 3 3. Applicazione di esempio... 4 4. Per iniziare

Dettagli

Progetto di Applicazioni Software

Progetto di Applicazioni Software Progetto di Applicazioni Software Antonella Poggi Dipartimento di Informatica e Sistemistica Antonio Ruberti SAPIENZA Università di Roma Anno Accademico 2010/2011 Questi lucidi sono stati prodotti sulla

Dettagli

Corso Android Corso Online Sviluppo su Cellulari con Android

Corso Android Corso Online Sviluppo su Cellulari con Android Corso Android Corso Online Sviluppo su Cellulari con Android Accademia Futuro info@accademiafuturo.it Programma Generale del Corso di Sviluppo su Cellulari con Android Programma Base Modulo Uno - Programmazione

Dettagli

Progetto di Applicazioni Software

Progetto di Applicazioni Software Progetto di Applicazioni Software Antonella Poggi Dipartimento di Informatica e Sistemistica Antonio Ruberti SAPIENZA Università di Roma Anno Accademico 2008/2009 Questi lucidi sono stati prodotti sulla

Dettagli

Breve introduzione allo sviluppo WEB. a cura di Ciro Attanasio - ciro.attanasio@email.cz

Breve introduzione allo sviluppo WEB. a cura di Ciro Attanasio - ciro.attanasio@email.cz Breve introduzione allo sviluppo WEB a cura di Ciro Attanasio - ciro.attanasio@email.cz Partiamo (1 di 1) Come funziona il WEB e quali tecnologie lo compongono Cos è un Client (1 di 2) Un client, in informatica,

Dettagli

Esercitazione 8. Basi di dati e web

Esercitazione 8. Basi di dati e web Esercitazione 8 Basi di dati e web Rev. 1 Basi di dati - prof. Silvio Salza - a.a. 2014-2015 E8-1 Basi di dati e web Una modalità tipica di accesso alle basi di dati è tramite interfacce web Esiste una

Dettagli

Siti web centrati sui dati (Data-centric web applications)

Siti web centrati sui dati (Data-centric web applications) Siti web centrati sui dati (Data-centric web applications) 1 A L B E R T O B E L U S S I A N N O A C C A D E M I C O 2 0 1 2 / 2 0 1 3 WEB La tecnologia del World Wide Web (WWW) costituisce attualmente

Dettagli

Ottimizzazione dello sviluppo software con Microsoft Visual Studio 2008

Ottimizzazione dello sviluppo software con Microsoft Visual Studio 2008 Ottimizzazione dello sviluppo software con Microsoft Visual Studio 2008 White paper Novembre 2007 Per informazioni aggiornate, visitare l indirizzo www.microsoft.com/italy/vstudio È possibile che a questo

Dettagli

Novità di Crystal Reports XI

Novità di Crystal Reports XI Introduzione Introduzione Questa sezione offre una panoramica di dettagliata dei componenti, delle funzioni e dei vantaggi forniti dalla versione più recente di Crystal Reports. Alcuni tra i più importanti

Dettagli

BASE DI DATI: introduzione. Informatica 5BSA Febbraio 2015

BASE DI DATI: introduzione. Informatica 5BSA Febbraio 2015 BASE DI DATI: introduzione Informatica 5BSA Febbraio 2015 Di cosa parleremo? Base di dati relazionali, modelli e linguaggi: verranno presentate le caratteristiche fondamentali della basi di dati. In particolare

Dettagli

Corso basi di dati Introduzione alle ASP

Corso basi di dati Introduzione alle ASP Corso basi di dati Introduzione alle ASP Gianluca Di Tomassi Email: ditomass@dia.uniroma3.it Università di Roma Tre Web statico e Web interattivo In principio il Web era una semplice collezione di pagine

Dettagli

OBIETTIVI SPECIFICI DI APPRENDIMENTO

OBIETTIVI SPECIFICI DI APPRENDIMENTO Disciplina:... Anno scolastico: 20.../20... Classe/i :... Docente:... DI APPRENDIMENTO SEZIONE 1 Premesse matematiche Nozioni fondamentali sui sistemi di numerazione Sistemi di numerazione in base diversa

Dettagli

Navigare verso il cambiamento. La St r a d a. p i ù semplice verso il ca m b i a m e n t o

Navigare verso il cambiamento. La St r a d a. p i ù semplice verso il ca m b i a m e n t o Navigare verso il cambiamento La St r a d a p i ù semplice verso il ca m b i a m e n t o Le caratteristiche tecniche del software La Tecnologia utilizzata EASY è una applicazione Open Source basata sul

Dettagli

venerdì 31 gennaio 2014 Programmazione Web

venerdì 31 gennaio 2014 Programmazione Web Programmazione Web WWW: storia Il World Wide Web (WWW) nasce tra il 1989 e il 1991 come progetto del CERN di Ginevra affidato a un gruppo di ricercatori informatici tra i quali Tim Berners- Lee e Robert

Dettagli

RenderCAD S.r.l. Formazione

RenderCAD S.r.l. Formazione Corso Descrizione La durata di questo corso è complessivamente di ore 150 di cui 85 ore di teoria, 35 ore di pratica e 30 ore di stage in azienda. Nel nostro territorio esiste una richiesta di tale figura,

Dettagli

DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18.

DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18. PERIODO : DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18.00 A CHI E RIVOLTO IL CORSO Questo progetto si rivolge a tutti

Dettagli

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database Corso di Informatica Modulo T3 B3 Programmazione lato server 1 Prerequisiti Architettura client/server Conoscenze generali sui database 2 1 Introduzione Lo scopo di questa Unità è descrivere gli strumenti

Dettagli

Architetture di sistema

Architetture di sistema Università di Bergamo Facoltà di Ingegneria Applicazioni Internet B Paolo Salvaneschi B1_1 V1.6 Architetture di sistema Il contenuto del documento è liberamente utilizzabile dagli studenti, per studio

Dettagli

Design Patterns. Sommario. Architettura a 3 Livelli Concetti Generali Presentazione Dominio Sorgente Dati DIB 1. Design Patterns DIB 2

Design Patterns. Sommario. Architettura a 3 Livelli Concetti Generali Presentazione Dominio Sorgente Dati DIB 1. Design Patterns DIB 2 DIB 1 Sommario Architettura a 3 Livelli Concetti Generali Presentazione Dominio Sorgente Dati DIB 2 Architettura a 3 Livelli DIB 3 Architettura a 3 Livelli Presentazione Gestione dell interazione degli

Dettagli

Progettazione: Tecnologie e ambienti di sviluppo

Progettazione: Tecnologie e ambienti di sviluppo Contratto per l acquisizione di servizi di Assistenza specialistica per la gestione e l evoluzione del patrimonio software della Regione Basilicata. Repertorio n. 11016 del 25/09/2009 Progettazione: Tecnologie

Dettagli

N.E.A.T. ( Neutral Environment Application Tools )

N.E.A.T. ( Neutral Environment Application Tools ) N.E.A.T. ( Neutral Environment Application Tools ) SCOPO : Ambiente per lo sviluppo di applicazioni WEB multimediali basate su Data Base Relazionale e strutturate secondo il modello a tre livelli: Presentazione

Dettagli

Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni

Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni White paper Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni Panoramica Questo documento analizza il supporto alla programmabilità nell'infrastruttura ACI (Application Centric

Dettagli

SVILUPPO ONTOLOGIE PER LA GESTIONE DOCUMENTALE E LORO INTEGRAZIONE ALL INTERNO DI UNA PIATTAFORMA WEB

SVILUPPO ONTOLOGIE PER LA GESTIONE DOCUMENTALE E LORO INTEGRAZIONE ALL INTERNO DI UNA PIATTAFORMA WEB Facoltà di Ingegneria Corso di Laurea Specialistica in Ingegneria Informatica SVILUPPO ONTOLOGIE PER LA GESTIONE DOCUMENTALE E LORO INTEGRAZIONE ALL INTERNO DI UNA PIATTAFORMA WEB Relatore Chiarissimo

Dettagli

Applicazioni e Architetture Internet. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Applicazioni e Architetture Internet. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma Applicazioni e Architetture Internet 1 Introduzione Introduzione alle architetture a tre livelli Formati di dati per il Web HTML, XML, DTD 2 Componenti dei sistemi dataintensive Tre tipi separati di funzionalità:

Dettagli

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali:

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali: Componenti di una applicazione Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali: Un sottosistema di interfaccia con l utente (IU, user interface o anche presentation

Dettagli

Capitoli 8 e 9. SQL embedded. Applicazioni tradizionali Applicazioni Internet. Sistemi di basi di dati Raghu Ramakrishnan, Johannes Gehrke

Capitoli 8 e 9. SQL embedded. Applicazioni tradizionali Applicazioni Internet. Sistemi di basi di dati Raghu Ramakrishnan, Johannes Gehrke Capitoli 8 e 9 Applicazioni tradizionali Applicazioni Internet SQL embedded SQL nel codice applicativo I comandi SQL possono essere chiamati dall interno di un programma in un linguaggio ospite (ad esempio

Dettagli

Sme.UP Web Application

Sme.UP Web Application Sme.UP Web Application Web Application Web.UP Una interfaccia web per i vostri dati gestionali Il modulo applicativo Web.UP fornisce al progettista di siti Internet una serie di potenti strumenti per l'integrazione

Dettagli

Architetture Web a tre livelli: CGI, SSI, ISAPI e codice mobile Architetture a 3 livelli (1)

Architetture Web a tre livelli: CGI, SSI, ISAPI e codice mobile Architetture a 3 livelli (1) Pagina 1 di 10 Architetture Web a tre livelli: CGI, SSI, ISAPI e codice mobile Architetture a 3 livelli (1) Nel corso della lezione precedente abbiamo analizzato le caratteristiche dell'architettura CGI.

Dettagli

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA Salerno Formazione, società operante nel settore della didattica, della formazione professionale e certificata

Dettagli

SCP: SCHEDULER LAYER. a cura di. Alberto Boccato

SCP: SCHEDULER LAYER. a cura di. Alberto Boccato SCP: SCHEDULER LAYER a cura di Alberto Boccato PREMESSA: Negli ultimi tre anni la nostra scuola ha portato avanti un progetto al quale ho partecipato chiamato SCP (Scuola di Calcolo Parallelo). Di fatto

Dettagli

Informazioni corso AMMINISTRATORE. BO XI - Introduzione. abaroni@yahoo.com. adolfo.baroni@silnet.it Argomenti

Informazioni corso AMMINISTRATORE. BO XI - Introduzione. abaroni@yahoo.com. adolfo.baroni@silnet.it Argomenti abaroni@yahoo.com Informazioni corso AMMINISTRATORE Argomenti h Capitolo 1 Introduzione h Capitolo 2 Architettura di BusinessObjects Enterprise h Capitolo 3 Nozioni di base di Central Management Console

Dettagli

BANCA VIRTUALE/1 tecnologie dell informazione della comunicazione

BANCA VIRTUALE/1 tecnologie dell informazione della comunicazione BANCA VIRTUALE/1 Il termine indica un entità finanziaria che vende servizi finanziari alla clientela tramite le tecnologie dell informazione e della comunicazione, senza ricorrere al personale di filiale

Dettagli

Applicazioni web centrati sui dati (Data-centric web applications)

Applicazioni web centrati sui dati (Data-centric web applications) Applicazioni web centrati sui dati (Data-centric web applications) 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 WEB La tecnologia del World Wide Web (WWW) costituisce attualmente lo strumento di riferimento

Dettagli

Architetture di sistema

Architetture di sistema Università di Bergamo Facoltà di Ingegneria Applicazioni Internet B Paolo Salvaneschi B1_1 V1.7 Architetture di sistema Il contenuto del documento è liberamente utilizzabile dagli studenti, per studio

Dettagli

Introduzione a ASP.NET

Introduzione a ASP.NET Introduzione a ASP.NET ASP.NET è una tecnologia lato server per lo sviluppo di Web Application. È parte integrante del Microsoft.NET Framework. J2EE :.NET Framework = servlet/jsp : ASP.net Non è un semplice

Dettagli

Il Web, HTML e Java Corso di Laurea in Ingegneria Informatica Progetto S.C.E.L.T.E.

Il Web, HTML e Java Corso di Laurea in Ingegneria Informatica Progetto S.C.E.L.T.E. Il Web, HTML e Java Corso di Laurea in Ingegneria Informatica Progetto S.C.E.L.T.E. Università di Bologna Facoltà di Ingegneria Bologna, 08/02/2010 Outline Da applicazioni concentrate a distribuite Modello

Dettagli

Architetture dei WIS. Definizione di WIS. Benefici dei WIS. Prof.ssa E. Gentile a.a. 2011-2012

Architetture dei WIS. Definizione di WIS. Benefici dei WIS. Prof.ssa E. Gentile a.a. 2011-2012 Architetture dei WIS Prof.ssa E. Gentile a.a. 2011-2012 Definizione di WIS Un WIS può essere definito come un insieme di applicazioni in grado di reperire, cooperare e fornire informazioni utilizzando

Dettagli

8. Sistemi Distribuiti e Middleware

8. Sistemi Distribuiti e Middleware 8. Sistemi Distribuiti e Middleware Andrea Polini Ingegneria del Software Corso di Laurea in Informatica (Ingegneria del Software) 8. Sistemi distribuiti e Middleware 1 / 32 Sommario 1 Sistemi distribuiti

Dettagli

Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE Pag. 1/1 Sessione ordinaria 2010 Seconda prova scritta Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE CORSO DI ORDINAMENTO Indirizzo: INFORMATICA

Dettagli

Architetture Web parte 2

Architetture Web parte 2 Architetture Web parte 2 Programmazione in Ambienti Distribuiti A.A. 2004-05 Sessione Un insieme di richieste, provenienti dallo stesso browser e dirette allo stesso server, confinate in un dato lasso

Dettagli

Appendice D. D. Web Services

Appendice D. D. Web Services D. D.1 : cosa sono I cosiddetti sono diventati uno degli argomenti più attuali nel panorama dello sviluppo in ambiente Internet. Posti al centro delle più recenti strategie di aziende del calibro di IBM,

Dettagli

USO OTTIMALE DI ACTIVE DIRECTORY DI WINDOWS 2000

USO OTTIMALE DI ACTIVE DIRECTORY DI WINDOWS 2000 VERITAS StorageCentral 1 USO OTTIMALE DI ACTIVE DIRECTORY DI WINDOWS 2000 1. Panoramica di StorageCentral...3 2. StorageCentral riduce il costo totale di proprietà per lo storage di Windows...3 3. Panoramica

Dettagli

Software per la gestione di musei di arte contemporanea1

Software per la gestione di musei di arte contemporanea1 Software per la gestione di musei di arte contemporanea1 Identificativo del progetto: CA Nome documento: System Design(SD) Identificativo del documento: 6 CA_SD_E1_R1 Data del documento: 21/05/2012 Prima

Dettagli

DATA MANAGEMENT (descrizione)

DATA MANAGEMENT (descrizione) DATA MANAGEMENT (descrizione) (VER 0.1 / 0807) Autori: Andrea Guerrieri Revisioni: Data Autore Note 24/08/2007 Andrea Guerrieri Prima stesura 1 1. INTRODUZIONE Il sistema fornisce all utente e al progettista

Dettagli

INTRODUZIONE AL WEB DINAMICO

INTRODUZIONE AL WEB DINAMICO INTRODUZIONE AL WEB DINAMICO Internet: la rete delle reti Internet rappresenta oggi l espressione del forte bisogno dell uomo di comunicare, al fine, non solo di incrementare le conoscenze, ma anche di

Dettagli

19. LA PROGRAMMAZIONE LATO SERVER

19. LA PROGRAMMAZIONE LATO SERVER 19. LA PROGRAMMAZIONE LATO SERVER Introduciamo uno pseudocodice lato server che chiameremo Pserv che utilizzeremo come al solito per introdurre le problematiche da affrontare, indipendentemente dagli specifici

Dettagli

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a. 2010-2011

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a. 2010-2011 Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a. 2010-2011 2011 Docente: Gigliola Vaglini Docente laboratorio: Alessandro Lori 1 Obiettivi del corso Imparare

Dettagli