Open Source Frameworks
|
|
- Ernesto Palmisano
- 8 anni fa
- Visualizzazioni
Transcript
1 Open Source Frameworks Ingegneria del software (parte II) Andrea Bei 1
2 Framework Un framework è un insieme classi e interfacce che cooperano e generalizzano task e workflow comuni uno specifico dominio applicativo (funzionale o tecnologico) Un framework ha le seguenti caratteristiche Accelera la costruzione applicazioni del dominio a cui si rivolge grazie al riuso della soluzione architetturale che ne costituisce la struttura I componenti del framework sono riusabili Utilizzo ffuso classi astratte e interfacce Considerate come "template" per le sottoclassi o classi delle specifiche applicazioni. Adozione un modello collaborativo Inversione del flusso controllo (IOC) Lo sviluppatore non scrive coce per coornare le componenti. Lo sviluppatore implementa le componenti che aderendo alla logica collaborativa del framework verranno coornate da quest'ultimo. I framework assumono il controllo della applicazione e non il contrario! cfr ad esempio: pattern template method) 2
3 Framework Open Source Sono stati tra i principali elementi innovazione nelle architetture web negli ultimi anni Hanno rappresentato il principale veicolo dell esperienza collettiva degli sviluppatori in termini design & architectural pattern, ioms, best practices Rispetto ai framework in-house (realizzati ad hoc) hanno una contribuzione sviluppo più ampia e quin una maggiore velocità convergenza alla soluzione migliore per il dominio specifico Aumentano la produttività nello sviluppo Supportano la standarzzazione delle soluzioni Supportano un approccio allo sviluppo architettura-centrico Per uno sviluppatore/architetto Java EE la competenza su framework e librerie Open Source è fondamentale 3
4 Web Application Framework Un Web Application Framework è: un sistema software che fornisce struttura e comportamento generalizzati task e workflow tipici delle applicazioni web. Es: gestione della navigazione (MVC), gestione dell accesso ai dati (DAO), Il framework riferimento IS/LIS (euniversity) è un Web Application Framework dattico completo (nel senso che include tutti i task tipici una applicazione web dalla presentazione all accesso ai dati basandosi dai design pattern fondamentali) Nella vita reale per la realizzazione web application è tipico l utilizzo congiunto versi framework open source specializzati in aspetti specifici Ci concentreremo su alcuni quelli più ffusi Struts / Struts 2 Spring Hibernate 4
5 Struts Struts E un insieme classi ed interfacce che costituiscono l'infrastruttura per costruire web application Java EE conformi al design pattern Model 2 (MVC) Il suo ideatore è Craig McClanahan ed è stato donato alla Apache Software Foundation nel maggio del 2000 da parte IBM. E uno dei web application framework più ffusi al mondo Struts 2 Nonostante il nome, Struts 2 non è una nuova release Struts ma un framework completamente nuovo basato su WebWork Sono state introdotte caratteristiche non presenti in Struts grazie ai feedback migliaia sviluppatori 5
6 Spring Spring è un lightweight container che fornisce una soluzione per sviluppare applicazioni costruite su POJO. Si basa su: Inversion of Control/Dependency Injection (configurazione data-driven POJO) AOP (Aspect Oriented Programming) ( Diverse componenti utilità (tra cui una propria implementazione MVC La prima versione venne scritta da Rod Johnson e rilasciata con la pubblicazione del proprio libro "Expert One-on-One Java EE Design and Development" (Wrox Press, Ottobre 2002). Spring è stato largamente riconosciuto all'interno della comunità Java quale valida alternativa al modello basato su Enterprise JavaBeans (EJB). Rispetto a quest'ultimo, il framework Spring lascia una maggiore libertà al programmatore fornendo allo stesso tempo un'ampia e ben documentata gamma soluzioni semplici adatte alle problematiche più comuni. 6
7 Hibernate Hibernate (H8) è un middleware ORM (Object-relational mapping) open source. Consente la rappresentazione e la gestione su database relazionale un sistema oggetti Java. E stato originariamente sviluppato da un team internazionale programmatori volontari coornati da Gavin King; in seguito il progetto è stato proseguito sotto l'egida JBoss, che ne ha curato la standarzzazione rispetto alle specifiche Java EE. 7
8 Mapping dei FW OS con euniversity Struts (2) Hibernate Spring 8
9 Struts class agram 9
10 Struts componenti principali Struts-config.xml fornisce alla ActionServlet, in base ai parametri della URL La Action da invocare La pagina JSP a cui inoltrare la richiesta ActionServlet: il controller Model 2 Action: il Model Model 2 (Classe base per le classi action ) Le classi action sono responsabili Interfacciarsi con il layer sottostante (es: EJB, DAO, ) Recuperare i dati da presentare alla View e inserirli in sessione JSP: la View Model 2 Le pagine JSP sono responsabili Recuperare i dati da visualizzare dalla sessione Visualizzare i dati 10
11 Struts- esempio struts-config <struts-config> <form-beans> <form-bean name projectform type it.uniroma2.app.form.projectlistform /> </form-beans> <action-mappings> <action path /tasklist type it.uniroma2.app.action.producetasklistaction name projectform scope request validate true input /jsp/project.jsp > <forward name success path /jsp/tasklist.jsp /> <forward name failure path /jsp/servererrors.jsp /> </action> </action-mappings> </struts-config> 11
12 Bibliografia Programming Jakarta Struts - Chuck Cavaness 12
13 Spring - Caratteristiche Spring è un lightweight container framework che supporta tecniche IoC (inversion of control) e AoP (aspect-oriented programming) Lightweight ( leggero ) leggero per mensione e overhead elaborazione. (file JAR circa 1MB) Inversion of control Permette sostenere low coupling (basso accoppiamento). Gli oggetti ricevono passivamente dall esterno le loro pendenze (es: il riferimento ad altri oggetti), invece crearle ( oggeti) o cercarle in file esterni (es: classloang namico). Approccio push invece pull. E il container che fornisce le pendenze all oggetto all atto della istanziazione quest ultimo (Dependency Iniection) Aspect-oriented programming Permetta la SoC (separation of concern). Ovvero la separazione responsabilità tra business logic e system services (come logging, autenticazione, gestione delle transazioni) 13
14 Spring - Caratteristiche Container Contiene e gestisce il ciclo vita e la configurazione delle pendenze degli oggetti. E possibile configurare come ogni singolo bean (POJO) deve essere creato (ad esempio in modalità singleton, pool, classica) e quali sono le sue pendenze con gli altri bean. Framework Permette configurare e comporre applicazioni complesse a partire da componenti più semplici in maniera chiarativa (XML) Fornisce funzionalità infrastrutturali riusabili (transaction management, persistence framework integration, etc.), lasciando al developer solo lo sviluppo della logica business 14
15 Spring Architettura 15
16 Spring Architettura Core container Contiene le funzionalità base del framework. Contiene il BeanFactory, il cuore ogni applicazione Spring-based, che che consiste in una implementazione del pattern factory che utilizza la tecnica IoC Modulo Application Context Contiene il supporto per l internazionalizzazione (I18N messages), gestione degli eventi del ciclo vita della applicazione, meccanismi validazione, servizi come come , JNDI access, EJB integration, scheduling, integrazione con templating framework come Velocity e FreeMarker Modulo AOP E il componente base per lo sviluppo aspects (le API sono conformi a quelle definite in AOP Alliance(*). Permette la meta-programmazione. (è possibile aggiungere annotations per istruire Spring su dove e quando aggiungere aspetti) 16
17 Spring Architettura Modulo JDBC e DAO Aiuta a evitare il coce boilerplate proprio JSBC (connessioni, resultset, ). Fornisce una astrazione del coce boilerplate e permette semplificare il coce accesso a db. Fornisce un layer exception relative all accesso al db on top rispetto a quelle native dei db. Modulo Web Context and Utility Si basa sul modulo Application Context e lo specializza per applicazioni. Fornisce il supporto a task web-oriented (es: file upload) e all integrazione con Jakarta Struts. MVC framework Fornisce un framework Model/View/Controller (MVC) per la costruzione web application. Spring s MVC framework usa IoC per separare la logica business e la logica controllo e collegare in modo chiarativo i parametri della request ai relativi oggetti business (i.e. actions) Modulo O/R Mapping Punto integrazione per Hibernate, JDO, OJB, ibatis 17
18 Spring hello world interface GreetingService saygreeting(); class GreetingServiceImpl implements GreetingService String greeting; GreetingServiceImpl() GreetingServiceImpl(String greeting) this.greeting greeting; saygreeting() System.out.println(greeting); setgreeting(string greeting) this.greeting greeting; GreetingServiceImpl GreetingServiceImpl ha ha un un solo solo attributo attributo (o (o property): property): greeting. greeting. La La property property è è l unica l unica pendenza pendenza della della classe classe può può essere essere impostata impostata tramite tramite il il costruttore costruttore o o tramite tramite il il metodo metodo setter setter SPRING SPRING IMPOSTA IMPOSTA IL IL VALORE VALORE DELLA DELLA PROPERTY PROPERTY 18
19 Spring hello world <?xml version"1.0" encong"utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id greetingservice class"com.springinaction.chapter01.hello.greetingserviceimpl"> <property name"greeting"> <value>buenos Dias!</value> </property> </bean> </beans> TRAMITE TRAMITE SETTER SETTER - - EQUIVALE EQUIVALE A GreetingServiceImpl GreetingServiceImpl greetingservice greetingservice GreetingServiceImpl(); GreetingServiceImpl(); greetingservice.setgreeting("buenos greetingservice.setgreeting("buenos Dias!"); Dias!"); 19
20 Spring hello world <bean id"greetingservice" class"com.springinaction.chapter01.hello.greetingserviceimpl"> <constructor-arg> <value>buenos Dias!</value> </constructor-arg> </bean> TRAMITE TRAMITE COSTRUTTORE COSTRUTTORE - - EQUIVALE EQUIVALE A GreetingServiceImpl GreetingServiceImpl greetingservice greetingservice GreetingServiceImpl( Buenos GreetingServiceImpl( Buenos Dias ); Dias ); 20
21 Spring hello world package com.springinaction.chapter01.hello; import java.io.fileinputstream; import org.springframework.beans.factory.beanfactory; import org.springframework.beans.factory.xml.xmlbeanfactory; class HelloApp static main(string[] args) throws Exception BeanFactory factory XmlBeanFactory( FileInputStream("hello.xml")); GreetingService greetingservice (GreetingService) factory.getbean("greetingservice"); greetingservice.saygreeting(); Risultato Risultato Hello Hello World : World : Come Come configurare configurare un un bean bean meante meante l injection l injection una una specifica specifica stringa stringa in in una una property. property. La La reale reale potenzialià potenzialià Spring Spring consiste consiste nel nel poter poter fare fare l injection l injection un un bean bean in in un un altro altro bean bean usando usando IoC IoC 21
22 IoC (Inversion of control) Hollywood Principle Don t call me, I ll call you. Lo sviluppatore implementa dei meto che verranno chiamati dal framework E una tecnica usata nella progettazione dei framework Uno dei pattern per realizzarla è il Template Method (fig. a destra) Esempio: Servlet container Gestisce il ciclo vita le request delle Servlet Invocando i meto callback Init, Destroy, doget, dopost abstract class AbstractClass templatemethod() // qui c è l algoritmo... method1(); while (...) method2();... method3(); abstract method1(); abstract method2(); abstract method3(); framework class ConcreteClass extends AbstractClass method1()... method2()... method3()... applicazione 22
23 Dependency Iniection E un tipo particolare inversione del controllo Trazionalmente nell OOP ogni oggetto è responsabile ottenere i riferimenti agli oggetti con cui collabora (le sue pendenze) Applicando IoC, agli oggetti le pendenze vengono fornite all atto della creazione da un entità esterna che coorna ogni oggetto nel sistema. In altre parole le pendenze vengono iniettate nell oggetto In pratica in Spring il container inietta le pendenze nell oggetto tramite i suoi meto Java usati come meto callback (setter o costruttori). Le pendenze possono essere oggetti, primitive (es: String) o tipi semplici (es: int, float). DI è anche conosciuta come push configuration. Le pendenze sono spinte dentro (push) l oggetto dal container piuttosto che prelevate (pull) dall oggetto stesso PULL PUSH Dependency Dependency Injection Injection Pattern Pattern 23
24 DI Esempio class class KnightOfTheRoundTable KnightOfTheRoundTable String String name; name; HolyGrailQuest HolyGrailQuest quest; quest; KnightOfTheRoundTable(String KnightOfTheRoundTable(String name) name) this.name this.name name; name; quest quest HolyGrailQuest(); HolyGrailQuest(); -> L oggetto recupera la propria pendenza HolyGrail HolyGrail embarkonquest() embarkonquest() throws throws GrailNotFoundException GrailNotFoundException quest.embark(); quest.embark(); class class HolyGrailQuest HolyGrailQuest HolyGrailQuest() HolyGrailQuest() HolyGrail HolyGrail embark() embark() throws throws GrailNotFoundException GrailNotFoundException HolyGrail HolyGrail grail grail null; null; // // Look Look for for grail grail grail; grail; 24
25 DI Esempio import import junit.framework.testcase; junit.framework.testcase; class class KnightOfTheRoundTableTest KnightOfTheRoundTableTest extends extends TestCase TestCase testembarkonquest() testembarkonquest() KnightOfTheRoundTable KnightOfTheRoundTable knight knight KnightOfTheRoundTable("Bevere"); KnightOfTheRoundTable("Bevere"); try try HolyGrail HolyGrail grail grail knight.embarkonquest(); knight.embarkonquest(); assertnotnull(grail); assertnotnull(grail); asserttrue(grail.isholy()); asserttrue(grail.isholy()); catch catch (GrailNotFoundException (GrailNotFoundException e) e) fail(); fail(); Se Se si si esegue esegue il il test test su su KnightOfTheRoundTable, KnightOfTheRoundTable, inrettamente inrettamente si si effettua effettua il il test test anche anche su su HolyGrailQuest HolyGrailQuest Inoltre Inoltre è è impossibile impossibile avere avere un un comportamento comportamento verso verso HolyGrailQuest HolyGrailQuest (e.g., (e.g., null null o o throw throw GrailNotFoundException) GrailNotFoundException) per per versi versi test test Se Se si si sta sta utilizzando utilizzando per per HolyGrailQuest HolyGrailQuest un un mock mock object object per per simulare simulare un un oggetto oggetto reale reale in in ambiente ambiente test test si si deve deve moficare moficare il il coce coce per per farlo farlo funzionare funzionare in in ambiente ambiente produzione produzione 25
26 DI Esempio Il problema è l accoppiamento. KnightOfTheRoundTable è staticamente accoppiato con HolyGrailQuest (non si può avere un KnightOfTheRoundTable senza avere anche un HolyGrailQuest) L accoppiamento è necessario ma va minimizzato Necessario: Due oggetti sono accoppiati quando uno pende dall altro, ma un programma OO in esecuzione è proprio un insieme oggetti che pendono l uno dall altro (eseguono dei compiti o delegano l esecuzione ad altri oggetti pendenti) Minimizzato: Va reso più basso possibile perchè riduce la leggibilità, manutenibilità, testabilità (pattern GRASP low coupling ). Un modo per ridurre l accoppiamento retto è introdurre un livello inrezione meante interfacce interface interface Quest Quest abstract abstract Object Object embark() embark() throws throws QuestException; QuestException; class class HolyGrailQuest HolyGrailQuest implements implements Quest Quest HolyGrailQuest() HolyGrailQuest() Object Object embark() embark() throws throws QuestException QuestException // // Do Do whatever whatever it it means means to to embark embark on on a a quest quest HolyGrail(); HolyGrail(); Quest Quest quest; quest; Object Object embarkonquest() embarkonquest() throws throws QuestException QuestException quest.embark(); quest.embark(); Nella classe KnightOfTheRoundTable uso il tipo interfaccia 26
27 DI Esempio interface interface Knight Knight Object Object embarkonquest() embarkonquest() throws throws QuestException; QuestException; class class KnightOfTheRoundTable KnightOfTheRoundTable implements implements Knight Knight Quest Quest quest; quest; KnightOfTheRoundTable(String KnightOfTheRoundTable(String name) name) quest quest HolyGrailQuest(); HolyGrailQuest(); Object Object embarkonquest() embarkonquest() throws throws QuestException QuestException quest.embark(); quest.embark(); Anche Anche con con le le interfacce interfacce non non risolvo risolvo il il problema problema perchè perchè un un KnightOfTheRoundTable KnightOfTheRoundTable is is vincolato vincolato solo solo ad ad un un tipo tipo ricerca ricerca per per Holy Holy Grail Grail e e nessun nessun altro altro tipo tipo ricerca ricerca 27
28 DI Esempio E E giusto giusto che che il il cavaliere cavaliere scelga scelga da da solo solo la la propria propria ricerca ricerca (missione) (missione) o o è è più più conveniente/utile conveniente/utile che che gli gli venga venga assegnata assegnata?? class class KnightOfTheRoundTable KnightOfTheRoundTable implements implements Knight Knight Quest Quest quest; quest; KnightOfTheRoundTable(String KnightOfTheRoundTable(String name) name) HolyGrail HolyGrail embarkonquest() embarkonquest() throws throws QuestException QuestException quest.embark(); quest.embark(); setquest(quest setquest(quest quest) quest) this.quest this.quest quest; quest; Ora Ora KnightOfTheRoundTable KnightOfTheRoundTable non non è è più più responsabile responsabile recuperare recuperare le le proprie proprie missioni. missioni. Inoltre Inoltre poiché poiché KnightOfTheRoundTable KnightOfTheRoundTable è è pendente pendente solo solo dall interfaccia dall interfaccia Quest Quest è è possibile possibile passargli passargli qualsiasi qualsiasi implementazione implementazione tale tale interfaccia. interfaccia. La La responsabilità responsabilità coornare coornare la la collaborazione collaborazione tra tra oggetti oggetti pendenti pendenti è è scorporata scorporata dagli dagli oggetti oggetti stessi. stessi. es: es: In In ambiente ambiente produzione produzione potremmo potremmo aver aver bisogno bisogno un un tipo tipo HolyGrailQuest, HolyGrailQuest, 28ma ma in in ambiente ambiente test test potremmo potremmo avere avere una una implementazione implementazione mock mock (mock (mock object) object)
29 DI Esempio Ora Ora che che l oggetto l oggetto è è pronto pronto a a ricevere ricevere dall esterno dall esterno una una pendenza pendenza chi chi la la passa passa?? QUI QUI ENTRA ENTRA IN IN GIOCO GIOCO SPRING SPRING L azione L azione creare creare associazioni associazioni tra tra componenti componenti applicativi applicativi è è detta detta wiring wiring (cablare/collegare (cablare/collegare fili fili elettrici). elettrici). In In Spring, Spring, ci ci sono sono molti molti mo mo collegare collegare tra tra loro loro componenti componenti ma ma il il più più comune comune è è tramite tramite XML XML ( knight.xml ) ( knight.xml ) <?xml <?xml version"1.0" version"1.0" encong"utf-8"?> encong"utf-8"?> <!DOCTYPE <!DOCTYPE beans beans PUBLIC PUBLIC "-//SPRING//DTD "-//SPRING//DTD BEAN//EN" BEAN//EN" " " <beans> <beans> <bean <bean id"quest id"quest class"com.springinaction.chapter01.knight.holygrailquest"/> class"com.springinaction.chapter01.knight.holygrailquest"/> <bean <bean id"knight id"knight class"com.springinaction.chapter01.knight.knightoftheroundtable"> class"com.springinaction.chapter01.knight.knightoftheroundtable"> <constructor-arg> <constructor-arg> <value>bevere</value> <value>bevere</value> </constructor-arg> </constructor-arg> <property <property name"quest"> name"quest"> <ref <ref bean"quest"/> bean"quest"/> </property> </property> </bean> </bean> </beans> </beans> 29
30 DI Esempio import import org.springframework.beans.factory.beanfactory; org.springframework.beans.factory.beanfactory; import import org.springframework.beans.factory.xml.xmlbeanfactory; org.springframework.beans.factory.xml.xmlbeanfactory; class class KnightApp KnightApp static static main(string[] main(string[] args) args) throws throws Exception Exception BeanFactory BeanFactory factory factory XmlBeanFactory( XmlBeanFactory( FileInputStream("knight.xml")); FileInputStream("knight.xml")); KnightOfTheRoundTable KnightOfTheRoundTable knight knight (KnightOfTheRoundTable)factory.getBean("knight"); (KnightOfTheRoundTable)factory.getBean("knight"); knight.embarkonquest(); knight.embarkonquest(); 30
31 Aspect Oriented Programming (AOP) E un paragma per incapsulare il coce crosscutting Il coce che altrimenti sarebbe sperso (sparso) tra oggetti e meto (es: logging, security, transaction)può essere raggruppato in un solo punto Coce sperso Layers Per Per intuire intuire il il funzionamento funzionamento si si pensi pensi al al concetti concetti Interceptor Interceptor (e.g. (e.g. interceptor interceptor Struts2) Struts2) Il Il client client invoca invoca un un proxy proxy Una Una catena catena interceptors interceptors (layer) (layer) decora decora le le successive successive chiamate chiamate fino fino al al metodo metodo target target Gli Gli interceptor interceptor forniscono forniscono servizi servizi come come transaction transaction management, management, logging, logging, security security I I servizi servizi sono sono specificati specificati chiarativamente chiarativamente 31
32 Esempio AOP package com.springinaction.chapter01.knight; import org.apache.log4j.logger; class Minstrel Logger song Logger.getLogger(KnightOfTheRoundTable.class); Minstrel() compose(string name, String message) song.debug("fa la la! Brave " + name + " d " + message + "!"); class KnightOfTheRoundTable Minstrel minstrel; setminstrel(minstrel minstrel) this.minstrel minstrel; HolyGrail embarkonquest() throws QuestException minstrel.compose(name, "embark on a quest"); quest.embark(); Ideally a minstrel (metafora un logger) would automatically compose songs without being explicitly told to do so 32
33 Esempio AOP package com.springinaction.chapter01.knight; import java.lang.reflect.method; import org.apache.log4j.logger; import org.springframework.aop.methodbeforeadvice; class MinstrelAdvice implements MethodBeforeAdvice MinstrelAdvice() before(method method, Object[] args,object target) throws Throwable Knight knight (Knight) target; Logger song Logger.getLogger(target.getClass()); song.debug("brave " + knight.getname() +" d " + method.getname()); Applying advice to an object is known as weaving 33
34 Bibliografia Spring in action - Craig Walls Ryan Breidenbach Manning 34
35 Hibernate - Caratteristiche Hibernate è un middleware ORM (Object Relational Mapping). La funzione principale un ORM è l automatica e trasparente persistenza oggetti nelle tabelle un DB relazionale tramite metadata che descrivono il mapping tra oggetti e entità del DB. Lo strato ORM trasforma dati da una rappresentazione e l altra in entrambi i versi Ogni middleware ORM comprende i seguenti elementi: API per eseguire operazioni CRUD (Create Read Update Delete) su oggetti classi persistenti Un linguaggio o API per specificare delle Query su classi e proprietà classi Una facility per specificare i mapping metadata Una tecnica per gestire oggetti transazionali per eseguire rty checking, lazy association fetching, ed altre funzioni ottimizzazione 35
36 Hibernate Hello World package hello; package hello; class class Message Message Long id; Long id; String String text; text; Message nextmessage; Message nextmessage; Message() Message() Message(String text) Message(String text) this.text this.text text; text; Long Long getid() getid() id; id; setid(long setid(long id) id) this.id this.id id; id; String String gettext() gettext() text; text; Applying advice to an object is known as weaving settext(string settext(string text) text) this.text this.text text; text; Message Message getnextmessage() getnextmessage() nextmessage; nextmessage; setnextmessage(message setnextmessage(message nextmessage) nextmessage) this.nextmessage this.nextmessage nextmessage; nextmessage; 36
37 Hibernate Hello World Session Session session session getsessionfactory().opensession(); getsessionfactory().opensession(); Transaction Transaction tx tx session.begintransaction(); session.begintransaction(); Message Message message message Message("Hello Message("Hello World"); World"); session.save(message); session.save(message); tx.commit(); tx.commit(); session.close(); session.close(); equivale a insert insert into into MESSAGES MESSAGES (MESSAGE_ID, (MESSAGE_ID, MESSAGE_TEXT, MESSAGE_TEXT, NEXT_MESSAGE_ID) NEXT_MESSAGE_ID) values values (1, (1, 'Hello 'Hello World', World', null) null) 37
38 Hibernate Hello World Session Session Session Session getsessionfactory().opensession(); getsessionfactory().opensession(); Transaction Transaction Transaction Transaction Session.beginTransaction(); Session.beginTransaction(); List List messages messages Session.find("from Message Message as as m order order by by m.text m.text asc"); asc"); System.out.println( System.out.println( messages.size() messages.size() + + " " message(s) message(s) found:" found:" ); ); for for ( ( Iterator Iterator iter iter messages.iterator(); messages.iterator(); iter.hasnext(); iter.hasnext(); ) ) Message Message message message (Message) (Message) iter.next(); iter.next(); System.out.println( System.out.println( message.gettext() message.gettext() ); ); Transaction.commit(); Transaction.commit(); Session.close(); Session.close(); Hibernate Query Language (HQL) equivale a select select m.message_id, m.message_id, m.message_text, m.message_text, m.next_message_id m.next_message_id from from MESSAGES MESSAGES m m order order by by m.message_text m.message_text asc asc 38
39 Hibernate Hello World <?xml <?xml version"1.0"?> version"1.0"?> <!DOCTYPE <!DOCTYPE hibernate-mapping hibernate-mapping PUBLIC PUBLIC "-//Hibernate/Hibernate "-//Hibernate/Hibernate Mapping Mapping DTD//EN" DTD//EN" " " XML Mapping <hibernate-mapping> <hibernate-mapping> <class <class name"hello.message name"hello.message table"messages"> table"messages"> <id <id name"id name"id column"message_id"> column"message_id"> <generator <generator class"increment"/> class"increment"/> </id> </id> <property <property name"text name"text column"message_text"/> column"message_text"/> <many-to-one <many-to-one name"nextmessage name"nextmessage cascade"all cascade"all column"next_message_id"/> column"next_message_id"/> </class> </class> </hibernate-mapping> </hibernate-mapping> 39
40 Hibernate Hello World Session Session session session getsessionfactory().opensession(); getsessionfactory().opensession(); Transaction Transaction tx tx session.begintransaction(); session.begintransaction(); // // 1 1 is is the the generated generated id id of of the the first first message message Message Message message message (Message) (Message) session.load( session.load( Message.class, Message.class, Long(1) Long(1) ); ); message.settext("greetings message.settext("greetings Earthling"); Earthling"); Message Message nextmessage nextmessage Message("Take Message("Take me me to to your your leader leader (please)"); (please)"); message.setnextmessage( message.setnextmessage( nextmessage nextmessage ); ); tx.commit(); tx.commit(); session.close(); session.close(); equivale a select select m.message_id, m.message_id, m.message_text, m.message_text, m.next_message_id m.next_message_id from from MESSAGES MESSAGES m m where where m.message_id m.message_id 1 1 insert insert into into MESSAGES MESSAGES (MESSAGE_ID, (MESSAGE_ID, MESSAGE_TEXT, MESSAGE_TEXT, NEXT_MESSAGE_ID) NEXT_MESSAGE_ID) values values (2, (2, 'Take 'Take me me to to your your leader leader (please)', (please)', null) null) update update MESSAGES MESSAGES set set MESSAGE_TEXT MESSAGE_TEXT 'Greetings 'Greetings Earthling', Earthling', NEXT_MESSAGE_ID NEXT_MESSAGE_ID 2 2 where where MESSAGE_ID MESSAGE_ID
41 Hibernate Architettura 4 Tipi API Interfacce chiamate dall applicazione per eseguire operazioni CRUD e Query (Session, Transaction, and Query) Interfacce chiamate per configurare hibernate (la principale è Hibernate) la principale è la classe Configuration Interfacce Callback che permettono alla applicazione reagire automaticamente ad eventi interni ad Hibernate (Interceptor, Lifecycle, Validatable Interfacce che permettono l estensione delle funzionalità mapping Hibernate ( UserType, CompositeUserType, IdentifierGenerator) 41
42 Hibernate Architettura Interfaccia Session Il concetto Session Hibernate si pone tra quello connection e transaction. Una session è una cache oggetti caricati relativamente ad una unità lavoro Interfaccia SessionFactory L applicazione ottiene una istanza Session da un SessionFactory. Esiste una SessionFactory per ogni database La SessionFactory esegue il caching istruzioni SQL e metadati Interfaccia Configuration L oggetto Configuration è usato per configurare Hibernate. L applicazione usa una istanza Configuration per recuperare la posizione dei documenti mapping e delle proprietà e successivamente crea la SessionFactory Interfaccia Transaction E opzionale: si può decidere gestire le transazioni ad hoc nel proprio coce. Una interfaccia Transaction astrae l applicazione dal particolare tipo tecnologia usata per le transazioni: JDBC, JTA UserTransaction, o CORBA transaction Interfacce Query e Criteria L interfaccia Query permette eseguire query. Le query possono essere scritte in HQL o nel aletto SQL del DB riferimento. L oggetto Query è usato per effettuare il bind dei parametri della query, limitare il numero dei risultati ritornati dalla query ed eseguire la query. L interfaccia Criteria è simile; permette creare ed eseguire query objectoriented 42
43 Managed Env VS Non Managed Env Managed Environment Resource Pool (es: db connection), Transazionalità e Sicurezza sono gestiti in modo chiarativo Application Server come Jboss; Glassfish; WebSphere; WebLogic forniscono un managed environment Non Managed Environment Fornisce semplicemente la gestione delle richieste concorrenti (Servlet Container come TomCat) Per le connessioni si utilizza JDBC e Transazionalità e Sicurezza sono sviluppati nell applicazione Hibernate può essere usato in entrambi gli ambienti Nel seguito ci si riferisce al Non Managed Environment 43
44 Hibernate Startup Startup Hibernate Localizzare il file mapping tramite l oggetto Configuration Creare un SessionFactory Regole 1. Il file mapping (Message.hbm.xml) deve essere visibile nel CLASSPATH 2. Per convenzione 1 map file per classe (è possibile invocare più volte il metodo addresource per caricarli tutti) 3. Per impostare le configurazioni 3 alternativa java -Dpropertyvalue. file hibernate.properties nel classpath. Tag <property> in hibernate.cfg.xml nel classpath. Equivalente Equivalente con con il il method method chaining chaining Configuration Configuration cfg cfg Configuration(); Configuration(); cfg.addresource("hello/message.hbm.xml"); cfg.addresource("hello/message.hbm.xml"); cfg.setproperties( cfg.setproperties( System.getProperties() System.getProperties() ); ); SessionFactory SessionFactory sessions sessions cfg.buildsessionfactory(); cfg.buildsessionfactory(); Configuration Configuration cfg cfg Configuration() Configuration().addResource("hello/Message.hbm.xml").addResource("hello/Message.hbm.xml").setProperties(System.getProperties()).setProperties(System.getProperties()).buildSessionFactory();.buildSessionFactory(); 44
45 Connection Pool Supporto al connection pool open source C3P0 (altri supportati sono Apache DBCP e Proxool) Senza Senza Hibernate Hibernate Con Con Hibernate Hibernate hibernate.connection.driver_class hibernate.connection.driver_class org.postgresql.driver org.postgresql.driver hibernate.connection.url hibernate.connection.url jdbc:postgresql://localhost/auctiondb jdbc:postgresql://localhost/auctiondb hibernate.connection.username hibernate.connection.username auctionuser auctionuser hibernate.connection.password hibernate.connection.password secret secret hibernate.alect hibernate.alect net.sf.hibernate.alect.postgresqldialect net.sf.hibernate.alect.postgresqldialect File File hibernate.properties hibernate.properties hibernate.c3p0.min_size5 hibernate.c3p0.min_size5 hibernate.c3p0.max_size20 hibernate.c3p0.max_size20 hibernate.c3p0.timeout300 hibernate.c3p0.timeout300 hibernate.c3p0.max_statements50 hibernate.c3p0.max_statements50 hibernate.c3p0.idle_test_period3000 hibernate.c3p0.idle_test_period
46 Caso Stuo: Modello Dominio-Aste Online 1 1 Passo: Passo: Disegnare Disegnare il il Modello Modello Dominio Dominio 46
47 Caso Stuo: Modello Dominio-Aste Online 2 2 Passo: Passo: Progettare Progettare i i POJO POJO (o (o JavaBean) JavaBean) class class User User implements implements Serializable Serializable String String username; username; Address Address address; address; User() User() String String getusername() getusername() username; username; setusername(string setusername(string username) username) this.username this.username username; username; Address Address getaddress() getaddress() address; address; setaddress(address setaddress(address address) address) this.address this.address address; address; MonetaryAmount MonetaryAmount calcshippingcosts(address calcshippingcosts(address fromlocation) fromlocation) Impl. Impl. Serializable Serializable Setter/Getter Setter/Getter Business Business Method Method 47
48 Caso Stuo: Modello Dominio-Aste Online 3 3 Passo: Passo: Progettare Progettare le le associazioni associazioni class class Category Category implements implements Serializable Serializable String String name; name; Category Category parentcategory; parentcategory; Set Set childcategories childcategories HashSet(); HashSet(); Category() Category() setname(string setname(string name) name) this.name this.name name; name; Set Set getchildcategories() getchildcategories() childcategories; Coce childcategories; Coce Scaffolng Scaffolng setchildcategories(set setchildcategories(set childcategories) childcategories) this.childcategories this.childcategories childcategories; childcategories; Category Category getparentcategory() getparentcategory() parentcategory; parentcategory; setparentcategory(category setparentcategory(category parentcategory) parentcategory) this.parentcategory this.parentcategory parentcategory; parentcategory; 48
49 Caso Stuo: Modello Dominio-Aste Online 3 3 Passo: Passo: Progettare Progettare le le associazioni associazioni ( aggiungere ( aggiungere elementi) elementi) Category Category aparent aparent Category(); Category(); Category Category achild achild Category(); Category(); achild.setparentcategory(aparent); achild.setparentcategory(aparent); aparent.getchildcategories().add(achild); aparent.getchildcategories().add(achild); Coce Coce Scaffolng Scaffolng 3 3 Passo: Passo: Progettare Progettare associazioni associazioni class class Category Category Set Set items items HashSet(); HashSet(); Set Set getitems() getitems() items; items; setitems(set setitems(set items) items) this.items this.items items; items; Coce Coce Scaffolng Scaffolng Categoria Categoria > > Item Item 49
50 Caso Stuo: Modello Dominio-Aste Online 3 3 Passo: Passo: Progettare Progettare le le associazioni associazioni class class Item Item String String name; name; String String description; description; Set Set categories categories HashSet(); HashSet(); Set Set getcategories() getcategories() Coce categories; Coce Scaffolng Scaffolng categories; Item Item > > Categoria Categoria setcategories(set setcategories(set categories) categories) this.categories this.categories categories; categories; addcategory(category addcategory(category category) category) if if (category (category null) null) throw throw IllegalArgumentException("Null IllegalArgumentException("Null category"); category"); category.getitems().add(this); category.getitems().add(this); categories.add(category); categories.add(category); 50
51 Caso Stuo: Modello Dominio-Aste Online 4 4 Passo: Passo: Definire Definire i i metadata metadata <?xml <?xml version"1.0"?> version"1.0"?> <!DOCTYPE <!DOCTYPE hibernate-mapping hibernate-mapping PUBLIC PUBLIC "-//Hibernate/Hibernate "-//Hibernate/Hibernate Mapping Mapping DTD//EN" DTD//EN" " " <hibernate-mapping> <hibernate-mapping> <class <class name"org.hibernate.auction.model.category name"org.hibernate.auction.model.category table"category"> table"category"> <id <id name"id name"id column"category_id column"category_id type"long"> type"long"> <generator <generator class"native"/> class"native"/> </id> </id> <property <property name"name name"name column"name column"name type"string"/> type"string"/> </class> </class> </hibernate-mapping> </hibernate-mapping> 51
52 Bibliografia Hibernate in Action - CHRISTIAN BAUER-GAVIN KING Manning 52
esempio hello world Dott. Doria Mauro
Hibernate esempio hello world Dott. Doria Mauro doriamauro@gmail.com Presentiamo un primo esempio che consente di gestire un messaggio di testo. Lo scopo è quello di storare il messaggio hello world sul
DettagliProgrammazione Java Avanzata Spring - JDBC
Programmazione Java Avanzata Spring - JDBC Ing. Gianluca Caminiti Riferimenti Spring http://www.springsource.org/ (scaricate il reference) Beginning Spring 2 - From Novice to Professional. APress. 2008
DettagliPROGETTAZIONE E SVILUPPO DI UN. Relatore: Studente: Paolo Merialdo Valerio Barbagallo
PROGETTAZIONE E SVILUPPO DI UN SIMULATORE ECONOMICO FISCALE Relatore: Studente: Paolo Merialdo Valerio Barbagallo Sommario il problema: gestione e ottimizzazione del bilancio piattaforma J2EE e framework
DettagliConfigurazione di base. Dott. Doria Mauro doriamauro@gmail.com
Hibernate Configurazione di base Dott. Doria Mauro doriamauro@gmail.com I file di configurazione Hibernate prevede l uso dei file di configurazione formato XML. I principali file sono: Un file di configurazione
DettagliMappare il DB senza XML. Introduzione alle annotation di Hibernate3
Introduzione alle annotation di Hibernate3 a cura di Lucio Benfante Hibernate Hibernate è un framework che realizza un object/relational mapping (ORM) fra oggetti Java e strutture di un database relazionale
DettagliArchitettura MVC-2: i JavaBeans
Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con
DettagliSiti web centrati sui dati Architettura MVC-2: i JavaBeans
Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con
DettagliArchitettura MVC-2 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
Architettura MVC-2 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 Verso l architettura MVC-2 2 Il secondo passo verso l architettura MVC-2 è quello di separare il controllo dell
DettagliImplementazione 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
DettagliPROGRAMMA CORSO Analista Programmatore JAVA - ORACLE
PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE 1. JAVA 1.1 Introduzione a Java Introduzione Cosa è Java 1.2 Sintassi e programmazione strutturata variabili e metodi tipi di dati, array operatori
DettagliLaboratorio di Basi di Dati
Laboratorio di Basi di Dati Docente: Alberto Belussi Lezione 9 Architettura Model-View-Controller (MVC) Adottando l'architettura MVC e la tecnologia Servlet-JSP, un'applicazione web può essere realizzata
DettagliIntroduzione al mondo della persistenza. Dott. Doria Mauro doriamauro@gmail.com
Hibernate Introduzione al mondo della persistenza Dott. Doria Mauro doriamauro@gmail.com La questione della persistenza Il modo dei database è complesso e le tecniche e le tecnologie sono molte. Per anni
DettagliBreve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida
Breve introduzione curata da Alessandro Benedetti Struts2-Introduzione e breve guida 22-11- 2008 1 Struts 2 Costruisci,attiva e mantieni! Apache Struts 2 è un framework elegante ed estensibile per creare
DettagliCORSO DI PROGRAMMAZIONE JAVA
CORSO DI PROGRAMMAZIONE JAVA Corso di Programmazione Java Standard Edition ( MODULO A) OBIETTIVI ll corso ha come obiettivo quello di introdurre la programmazione a oggetti (OOP) e di fornire solide basi
DettagliSWIM 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
DettagliObject-Relational Mapping
Object-Relational Mapping Versione Preliminare Antonella Poggi Dipartimento di informatica e Sistemistica Sapienza Università di Roma Progetto di Applicazioni Software Anno accademico 2008-2009 Questi
DettagliJ2EE (o JEE): Framework Java per lo sviluppo di applicazioni WEB Enterprise, che vivono in rete e che siano accessibili attraverso browser.
Il Pattern MVC J2EE (o JEE): Framework Java per lo sviluppo di applicazioni WEB Enterprise, che vivono in rete e che siano accessibili attraverso browser. Il famework Sun J2EE Component, Container e Connector:
DettagliIl Pattern MVC nei Framework di sviluppo per applicazioni Web. Analisi e comparazione di SPRING MVC Framework e ASP.NET MVC Framework.
tesi di laurea Il Pattern MVC nei Framework di sviluppo per applicazioni Web. Analisi e comparazione di SPRING MVC Framework e ASP.NET MVC Framework. Anno Accademico 2008/2009 relatore Ch.mo prof. Porfirio
DettagliCandidato: Luca Russo Docente: Prof. Raffaele Montella. 27 Marzo 2013
e di e di Candidato: Luca Russo Docente: Corso di laurea in Informatica Applicata Facoltá di Scienze e Tecnologie Programmazione su Reti 27 Marzo 2013 Traccia d esame Sviluppare multitier con disaccoppiamento
DettagliGenLApp Generazione Lista di Applicazioni. Design Patterns. Classi Essenziali. Modellazione Dati. Progettazione della Linea di Prodotti
Progettazione della Linea di Prodotti GenLApp Generazione Lista di Applicazioni Progettazione della Linea di Prodotti Classi Essenziali Responsabilità sui 3 Livelli Architetturali Descrizione delle Responsabilità
DettagliUNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli
UNIVERSITA DI FIRENZE Facoltà di Ingegneria Persistenza Applicazioni Enterprise Uso dei modelli 1 IL problema della persistenza APPLICAZIONE (programmi) (oggetti) DATI PERSISTENTI (file, record) (basi
DettagliConsidera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali
Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Progettazione OO E. TINELLI Punto di Partenza Il modello di analisi E una rappresentazione minima del
DettagliJDBC versione base. Le classi/interfacce principali di JDBC
JDBC versione base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte uno dei pregi è la completa indipendenza del codice
DettagliJUG Ancona Italy Spring Framework
JUG Ancona Italy Spring Framework Andrea Del Bene Jug Marche Spring: perché e nato e perché lo voglio imparare? Quando si decide di investire in un nuova tecnologia è indispensabile capire il valore aggiunto
DettagliL architettura MVC (Model- View-Controller) Introduzione
L architettura MVC (Model- View-Controller) Introduzione Architettura MCV L architettura MVC è un insieme di regole per strutturare un sito-web dinamico. Queste regole complicano la struttura del sito,
DettagliObject Oriented Programming
OOP Object Oriented Programming Programmazione orientata agli oggetti La programmazione orientata agli oggetti (Object Oriented Programming) è un paradigma di programmazione Permette di raggruppare in
DettagliNon si deve fare ALCUN riferimento alla parte specifica di JDBC.
Un applicazione per la quale sia fondamentale l indipendenza dal Database può essere scritta in Java usando le specifiche. (Package java.sql) Non devono essere usate chiamate specifiche del database: Si
DettagliFramework 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
Dettagli1 Applicazione J2EE sul SAP WAS con SAP NWDS http://desvino.altervista.org
1 Applicazione J2EE sul SAP WAS con SAP NWDS http://desvino.altervista.org Applicazione J2EE sul SAP WAS con SAP NWDS. Il SAP Web Application Server fornisce un framework integrato per lo sviluppo e l
DettagliGESTIONE DEI PROCESSI
Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto
DettagliIngegneria del Software. Introduzione ai pattern
Ingegneria del Software Introduzione ai pattern 1 Definizione di pattern [dal [dal vocabolario vocabolario Garzanti] Garzanti] Alcuni esempi: Pattern architetturale Pattern di circuito stampato Pattern
DettagliLe transazioni. Dott. Doria Mauro doriamauro@gmail.com
Hibernate Le transazioni Dott. Doria Mauro doriamauro@gmail.com Introduzione La demarcazione delle transazioni può essere fatta: In maniera programmatica: demarcazione all interno del codice applicativo.
DettagliProgrammazione server-side: Java Servlet
Programmazione server-side: Java Servlet Corso di Applicazioni Telematiche A.A. 2006-07 Lezione n.11 parte II Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Cos
DettagliProgettazione : Design Pattern Creazionali
Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali
DettagliJDBC di base. Le classi/interfacce principali di JDBC
JDBC di base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte completa indipendenza del codice dal tipo di database o di
DettagliProgrammazione Java Avanzata
Programmazione Java Avanzata Introduzione a Servlet e Struts 2 Ing. Giuseppe D'Aquì 1 Testi Consigliati Java Enterprise in a nutshell, 3 rd edition (O'Reilly) Struts 2 in Action Brown, Davis, Stanlick
DettagliAutomazione Industriale 4- Ingegneria del Software
Automation Robotics and System CONTROL Università degli Studi di Modena e Reggio Emilia Automazione Industriale 4- Ingegneria del Software Cesare Fantuzzi (cesare.fantuzzi@unimore.it) Ingegneria Meccatronica
DettagliCorso Online. We Train Italy info@wetrainitaly.it
Corso Online Programmatore Java New Edition We Train Italy info@wetrainitaly.it Programma Generale del Corso Programmatore Java New Edition 1. Introduzione al corso Java da 0 al web Presentazione del corso
DettagliJDBC per l accesso Java a DB. Tito Flagella tito@link.it
JDBC per l accesso Java a DB Tito Flagella tito@link.it JDBC fornisce una libreria standard per l accesso a database relazionali Non è un acronimo ufficiale ma è comunemente interpretato come Java DataBase
DettagliACADEMY SVILUPPATORE JAVA
ACADEMY SVILUPPATORE JAVA PERCORSO ACADEMY SVILUPPATORE JAVA DESCRIZIONE Al termine del percorso di formazione i partecipanti potranno utilizzare con padronanza i linguaggi di programmazione Java. Inoltre
DettagliApplicazione: GAS - Gestione AcceSsi
Riusabilità del software - Catalogo delle applicazioni Gestione ICT Applicazione: GAS - Gestione AcceSsi Amministrazione: Consiglio Nazionale delle Ricerche (CNR) Responsabile dei sistemi informativi Nome
DettagliVolumi di riferimento
Simulazione seconda prova Esame di Stato Gestione di un centro agroalimentare all ingrosso Parte prima) Un nuovo centro agroalimentare all'ingrosso intende realizzare una base di dati per l'attività di
Dettagli1 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages
1 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages Le JSP DynPages sono un utile strumento, fornito da SAP Netweaver, per una gestione più evoluta di event handling e session
DettagliUniversità degli Studi "Roma Tre" Dipartimento di Informatica ed automazione. Facoltà di Ingegneria. Laurea Magistrale in Ingegneria Informatica
Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione Facoltà di Ingegneria Laurea Magistrale in Ingegneria Informatica Tesi di Laurea Sistema informativo per la gestione dei processi
Dettagli1 EJB e Portal Component Object http://desvino.altervista.org
1 EJB e Portal Component Object http://desvino.altervista.org In questo tutorial studiamo come sfruttare la tecnologia EJB, Enterprise JavaBean, all interno del SAP Netweaver Portal. In breve, EJB è un
Dettagli12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
DettagliTecnologie di Sviluppo per il Web
Tecnologie di Sviluppo per il Web Applicazioni Web J2EE: Java Servlet Parte a versione 3.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca
Dettagli!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9
!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&)!"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9 Slide 1 Paradigmi di Programmazione! Un linguaggio supporta uno stile di programmazione se
DettagliComponenti 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
DettagliDBMS (Data Base Management System)
Cos'è un Database I database o banche dati o base dati sono collezioni di dati, tra loro correlati, utilizzati per rappresentare una porzione del mondo reale. Sono strutturati in modo tale da consentire
DettagliReingegnerizzazione di un Content Management System verso l accessibilità secondo la normativa italiana
Università degli Studi di Bologna Sede di Cesena FACOLTÀ À DI SCIENZE MATEMATICHE FISICHE E NATURALI Corso di Laurea in Scienze dell Informazione Reingegnerizzazione di un Content Management System verso
DettagliJDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC
JDBC: Introduzione Java Database Connectivity (JDBC): parte 1 Gianluca Moro DEIS - Università di Bologna gmoro@deis.unibo.it Java Database Connectivity è il package Java per l accesso a database relazionali
DettagliCORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity
CORSO DI ALGORITMI E PROGRAMMAZIONE JDBC Java DataBase Connectivity Anno Accademico 2002-2003 Accesso remoto al DB Istruzioni SQL Rete DataBase Utente Host client Server di DataBase Host server Accesso
DettagliProgettazione: 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
DettagliProgettaz. e sviluppo Data Base
Progettaz. e sviluppo Data Base! Progettazione Basi Dati: Metodologie e modelli!modello Entita -Relazione Progettazione Base Dati Introduzione alla Progettazione: Il ciclo di vita di un Sist. Informativo
DettagliProgrammare in ambiente Java Enterprise: l offerta formativa di Infodue
Tecnologia e professionalità al servizio del business, dal 1986 Programmare in ambiente Java Enterprise: l offerta Copyright 2006 Infodue S.r.l. La programmazione nell era era del Web Computing L evoluzione
DettagliIntroduzione JDBC interfaccia java.sql driver caricare i driver
J D B C DISPENSE Introduzione JDBC (Java Database Connectivity) è un interfaccia completamente Java utilizzata per eseguire istruzioni SQL sui database. L'API JDBC si trova nel pacchetto java.sql; contiene
DettagliMODEL-VIEW-CONTROLLER PROBLEMA
MODEL VIEW CONTROLLER DESIGN PATTERN MODEL-VIEW-CONTROLLER INGEGNERIA DEL SOFTWARE Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2013 2014 rcardin@math.unipd.it
DettagliCorso Analista Programmatore Java Corso Online Analista Programmatore Java
Corso Analista Programmatore Java Corso Online Analista Programmatore Java Accademia Futuro info@accademiafuturo.it Programma Generale del Corso Analista Programmatore Java Tematiche Trattate Modulo Uno
DettagliRiccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino
Integration Services Project SQL Server 2005 Integration Services Permette di gestire tutti i processi di ETL Basato sui progetti di Business Intelligence di tipo Integration services Project SQL Server
DettagliApplication Server per sviluppare applicazioni Java Enterprise
Application Server per sviluppare applicazioni Java Enterprise Con il termine Application Server si fa riferimento ad un contenitore, composto da diversi moduli, che offre alle applicazioni Web un ambiente
DettagliUNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli
UNIVERSITA DI FIRENZE Facoltà di Ingegneria Persistenza Applicazioni Enterprise Uso dei modelli 1 IL problema della persistenza APPLICAZIONE (programmi) (oggetti) DATI PERSISTENTI (file, record) (basi
DettagliArchitetture 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
DettagliGli EJB offrono vari vantaggi allo sviluppatore di una applicazione
Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione Un ambiente di esecuzione che gestisce o naming di oggetti, sicurezza, concorrenza, transazioni, persistenza, distribuzione oggetti (location
DettagliEsercitazioni di PROGETTAZIONE DEL SOFTWARE A.A. 2011-2012
Sapienza Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica Corso di Laurea in Ingegneria dei Sistemi Informatici
DettagliSOFTWARE MAINTENANCE DESIGN
SOFTWARE MAINTENANCE DESIGN INTRODUZIONE... 1 1.1 Identificazione della richiesta di modifica... 2 1.2 Assegnazione di un numero di identificazione alla Change Request... 2 1.3 Classificazione del tipo
DettagliLezione 9. Applicazioni tradizionali
Lezione 9 Applicazioni tradizionali Pag.1 Sommario Concetti trattati in questa lezione: SQL nel codice applicativo Cursori API native ODBC Pag.2 SQL nel codice applicativo I comandi SQL possono essere
DettagliSocket & RMI Ingegneria del Software - San Pietro
Socket & RMI Ingegneria del Software - San Pietro Socket È possibile trattare la comunicazione di rete allo stesso modo con cui è possibile trattare la lettura da file. La classe Socket rappresenta la
DettagliCorso analista programmatore Java. Corso analista programmatore Java Programma
Corso analista programmatore Java Programma 1.1 Obiettivo e modalità di fruizione L obiettivo del corso è di fornire le conoscenze tecniche e metodologiche per svolgere la professione di Programmatore
DettagliUna metodologia di progettazione di applicazioni web centrate sui dati
Una metodologia di progettazione di applicazioni web centrate sui dati 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 1 / 2 0 1 2 Progettazione logica di un sito web centrato sui dati Si
DettagliJDBC. A. Bechini 2004. Accesso a DataD con Java
JDBC Accesso a DataD atabase ase con Java Utilizzo di DB da applicazioni esterne Un DB contiene e gestisce dati, importanti per varie operazioni supportate da applicazioni software Come può un applicazione
DettagliLinguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java
DettagliProgetto di Basi di Dati e Multimidia Laboratorio Struttura dell applicazione web
Progetto di Basi di Dati e Multimidia Labtorio Struttura dell applicazione web 1 Introduzione La progettazione è stata sviluppata basandosi sul modello MVC-2 Server Centric. I moduli creati si possono
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Design Pattern: Storia Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Dettagli19. 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
DettagliThe Hitchhiker's Guide to testable code
The Hitchhiker's Guide to testable code semplici regole per scrivere codice semplice da testare Davide Cerbo - davidecerbo@gmail.com - JUG Roma Nicola Raglia - n.raglia@gmail.com - JUG Roma Non parleremo
DettagliSistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1
MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati
DettagliMECCANISMI E POLITICHE DI PROTEZIONE 13.1
MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati
DettagliSITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.
Progetto SITI Manuale Utente SITI-Reports ABACO S.r.l. ABACO S.r.l. C.so Umberto, 43 46100 Mantova (Italy) Tel +39 376 222181 Fax +39 376 222182 www.abacogroup.eu e-mail : info@abacogroup.eu 02/03/2010
DettagliOggetto: 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
Dettaglidesign patterns e GRASP
design patterns e GRASP 1 design patterns una coppia / particolarmente importante a cui viene dato un nome vengono espressi in un formato molto rigido, ad es. nome descrizione sintetica della descrizione
DettagliL ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo
Design Pattern L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo sviluppo dei programmi, il loro mantenimento,
DettagliUniversità degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A. 2014 2015. Esercitazione 08 DAO e Hibernate
Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web L-A A.A. 2014 2015 Esercitazione 08 DAO e Hibernate Agenda Pattern DAO e framework Hibernate progetto d'esempio relativo alla gestione
DettagliCaratteristiche principali. Contesti di utilizzo
Dalle basi di dati distribuite alle BASI DI DATI FEDERATE Antonella Poggi Dipartimento di Informatica e Sistemistica Antonio Ruberti Università di Roma La Sapienza Anno Accademico 2006/2007 http://www.dis.uniroma1.it/
DettagliTFS2010 Object Model Le build
TFS2010 Object Model Le build La Team Foundation Build è il pilastro dell infrastruttura di Visual Studio ALM che permette la compilazione autonoma del codice sorgente da parte di un server, eliminando
DettagliCMDBuild: un progetto open source di supporto alla gestione ICT (e non solo) Approfondimenti Tecnici. Francesco Zanitti Tecnoteca S.r.
1 1 CMDBuild: un progetto open source di supporto alla gestione ICT (e non solo) Approfondimenti Tecnici Francesco Zanitti Tecnoteca S.r.l 2 Modello di persistenza - 1 Com'è stato implementato CMDBuild
DettagliScaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»
Scaletta Estensioni UML per il Web Michele Zennaro 14-05-2004 Le applicazioni web Scopo di un estensione UML per il web Due punti di vista Uno più astratto Uno più vicino ai file fisici conclusivo Commenti
DettagliALLEGATO 1.1 PROFILI PROFESSIONALI
PROCEDURA APERTA PER L AFFIDAMENTO DEL SERVIZIO DI PROGETTAZIONE, ANALISI, SVILUPPO, MANUTENZIONE ADEGUATIVA, CORRETTIVA ED EVOLUTIVA DI SISTEMI INFORMATIVI BASATI SU TECNOLOGIE JAVA E PHP CIG. 56017538CE
DettagliProgrammazione a Oggetti Lezione 10. Ereditarieta
Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare
Dettagli13. Chain of Responsibility
Chain of Responsibility 92 13. Chain of Responsibility (GoF pag. 223) 13.1. Descrizione Consente di separare il mittente di una richiesta dal destinario, in modo di consentire a più di un oggetto di gestire
DettagliDesign 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
DettagliIntroduzione al Model-View-Controller (MVC)
Introduzione al Model-View-Controller (MVC) Maurizio Cozzetto 9 Luglio 2009 Indice 1 Model-View-Controller 1 1.1 Definizione.................................................. 1 1.2 Soluzione...................................................
DettagliConcetti di base di ingegneria del software
Concetti di base di ingegneria del software [Dalle dispense del corso «Ingegneria del software» del prof. A. Furfaro (UNICAL)] Principali qualità del software Correttezza Affidabilità Robustezza Efficienza
DettagliIndice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi
Indice generale OOA Analisi Orientata agli Oggetti Introduzione Analisi Metodi d' analisi Analisi funzionale Analisi del flusso dei dati Analisi delle informazioni Analisi Orientata agli Oggetti (OOA)
DettagliAlcuni Design Pattern in Java
Marco Faella Alcuni Design Pattern in Java basato su Progettazione del Software e Design Pattern in Java, di Cay Horstmann Pattern ITERATOR Contesto: 1) Un oggetto (aggregato) contiene altri oggetti (elementi)
DettagliSistemi informativi secondo prospettive combinate
Sistemi informativi secondo prospettive combinate direz acquisti direz produz. direz vendite processo acquisti produzione vendite INTEGRAZIONE TRA PROSPETTIVE Informazioni e attività sono condivise da
DettagliDispensa di database Access
Dispensa di database Access Indice: Database come tabelle; fogli di lavoro e tabelle...2 Database con più tabelle; relazioni tra tabelle...2 Motore di database, complessità di un database; concetto di
DettagliPag. 1 WIDE (I) josh: la piattaforma software per il KM. josh - Modello logico WIDE (II) josh - Modello fisico. Modello dei processi (I)
: la piattaforma software per il KM Nicolino Ambrosini it Consult WIDE (I) WIDE (Workflows on an Intelligent and Distribuited database Environment) E un progetto ESPRIT, il programma della Comunità Europea
DettagliIBM Software Demos The Front-End to SOA
Oggi, imprese piccole e grandi utilizzano software basato sull'architettura SOA (Service-Oriented Architecture), per promuovere l'innovazione, ottimizzare i processi aziendali e migliorare l'efficienza.
DettagliWorkFLow (Gestione del flusso pratiche)
WorkFLow (Gestione del flusso pratiche) Il workflow è l'automazione di una parte o dell'intero processo aziendale dove documenti, informazioni e compiti vengono passati da un partecipante ad un altro al
Dettagli