Progetto presentato dai ragazzi del Corso di comportamento Manageriale (Prof. Federico Niccolini, Facoltà di Economia, Università di Macerata) in occasione del laboratorio di studio in collaborazione con il Gruppo Loccioni. Obiettivo: immaginare i nuovi scenari di progetto in ambito di sostenibilità a cui il Gruppo Loccioni potrà dedicare energia e sviluppo di innovazione nei prossimi anni.
Apache Maven è un software per la gestione di progetti. Basato sul concetto di project object model (POM), un punto centralizzato di informazione, Maven può gestire la build, i report la documentazione, e molto altro.
Progetto presentato dai ragazzi del Corso di comportamento Manageriale (Prof. Federico Niccolini, Facoltà di Economia, Università di Macerata) in occasione del laboratorio di studio in collaborazione con il Gruppo Loccioni. Obiettivo: immaginare i nuovi scenari di progetto in ambito di sostenibilità a cui il Gruppo Loccioni potrà dedicare energia e sviluppo di innovazione nei prossimi anni.
Apache Maven è un software per la gestione di progetti. Basato sul concetto di project object model (POM), un punto centralizzato di informazione, Maven può gestire la build, i report la documentazione, e molto altro.
Il tuo team "agile" scrive codice "flaccido"? Forse scrum non bastaStefano Muro
Essere agli vuol dire adattarsi velocemente ai cambiamenti che il mondo esterno ci impone.
Scrum ti consente di cambiare velocemente le priorità, modificare velocemente i tuoi requisiti di business e migliorare i tuoi processi, ma il sw che stai scrivendo è altrettanto “adattivo” e in grado di accogliere i cambiamenti?
Se così non fosse presto la tua “agilità” verrà ostacolata dalla “flaccidità” del tuo codice e dovrai porvi rimedio.
Vedremo insieme come accorgersene il prima possibile e quali misure adottare.
Enterprise Applications - Angular Day 2018Paolo Galfione
Angular 6 introduce il concetto di workspace per la creazione di applicazioni Angular aziendali complesse e articolate. Grazie ad un approccio basato sul pattern mono-repo un workspace può contenere più applicazioni e librerie condivisibili tra le applicazioni stesse. Vedremo come progettare un workspace e sfruttare la potenza dei nuovi @angular-devkit/schematics per automatizzare la generazione di codice applicativo pronto all’uso
Strategie per applicazioni web prima o meglio dell'app nativaDiego La Monica
Il principio di Archimede afferma che ogni corpo immerso [...] in un fluido riceve
una spinta verticale dal basso verso l'alto, uguale per intensità al peso del fluido
che occupa nel volume spostato.
Durante questo seminario sono stati analizzati i passaggi fondamentali per affiancare ad un comunissimo sito web, una Web App, evidenziando le criticità e coniugando le giuste regole di User Experience, Responsive Web Design e Mobile Centric Design.
una scuola moderna non può appoggiare la didattica sul software proprietario, quando col software libero si può avere disponibile una mole enorme di programmi per tutte le discipline. E cun vantaggio enorme è fdato che questi programmi possono funzionare anche su computer un po' datati.
"Configuration Manager: il ruolo nel ciclo di vita del software" by Omar RossiniThinkOpen
Omar Rossini ha presentato tutti gli aspetti principali del lavoro di Configuration Manager: dall'analisi della metodologia DevOps in contesto Agile, alle tecniche di automazione dei rilasci e le best practice del CM.
Slides del webinar Abstract "Pregi e difetti dei principali CMS open source", tenuto da Carlo Frinolli.
Una panoramica su Plone, WordPress, Drupal, ed Expression Engine.
Wpc2019 - Distruggere DevOps, la storia di un vero teamAlessandro Alpi
Consigli per evitare la distruzione della migrazione culturale verso DevOps. Vedremo un team con "attori" importanti provare a migrare verso buone pratiche e capiremo quanto è difficile arrivare, ma semplice distruggere tutto.
Come mettere in sicurezza le applicazioni legacy, un approccio pragmaticoAntonio Parata
In questa presentazione viene descritto un possibile approccio alla messa insicurezza di codice legacy attraverso l'utilizzo di svariati progetti OWASP.
La programmazione orientata agli oggetti non è quella che vi hanno insegnato a scuola!
Vedremo assieme qual'è il significato di questo paradigma di programmazione, spesso frainteso, e i nuovi obiettivi che ci permette di raggiungere nello sviluppo software.
Pregi e difetti dei principali CMS Open Sourcenois3
Una panoramica delle tecnologie open source a disposizione di chi ha necessità di fare gestione del contenuto on line in un mix di canali con governance semplici o complesse (workflow editoriali).
More Related Content
Similar to Talk codemotion 2013 - La sostenibile leggerezza di Spring
Il tuo team "agile" scrive codice "flaccido"? Forse scrum non bastaStefano Muro
Essere agli vuol dire adattarsi velocemente ai cambiamenti che il mondo esterno ci impone.
Scrum ti consente di cambiare velocemente le priorità, modificare velocemente i tuoi requisiti di business e migliorare i tuoi processi, ma il sw che stai scrivendo è altrettanto “adattivo” e in grado di accogliere i cambiamenti?
Se così non fosse presto la tua “agilità” verrà ostacolata dalla “flaccidità” del tuo codice e dovrai porvi rimedio.
Vedremo insieme come accorgersene il prima possibile e quali misure adottare.
Enterprise Applications - Angular Day 2018Paolo Galfione
Angular 6 introduce il concetto di workspace per la creazione di applicazioni Angular aziendali complesse e articolate. Grazie ad un approccio basato sul pattern mono-repo un workspace può contenere più applicazioni e librerie condivisibili tra le applicazioni stesse. Vedremo come progettare un workspace e sfruttare la potenza dei nuovi @angular-devkit/schematics per automatizzare la generazione di codice applicativo pronto all’uso
Strategie per applicazioni web prima o meglio dell'app nativaDiego La Monica
Il principio di Archimede afferma che ogni corpo immerso [...] in un fluido riceve
una spinta verticale dal basso verso l'alto, uguale per intensità al peso del fluido
che occupa nel volume spostato.
Durante questo seminario sono stati analizzati i passaggi fondamentali per affiancare ad un comunissimo sito web, una Web App, evidenziando le criticità e coniugando le giuste regole di User Experience, Responsive Web Design e Mobile Centric Design.
una scuola moderna non può appoggiare la didattica sul software proprietario, quando col software libero si può avere disponibile una mole enorme di programmi per tutte le discipline. E cun vantaggio enorme è fdato che questi programmi possono funzionare anche su computer un po' datati.
"Configuration Manager: il ruolo nel ciclo di vita del software" by Omar RossiniThinkOpen
Omar Rossini ha presentato tutti gli aspetti principali del lavoro di Configuration Manager: dall'analisi della metodologia DevOps in contesto Agile, alle tecniche di automazione dei rilasci e le best practice del CM.
Slides del webinar Abstract "Pregi e difetti dei principali CMS open source", tenuto da Carlo Frinolli.
Una panoramica su Plone, WordPress, Drupal, ed Expression Engine.
Wpc2019 - Distruggere DevOps, la storia di un vero teamAlessandro Alpi
Consigli per evitare la distruzione della migrazione culturale verso DevOps. Vedremo un team con "attori" importanti provare a migrare verso buone pratiche e capiremo quanto è difficile arrivare, ma semplice distruggere tutto.
Come mettere in sicurezza le applicazioni legacy, un approccio pragmaticoAntonio Parata
In questa presentazione viene descritto un possibile approccio alla messa insicurezza di codice legacy attraverso l'utilizzo di svariati progetti OWASP.
La programmazione orientata agli oggetti non è quella che vi hanno insegnato a scuola!
Vedremo assieme qual'è il significato di questo paradigma di programmazione, spesso frainteso, e i nuovi obiettivi che ci permette di raggiungere nello sviluppo software.
Pregi e difetti dei principali CMS Open Sourcenois3
Una panoramica delle tecnologie open source a disposizione di chi ha necessità di fare gestione del contenuto on line in un mix di canali con governance semplici o complesse (workflow editoriali).
Similar to Talk codemotion 2013 - La sostenibile leggerezza di Spring (20)
Talk codemotion 2013 - La sostenibile leggerezza di Spring
1. Daniele La Nave
La sostenibile leggerezza di Spring!
Ovvero, come migliorare il nostro team e la nostra
produttività utilizzando Spring Framework.
dlanave@extrema-sistemas.com
Spring Certified Trainer & Specialist @ Extrema Sistemas
2. Capitolo 1
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Come portare il nostro team,bendato e con i
tappi alle orecchie, alla piena
comprensione dell’ OOP utilizzando Spring
3. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
…..eh ?
Perché bendato e con i tappi alle orecchie ?
4. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Risposte:
1. Capita, quando si realizza un software, di essere
concentrati a soddisfare i requisiti del cliente e meno
attenti alle linee guida ed i concetti legati ad una buona
progettazione dell’architettura
5. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Risposte:
2. Un’ azienda deve, necessariamente, essere produttiva,
competitiva, ed in grado di far fronte alle eventuali
“turbe” dei clienti. Es:
“Vorrei un’ icona di color blu sul mio desktop…
…che, se cliccata, scateni il lancio di ordigno di
fine di mondo!!!”
6. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Risposte:
3. “Lo voglio pronto per la prossima settimana! Anzi, lo
voglio pronto per domani!!”
7. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Ironia a parte, quanto descritto fin ora può causare
dei pericolosi corto-circuiti tra reparti dell’azienda:
Settore Commerciale Vs. Settore Sviluppo
Oppure, in altri termini, una volta “rotto” il circuito
“Fighetti” Vs. “Autistici”
8. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
In realtà, tutti e due i reparti sono “vitali” per la
salute di un’ azienda perché:
• Inefficienza dei commerciali = Niente clienti
• Inefficienza degli sviluppatori = Niente prodotti
Bisogna quindi difendere l’operato di tutti i reparti!
(Siamo tutti sulla stessa barca, mai dimenticarlo!!)
9. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
...e quindi ?
Se i tempi sono corti ed i requisiti “complessi”,
come possiamo far contenti tutti ?
10. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
I principi fondamentali per l’OOP ci dicono che dovremmo
evitare 3 caratteristiche che denotano il “cattivo” design di
un’ applicazione:
1. Rigidità
(il cambiamento di un requisito richiede il cambiamento di molte parti del sistema)
2. Fragilità
(il cambiamento di un requisito interrompe il corretto funzionamento del sistema)
3. Immobilità
(impossibilità o difficoltà di riutilizzo delle stesse componenti su più di un’ applicazione)
11. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Per evitare queste caratteristiche di “bad design” sono state
definite, nel corso degli anni, delle linee guida per aiutarci a
sviluppare software che non risentano di tali sintomi,
ovvero:
The Software Design Principles
12. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Dependency Inversion Interface Segregation
Open Close Principle Principle Principle
Classi, moduli, funzioni I moduli a più alto livello non
dovrebbero essere “Aperte” per dovrebbero dipendere dai moduli
I Client non dovrebbero
l’estensione e “Chiuse” per la di livello più basso, entrambi essere forzati ad
modifica dovrebbero dipendere solo dalla implementare interfacce che
loro astrazione non utilizzano
Liskov’s Substitution
Single Responsibility
Principle
Principle
Le classi derivate devono
Una classe dovrebbe avere
poter sostituire
solo una singola ragione per
completamente quelle di
essere modificata
base
13. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Sulla base di questi principi, è stata creata una serie di
modelli per la Programmazione Orientata agli Oggetti:
The Design Patterns (by GoF)
(Sono circa 25, divisi in 3 categorie)
Creazionali, Comportamentali, Strutturali
14. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Però…
• Non tutti gli sviluppatori sanno come utilizzarli
• Un uso sbagliato può portare il progetto oltre “l’orizzonte
degli eventi!”
• Potrebbe risultare difficile far capire, ai “non addetti ai
lavori”, perché implementarli
Ma allora, come tenere sotto controllo il progetto ?
15. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
La soluzione esiste, ed è apprezzata da milioni di
sviluppatori: Spring Framework
Modularità Produttività Portabilità Testabilità
16. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Principalmente, Spring ci chiede solo
di seguire alcune regole definite come
“fondamentali”:
• DRY Principle = “Don’t Repeat Yourself”
• SoC Principle = “Separation of Concern”
(segue)
17. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
E, per quel che riguarda il Design
della nostra applicazione, sviluppare:
1. Basandoci sulle interfacce
Astrazione dei componenti = loose coupling
2. Preferendo la composizione all’ereditarietà
Favorendo, di fatto, la modularità
3. Componendo l’architettura a layer
Service, Data Access & Infrastructure è un classico!
18. Come portare il nostro team, bendato e con i tappi alle orecchie,
alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Quindi si!
…Bendati e con i tappi alle orecchie!
…Indaffarati nel soddisfare le richieste del cliente!
Contando, però, su di un Framework in grado di dare pieno
supporto infrastrutturale per il Design della nostra
architettura.
19. Capitolo 2
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“Fatto! …Già fatto??”
Codice più efficiente e, soprattutto,
In minor quantità
20. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Fitness Club Application
Requisiti cliente:
• Desktop App (Standalone)
• Gestione clienti del club
• Gestione delle sottoscrizioni alle attività
21. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<<Java Class>> <<Java Class>> <<Java Class>>
Member Subscription Activity
<<Java Class>> <<Java Class>>
Customer Address
Domain Objects
22. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<<Java Interface>> <<Java Interface>> <<Java Interface>>
MemberRepository SubscriptionRepository ActivityRepository
<<Java Interface>> <<Java Interface>>
CustomerRepository AddressRepository
Data Access Layer
23. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<<Java Interface>> <<Java Interface>>
CustomerManagerService FitnessClubService
Service Layer
24. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<<Java Class>> <<Java Interface>>
JdbcActivityRepository ActivityRepository
<<Java Interface>>
DataSource
Data Access Layer
(implementazione)
25. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<<Java Class>> <<Java Interface>>
HibernateActivityRepository ActivityRepository
<<Java Interface>>
SessionFactory
Data Access Layer
(implementazione)
26. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<<Java Interface>>
MemberRepository <<Java Class>> <<Java Interface>>
FitnessClubServiceImpl FitnessClubService
<<Java Interface>>
SubscriptionRepository
<<Java Class>> <<Java Interface>>
CustomerManagerServiceImpl CustomerManagerService
<<Java Interface>> <<Java Interface>>
CustomerRepository AddressRepository Service Layer
(implementazione)
27. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
I componenti della nostra applicazione sono pronti!
Passiamo ora alla configurazione di Spring
28. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/fitnessclubdb"/>
<property name="username" value="fitnessclubdbuser"/>
<property name="password" value="ItsASecret!"/>
</bean>
Oppure, se gestito da Java EE Container:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/fitnessclubdb"/>
db-config.xml
29. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:schema.sql"/>
<jdbc:script location="classpath:test-data.sql"/>
</jdbc:embedded-database>
test-db-config.xml
30. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value=“com.extremasistemas.fitnessclub.entities" />
<property name="hibernateProperties">
<value> …</value>
</property>
</bean>
hibernate-config.xml
31. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
…
<bean id="customerRepository"
class=" com.extremasistemas.examples.fitnessclub.repository.JdbcCustomerRepository ">
<constructor-arg ref="dataSource" />
</bean>
Oppure, utilizzando Hibernate:
<bean id="customerRepository"
class=" com.extremasistemas.examples.fitnessclub.repository.HibernateCustomerRepository ">
<constructor-arg ref="sessionFactory" />
</bean>
… data-access-config.xml
32. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<bean id="customerManagerService"
class="com.extremasistemas.examples.fitnessclub.service.CustomerManagerServiceImpl">
<constructor-arg ref="customerRepository" />
<constructor-arg ref="addressRepository" />
</bean>
<bean id="fitenessClubService"
class="com.extremasistemas.examples.fitnessclub.service.FitnessClubServiceImpl">
<constructor-arg ref="customerManagerService " />
<constructor-arg ref="memberRepository " />
<constructor-arg ref="subscriptionRepository" />
</bean>
application-config.xml
33. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Grafico delle dipendenze dei Bean
34. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Ora che abbiamo definito la configurazione..
…”Miwa (Spring), lanciami i componenti!”
35. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Ora che abbiamo definito la configurazione..
…”Miwa (Spring), lanciami i componenti!”
36. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“Mmmhhhh.. ma scrivere meno XML, no eh ?”
(DI utilizzando le annotazioni ed il “component-scan”)
37. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
38. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
39. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" />
application-config.xml
40. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
41. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“Ma questa applicazione non usa le transazioni !!”
(Come applicare le proprietà ACID in 5 minuti)
42. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
Oppure, utilizzando Hibernate:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
transaction-config.xml
43. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Oppure, se gestito da Java EE Container:
<tx:jta-transaction-manager />
transaction-config.xml
44. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
45. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
46. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" />
<tx:annotation-driven />
application-config.xml
47. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“Missione compiuta! Transazioni implementate!!”
48. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Riunione con il Cliente…
Requisiti:
• Ho due nuovi impiegati, vorrei che anch’essi utilizzassero
l’applicazione.
• Deve rimanere un’ applicazione desktop
• Vorrei che la business logic fosse spostata su un server
• Ma, non voglio un server web!
49. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Remote Method Invocation
“Senza toccare una riga di codice Java”
50. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Come ?
1. Spostando il back-end dell’applicazione su una macchina
dedicata
2. Lasciando il solo front-end sui terminali degli operatori
3. Modificando le istruzioni di configurazione di Spring
per il back-end ed il front-end.
51. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" />
<tx:annotation-driven />
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="FitnessClubService" />
<property name="serviceInterface"
value="com.extremasistemas.examples.fitnessclub.service.FitnessClubService" />
<property name="service" ref="fitnessClubService" />
</bean>
application-config.xml (server)
52. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<bean id=“fitnessClubService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://HOST:1099/FitnessClubService" />
<property name="serviceInterface"
value=" com.extremasistemas.examples.fitnessclub.service.FitnessClubService " />
</bean>
application-config.xml (client)
53. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Fatto!
“E non abbiamo toccato una sola riga di codice Java!!”
54. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Riunione con il Cliente…
Requisiti:
• Ho vinto al Superenalotto! Apro 10 club sul territorio!!
• Ora voglio che la mia applicazione sia utilizzata via web!
• Voglio comunque mantenere la stessa logica di business
55. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
E come ?
Con Spring MVC!
56. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
E come ?
1. Mantenendo intatta la configurazione applicativa
2. Configurando l’applicazione web via web.xml
3. Configurando Spring MVC
4. Definendo in nostri Controller
5. Creando i nostri Form
57. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/META-INF/spring/application-config.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</servlet-name>
</listener>
…
web.xml
58. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
…
<servlet>
<servlet-name>fitnessClubApplication</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/META-INF/spring/web/mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
…
</web-app>
web.xml
59. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<mvc:annotation-driven />
<mvc:default-servlet-handler />
<mvc:view-controller path="/login" view-name="login" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<context:component-scan base-package="com.extremasistemas.examples.fitnessclubweb" />
mvc-config.xml
60. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
FitnessClubsController.java
61. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<a href="http://www.server.com/fitnessclubs/members" >Lista Iscritti</a>
…la lista degli iscritti sarà quindi recuperabile come attributo della request:
${members}
62. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
FitnessClubsController.java
63. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<forms:form action="${myurl} " method="POST" modelAttribute="customer">
…
<forms:input path="firstName" />
<forms:errors path="firstName" />
…
</forms:form>
memberForm.jsp
64. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
E per la sicurezza, come si fa ?
1. Si aggiunge un filtro sul web.xml
2. Si aggiunge la configurazione per la sicurezza
3. Eventualmente, si utilizza la taglib specifica di Spring
per personalizzare le JSP
65. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
web.xml
66. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<security:http pattern="/css/**" security="none"/>
<security:http pattern="/login.jsp*" security="none"/>
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/**" access="hasRole(' ROLE_USER')" />
<security:form-login login-page="/login"
authentication-failure-url="/login?login_error=1" />
<scecurity:logout logout-url="/logout" logout-success-url="/" invalidate-session="true" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:jdbc-user-service data-source-ref="dataSource"/>
</security:authentication-provider>
security-config.xml
</security:authentication-manager>
67. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<security:authorize access="hasRole('ROLE_USER')" >
…lo legge solo chi ha questa determinata authority!!
</security:authorize>
Oppure, per visualizzare i dati relativi al contesto di sicurezza:
Benvenuto: <security:authentication property="principal.username" />
example.jsp
68. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“E la sicurezza è servita!”
69. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“Vorrei una mail per ogni errore
sul Data Access Layer”
70. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Come possiamo farlo?
1. Modifichiamo tutte le repository (molto male!!!)
– Violazione del DRY Principle (Code Scattering)
– Violazione del SoC Principle (Code Tangling)
2. Aggiungiamo un componente per svolgere l’attività (Ok!)
– No Tangling
– No Scattering
71. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring Aspect Oriented Programming
(…al volo!)
72. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
DataAccessLayerMonitor.java
73. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<aop:aspectj-autoproxy >
<aop:include name="dataAccessMonitor" />
</ aop:aspectj-autoproxy >
<bean id="dataAccessMonitor“
class=" com.extremasistemas.examples.fitnessclub.aspects.DataAccessLayerMonitor ">
<constructor-arg ref="mailService" />
</bean>
aspects-config.xml
74. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
<import resource="aspects-config.xml" />
<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" />
<tx:annotation-driven />
application-config.xml
75. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor
quantità
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“Fatto!!”
76. Capitolo 3
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Facciamo tutti parte di un disegno più
grande. Il team, Spring ed i concetti legati
ai Design Patterns
77. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
La piattaforma Java propone una vasta gamma di
funzionalità per lo sviluppo delle nostre applicazioni.
Non ci fornisce, però, i mezzi per poterne organizzare gli
elementi fondamentali in un insieme che sia coerente con i
principi legati ai Design Patterns.
Sicuramente, possiamo usare i Design Patterns per la
composizione delle varie classi ed istanze di oggetti…
78. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
…Ma, dobbiamo implementarli nella nostra
applicazione!
79. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
80. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring ApplicationContext = Inversion of Control Pattern
81. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring MVC = Front Controller Pattern
82. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring AOP = Proxy Pattern
83. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring JdbcTemplate = Template Method Pattern
84. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring Integration = EAI Patterns
85. Facciamo tutti parte di un disegno più grande.
Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“La forza scorre potente in Spring!!”
Ma…
86. Capitolo 4
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“La potenza è nulla senza controllo!”
Perché i test di unità devono essere un MUST
87. La potenza è nulla senza controllo!
Perché i test di unità devono essere un MUST
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Lo Unit Testing è fondamentale perché:
• Prima troviamo un Bug, meno tempo impieghiamo nel
risolverlo
• Tenere in considerazione i test, come parte integrante del
progetto (TDD), consente:
• Maggiore agilità
• L’utilizzo di meccanismi di verifica automatica (es. JUnit)
88. La potenza è nulla senza controllo!
Perché i test di unità devono essere un MUST
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Inoltre, cosa non da poco:
• L’implementazione dei test ci da la possibilità di
controllare la “flessibilità” e la “modularità” del nostro
sistema
Se non siamo in grado di implementare facilmente gli Stubs, oppure
i Mocks, per la simulazione delle dipendenze di un componente, vuol
dire che il design della nostra applicazione è da “rivedere”!
89. La potenza è nulla senza controllo!
Perché i test di unità devono essere un MUST
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring ci offre inoltre pieno supporto
agli Integration Test:
• Permettendoci l’utilizzo dei bean nei test (tramite DI)
• Permettendoci l’uso delle transazioni per i test
• Fornendoci componenti di supporto all’esecuzione di test
“out-of-container” (es. per le web application)
90. La potenza è nulla senza controllo!
Perché i test di unità devono essere un MUST
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
CustomerServiceTest.java
91. La potenza è nulla senza controllo!
Perché i test di unità devono essere un MUST
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
92. Capitolo 5
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
“L’importante è vincere, non partecipare!”
Il valore aggiunto dato da Spring Framework
93. L’ importante è vincere, non partecipare!
Il valore aggiunto dato da Spring Framework
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
ff
94. L’ importante è vincere, non partecipare!
Il valore aggiunto dato da Spring Framework
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring Features Overview:
• Modern Web
• Data Access
• Integration
• Mobile
• Social
• Security
• Cloud Ready
95. L’ importante è vincere, non partecipare!
Il valore aggiunto dato da Spring Framework
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
Spring Projects Overview:
Spring AMQP Spring Mobile
Spring for Android Spring.NET
Spring Batch Spring Roo
Spring Data Spring Security
Spring Framework Spring Social
Spring Gemfire Spring Web Flow
Spring Integration Spring Web Services
96. L’ importante è vincere, non partecipare!
Il valore aggiunto dato da Spring Framework
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
SpringSource ToolSuite
Features:
• Wizards per Spring Projects, configurazione bean con xml
files
• Supporto per Spring 3.1
• Funzionalità avanzate per il completamento del codice,
“content-assist”, validazione e supporto al “quick-fix” di
applicazioni Spring
• Supporto al refactoring per la configurazione XML e @Configuration
• Editor grafico per la configurazione di Spring
• Tools visuali di sviluppo per Spring Web Flow, Spring Batch e Spring Integration
• Spring Roo project wizard con shell integrata
97. L’ importante è vincere, non partecipare!
Il valore aggiunto dato da Spring Framework
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
SpringSource ToolSuite
Deployment Target flessibile:
• Supporto per tutti i più comuni Java EE Application
Servers
• Supporto avanzato per VMware vFabric tc Server
• Piena integrazione dell’IDE per Cloud Foundry, con
inclusione del debug diretto nel cloud
98. L’ importante è vincere, non partecipare!
Il valore aggiunto dato da Spring Framework
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
SpringSource ToolSuite
Pronto per l’uso:
• Distribuzione basata su Eclipse
• Componenti comuni già pre-installati
• Contiene le ultime versioni per i runtime di tc Server
Developer Edition e Spring Roo
99. L’ importante è vincere, non partecipare!
Il valore aggiunto dato da Spring Framework
Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
tc Server Developer & Spring Insight