Open Source Frameworks

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Open Source Frameworks"

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

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

Dettagli

Programmazione Java Avanzata Spring - JDBC

Programmazione 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

Dettagli

PROGETTAZIONE E SVILUPPO DI UN. Relatore: Studente: Paolo Merialdo Valerio Barbagallo

PROGETTAZIONE 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

Dettagli

Configurazione di base. Dott. Doria Mauro doriamauro@gmail.com

Configurazione 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

Dettagli

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3

Mappare 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

Dettagli

Architettura MVC-2: i JavaBeans

Architettura 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

Dettagli

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti 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

Dettagli

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

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 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

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

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

PROGRAMMA 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

Dettagli

Laboratorio di Basi di Dati

Laboratorio 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

Dettagli

Introduzione al mondo della persistenza. Dott. Doria Mauro doriamauro@gmail.com

Introduzione 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

Dettagli

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

Breve 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

Dettagli

CORSO DI PROGRAMMAZIONE JAVA

CORSO 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

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

Object-Relational Mapping

Object-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

Dettagli

J2EE (o JEE): Framework Java per lo sviluppo di applicazioni WEB Enterprise, che vivono in rete e che siano accessibili attraverso browser.

J2EE (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:

Dettagli

Il Pattern MVC nei Framework di sviluppo per applicazioni Web. Analisi e comparazione di SPRING MVC Framework e ASP.NET MVC Framework.

Il 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

Dettagli

Candidato: Luca Russo Docente: Prof. Raffaele Montella. 27 Marzo 2013

Candidato: 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

Dettagli

GenLApp Generazione Lista di Applicazioni. Design Patterns. Classi Essenziali. Modellazione Dati. Progettazione della Linea di Prodotti

GenLApp 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à

Dettagli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli

UNIVERSITA 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

Dettagli

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali

Considera 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

Dettagli

JDBC versione base. Le classi/interfacce principali di JDBC

JDBC 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

Dettagli

JUG Ancona Italy Spring Framework

JUG 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

Dettagli

L architettura MVC (Model- View-Controller) Introduzione

L 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,

Dettagli

Object Oriented Programming

Object 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

Dettagli

Non si deve fare ALCUN riferimento alla parte specifica di JDBC.

Non 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

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

1 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 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

Dettagli

GESTIONE DEI PROCESSI

GESTIONE 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

Dettagli

Ingegneria del Software. Introduzione ai pattern

Ingegneria 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

Dettagli

Le transazioni. Dott. Doria Mauro doriamauro@gmail.com

Le 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.

Dettagli

Programmazione server-side: Java Servlet

Programmazione 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

Dettagli

Progettazione : Design Pattern Creazionali

Progettazione : 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

Dettagli

JDBC di base. Le classi/interfacce principali di JDBC

JDBC 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

Dettagli

Programmazione Java Avanzata

Programmazione 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

Dettagli

Automazione Industriale 4- Ingegneria del Software

Automazione 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

Dettagli

Corso Online. We Train Italy info@wetrainitaly.it

Corso 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

Dettagli

JDBC per l accesso Java a DB. Tito Flagella tito@link.it

JDBC 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

Dettagli

ACADEMY SVILUPPATORE JAVA

ACADEMY 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

Dettagli

Applicazione: GAS - Gestione AcceSsi

Applicazione: 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

Dettagli

Volumi di riferimento

Volumi 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

Dettagli

1 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages

1 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

Dettagli

Università 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 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

Dettagli

1 EJB e Portal Component Object http://desvino.altervista.org

1 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

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - 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,

Dettagli

Tecnologie di Sviluppo per il Web

Tecnologie 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 !"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&)!"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9 Slide 1 Paradigmi di Programmazione! Un linguaggio supporta uno stile di programmazione se

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

DBMS (Data Base Management System)

DBMS (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

Dettagli

Reingegnerizzazione di un Content Management System verso l accessibilità secondo la normativa italiana

Reingegnerizzazione 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

Dettagli

JDBC: 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. 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

Dettagli

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

CORSO 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

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

Progettaz. e sviluppo Data Base

Progettaz. 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

Dettagli

Programmare in ambiente Java Enterprise: l offerta formativa di Infodue

Programmare 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

Dettagli

Introduzione JDBC interfaccia java.sql driver caricare i driver

Introduzione 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

Dettagli

MODEL-VIEW-CONTROLLER PROBLEMA

MODEL-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

Dettagli

Corso Analista Programmatore Java Corso Online Analista Programmatore Java

Corso 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

Dettagli

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Riccardo 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

Dettagli

Application Server per sviluppare applicazioni Java Enterprise

Application 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

Dettagli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli

UNIVERSITA 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

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

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione

Gli 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

Dettagli

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A. 2011-2012

Esercitazioni 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

Dettagli

SOFTWARE MAINTENANCE DESIGN

SOFTWARE 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

Dettagli

Lezione 9. Applicazioni tradizionali

Lezione 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

Dettagli

Socket & RMI Ingegneria del Software - San Pietro

Socket & 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

Dettagli

Corso analista programmatore Java. Corso analista programmatore Java Programma

Corso 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

Dettagli

Una metodologia di progettazione di applicazioni web centrate sui dati

Una 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

Dettagli

JDBC. A. Bechini 2004. Accesso a DataD con Java

JDBC. 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

Dettagli

Linguaggi 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. 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

Dettagli

Progetto di Basi di Dati e Multimidia Laboratorio Struttura dell applicazione web

Progetto 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

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione 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)

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

The Hitchhiker's Guide to testable code

The 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

Dettagli

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

Sistemi 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

Dettagli

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

MECCANISMI 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

Dettagli

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

SITI-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

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

design patterns e GRASP

design 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

Dettagli

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

L 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,

Dettagli

Università 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 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

Dettagli

Caratteristiche principali. Contesti di utilizzo

Caratteristiche 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/

Dettagli

TFS2010 Object Model Le build

TFS2010 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

Dettagli

CMDBuild: un progetto open source di supporto alla gestione ICT (e non solo) Approfondimenti Tecnici. Francesco Zanitti Tecnoteca S.r.

CMDBuild: 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

Dettagli

Scaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»

Scaletta. 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

Dettagli

ALLEGATO 1.1 PROFILI PROFESSIONALI

ALLEGATO 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

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione 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

Dettagli

13. Chain of Responsibility

13. 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

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

Introduzione al Model-View-Controller (MVC)

Introduzione 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...................................................

Dettagli

Concetti di base di ingegneria del software

Concetti 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

Dettagli

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Indice 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)

Dettagli

Alcuni Design Pattern in Java

Alcuni 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)

Dettagli

Sistemi informativi secondo prospettive combinate

Sistemi 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

Dettagli

Dispensa di database Access

Dispensa 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

Dettagli

Pag. 1 WIDE (I) josh: la piattaforma software per il KM. josh - Modello logico WIDE (II) josh - Modello fisico. Modello dei processi (I)

Pag. 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

Dettagli

IBM Software Demos The Front-End to SOA

IBM 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.

Dettagli

WorkFLow (Gestione del flusso pratiche)

WorkFLow (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