Talk codemotion 2013 - La sostenibile leggerezza di Spring
-
Upload
daniele-la-nave -
Category
Technology
-
view
756 -
download
1
description
Transcript of Talk codemotion 2013 - La sostenibile leggerezza di Spring
![Page 1: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/1.jpg)
La sostenibile leggerezza di Spring! Ovvero, come migliorare il nostro team e la nostra produttività utilizzando Spring Framework.
Daniele La Nave
Spring Certified Trainer & Specialist @ Extrema Sistemas
![Page 2: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/2.jpg)
Capitolo 1
Daniele La Nave
Come portare il nostro team,bendato e con i tappi alle orecchie, alla piena
comprensione dell’ OOP utilizzando Spring
[email protected] - Extrema Sistemas
![Page 3: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/3.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
…..eh ?
Perché bendato e con i tappi alle orecchie ?
[email protected] - Extrema Sistemas
![Page 4: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/4.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 5: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/5.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
“Vorrei un’ icona di color blu sul mio desktop… …che, se cliccata, scateni il lancio di ordigno di fine di mondo!!!”
[email protected] - Extrema Sistemas
Risposte:
2. Un’ azienda deve, necessariamente, essere produttiva, competitiva, ed in grado di far fronte alle eventuali
“turbe” dei clienti. Es:
![Page 6: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/6.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
Risposte:
3. “Lo voglio pronto per la prossima settimana! Anzi, lo voglio pronto per domani!!”
[email protected] - Extrema Sistemas
![Page 7: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/7.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
Ironia a parte, quanto descritto fin ora può causare
dei pericolosi corto-circuiti tra reparti dell’azienda:
[email protected] - Extrema Sistemas
Settore Commerciale Vs. Settore Sviluppo
Oppure, in altri termini, una volta “rotto” il circuito
“Fighetti” Vs. “Autistici”
![Page 8: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/8.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
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!!)
[email protected] - Extrema Sistemas
![Page 9: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/9.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
...e quindi ?
Se i tempi sono corti ed i requisiti “complessi”,
come possiamo far contenti tutti ?
[email protected] - Extrema Sistemas
![Page 10: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/10.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
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)
[email protected] - Extrema Sistemas
![Page 11: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/11.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 12: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/12.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
Open Close Principle
Classi, moduli, funzioni dovrebbero essere “Aperte” per
l’estensione e “Chiuse” per la modifica
Dependency Inversion Principle
I moduli a più alto livello non
dovrebbero dipendere dai moduli di livello più basso, entrambi
dovrebbero dipendere solo dalla loro astrazione
Interface Segregation Principle
I Client non dovrebbero
essere forzati ad implementare interfacce che
non utilizzano
Single Responsibility Principle
Una classe dovrebbe avere
solo una singola ragione per essere modificata
Liskov’s Substitution Principle
Le classi derivate devono
poter sostituire completamente quelle di
base
[email protected] - Extrema Sistemas
![Page 13: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/13.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 14: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/14.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
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 ?
[email protected] - Extrema Sistemas
![Page 15: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/15.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
La soluzione esiste, ed è apprezzata da milioni di
sviluppatori: Spring Framework
[email protected] - Extrema Sistemas
Modularità Produttività Portabilità Testabilità
![Page 16: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/16.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
Principalmente, Spring ci chiede solo
di seguire alcune regole definite come
“fondamentali”:
• DRY Principle = “Don’t Repeat Yourself”
• SoC Principle = “Separation of Concern”
(segue)
[email protected] - Extrema Sistemas
![Page 17: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/17.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
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!
[email protected] - Extrema Sistemas
![Page 18: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/18.jpg)
Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring
Daniele La Nave
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.
[email protected] - Extrema Sistemas
![Page 19: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/19.jpg)
Capitolo 2
Daniele La Nave
“Fatto! …Già fatto??”
Codice più efficiente e, soprattutto,
In minor quantità
[email protected] - Extrema Sistemas
![Page 20: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/20.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
Fitness Club Application
Requisiti cliente:
• Desktop App (Standalone)
• Gestione clienti del club
• Gestione delle sottoscrizioni alle attività
[email protected] - Extrema Sistemas
![Page 21: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/21.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
Domain Objects
<<Java Class>> Activity
<<Java Class>> Subscription
<<Java Class>> Member
<<Java Class>> Customer
<<Java Class>> Address
![Page 22: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/22.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
Data Access Layer
<<Java Interface>> ActivityRepository
<<Java Interface>> SubscriptionRepository
<<Java Interface>> MemberRepository
<<Java Interface>> CustomerRepository
<<Java Interface>> AddressRepository
![Page 23: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/23.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
Service Layer
<<Java Interface>> CustomerManagerService
<<Java Interface>> FitnessClubService
![Page 24: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/24.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
Data Access Layer (implementazione)
<<Java Interface>> ActivityRepository
<<Java Class>> JdbcActivityRepository
<<Java Interface>> DataSource
![Page 25: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/25.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
Data Access Layer (implementazione)
<<Java Interface>> ActivityRepository
<<Java Class>> HibernateActivityRepository
<<Java Interface>> SessionFactory
![Page 26: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/26.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
Service Layer (implementazione)
<<Java Interface>> FitnessClubService
<<Java Class>> FitnessClubServiceImpl
<<Java Interface>> CustomerManagerService
<<Java Class>> CustomerManagerServiceImpl
<<Java Interface>> SubscriptionRepository
<<Java Interface>> MemberRepository
<<Java Interface>> CustomerRepository
<<Java Interface>> AddressRepository
![Page 27: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/27.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
I componenti della nostra applicazione sono pronti!
Passiamo ora alla configurazione di Spring
[email protected] - Extrema Sistemas
![Page 28: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/28.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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"/>
[email protected] - Extrema Sistemas
db-config.xml
![Page 29: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/29.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:schema.sql"/>
<jdbc:script location="classpath:test-data.sql"/>
</jdbc:embedded-database>
[email protected] - Extrema Sistemas
test-db-config.xml
![Page 30: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/30.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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>
[email protected] - Extrema Sistemas
hibernate-config.xml
![Page 31: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/31.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
…
<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>
…
[email protected] - Extrema Sistemas
data-access-config.xml
![Page 32: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/32.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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>
[email protected] - Extrema Sistemas
application-config.xml
![Page 33: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/33.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
Grafico delle dipendenze dei Bean
![Page 34: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/34.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
Ora che abbiamo definito la configurazione..
…”Miwa (Spring), lanciami i componenti!”
[email protected] - Extrema Sistemas
![Page 35: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/35.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
Ora che abbiamo definito la configurazione..
…”Miwa (Spring), lanciami i componenti!”
[email protected] - Extrema Sistemas
![Page 36: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/36.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
“Mmmhhhh.. ma scrivere meno XML, no eh ?”
(DI utilizzando le annotazioni ed il “component-scan”)
[email protected] - Extrema Sistemas
![Page 37: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/37.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
![Page 38: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/38.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
![Page 39: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/39.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" />
[email protected] - Extrema Sistemas
application-config.xml
![Page 40: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/40.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
![Page 41: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/41.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
“Ma questa applicazione non usa le transazioni !!”
(Come applicare le proprietà ACID in 5 minuti)
[email protected] - Extrema Sistemas
![Page 42: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/42.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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>
[email protected] - Extrema Sistemas
transaction-config.xml
![Page 43: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/43.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
Oppure, se gestito da Java EE Container:
<tx:jta-transaction-manager />
[email protected] - Extrema Sistemas
transaction-config.xml
![Page 44: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/44.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
![Page 45: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/45.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave [email protected] - Extrema Sistemas
![Page 46: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/46.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" />
<tx:annotation-driven />
[email protected] - Extrema Sistemas
application-config.xml
![Page 47: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/47.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
“Missione compiuta! Transazioni implementate!!”
[email protected] - Extrema Sistemas
![Page 48: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/48.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
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!
[email protected] - Extrema Sistemas
![Page 49: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/49.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
Remote Method Invocation
“Senza toccare una riga di codice Java”
[email protected] - Extrema Sistemas
![Page 50: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/50.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
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.
[email protected] - Extrema Sistemas
![Page 51: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/51.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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>
[email protected] - Extrema Sistemas
application-config.xml (server)
![Page 52: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/52.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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>
[email protected] - Extrema Sistemas
application-config.xml (client)
![Page 53: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/53.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
Fatto!
“E non abbiamo toccato una sola riga di codice Java!!”
[email protected] - Extrema Sistemas
![Page 54: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/54.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 55: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/55.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
E come ?
Con Spring MVC!
[email protected] - Extrema Sistemas
![Page 56: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/56.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 57: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/57.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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>
…
[email protected] - Extrema Sistemas
web.xml
![Page 58: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/58.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
…
<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>
[email protected] - Extrema Sistemas
web.xml
![Page 59: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/59.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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" />
[email protected] - Extrema Sistemas
mvc-config.xml
![Page 60: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/60.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
[email protected] - Extrema Sistemas
FitnessClubsController.java
![Page 61: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/61.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<a href="http://www.server.com/fitnessclubs/members" >Lista Iscritti</a>
…la lista degli iscritti sarà quindi recuperabile come attributo della request:
${members}
[email protected] - Extrema Sistemas
![Page 62: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/62.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
[email protected] - Extrema Sistemas
FitnessClubsController.java
![Page 63: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/63.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<forms:form action="${myurl} " method="POST" modelAttribute="customer">
…
<forms:input path="firstName" />
<forms:errors path="firstName" />
…
</forms:form>
[email protected] - Extrema Sistemas
memberForm.jsp
![Page 64: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/64.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 65: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/65.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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>
[email protected] - Extrema Sistemas
web.xml
![Page 66: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/66.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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:authentication-manager>
[email protected] - Extrema Sistemas
security-config.xml
![Page 67: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/67.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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" />
[email protected] - Extrema Sistemas
example.jsp
![Page 68: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/68.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
“E la sicurezza è servita!”
[email protected] - Extrema Sistemas
![Page 69: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/69.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
“Vorrei una mail per ogni errore sul Data Access Layer”
[email protected] - Extrema Sistemas
![Page 70: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/70.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 71: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/71.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
Spring Aspect Oriented Programming
(…al volo!)
[email protected] - Extrema Sistemas
![Page 72: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/72.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
[email protected] - Extrema Sistemas
DataAccessLayerMonitor.java
![Page 73: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/73.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<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>
[email protected] - Extrema Sistemas
aspects-config.xml
![Page 74: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/74.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
<import resource="aspects-config.xml" />
<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" />
<tx:annotation-driven />
[email protected] - Extrema Sistemas
application-config.xml
![Page 75: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/75.jpg)
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità
Daniele La Nave
“Fatto!!”
[email protected] - Extrema Sistemas
![Page 76: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/76.jpg)
Capitolo 3
Daniele La Nave
Facciamo tutti parte di un disegno più grande. Il team, Spring ed i concetti legati
ai Design Patterns
[email protected] - Extrema Sistemas
![Page 77: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/77.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave [email protected] - 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…
![Page 78: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/78.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave [email protected] - Extrema Sistemas
…Ma, dobbiamo implementarli nella nostra applicazione!
![Page 79: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/79.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave [email protected] - Extrema Sistemas
![Page 80: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/80.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave [email protected] - Extrema Sistemas
Spring ApplicationContext = Inversion of Control Pattern
![Page 81: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/81.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave [email protected] - Extrema Sistemas
Spring MVC = Front Controller Pattern
![Page 82: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/82.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave [email protected] - Extrema Sistemas
Spring AOP = Proxy Pattern
![Page 83: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/83.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave [email protected] - Extrema Sistemas
Spring JdbcTemplate = Template Method Pattern
![Page 84: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/84.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave [email protected] - Extrema Sistemas
Spring Integration = EAI Patterns
![Page 85: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/85.jpg)
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns
Daniele La Nave
“La forza scorre potente in Spring!!”
Ma…
[email protected] - Extrema Sistemas
![Page 86: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/86.jpg)
Capitolo 4
Daniele La Nave
“La potenza è nulla senza controllo!”
Perché i test di unità devono essere un MUST
[email protected] - Extrema Sistemas
![Page 87: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/87.jpg)
La potenza è nulla senza controllo! Perché i test di unità devono essere un MUST
Daniele La Nave
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)
[email protected] - Extrema Sistemas
![Page 88: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/88.jpg)
La potenza è nulla senza controllo! Perché i test di unità devono essere un MUST
Daniele La Nave
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”!
[email protected] - Extrema Sistemas
![Page 89: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/89.jpg)
La potenza è nulla senza controllo! Perché i test di unità devono essere un MUST
Daniele La Nave
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)
[email protected] - Extrema Sistemas
![Page 90: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/90.jpg)
La potenza è nulla senza controllo! Perché i test di unità devono essere un MUST
Daniele La Nave
[email protected] - Extrema Sistemas
CustomerServiceTest.java
![Page 91: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/91.jpg)
La potenza è nulla senza controllo! Perché i test di unità devono essere un MUST
Daniele La Nave
[email protected] - Extrema Sistemas
![Page 92: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/92.jpg)
Capitolo 5
Daniele La Nave
“L’importante è vincere, non partecipare!”
Il valore aggiunto dato da Spring Framework
[email protected] - Extrema Sistemas
![Page 93: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/93.jpg)
L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework
Daniele La Nave
ff
[email protected] - Extrema Sistemas
![Page 94: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/94.jpg)
L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework
Daniele La Nave
Spring Features Overview:
• Modern Web
• Data Access
• Integration
• Mobile
• Social
• Security
• Cloud Ready
[email protected] - Extrema Sistemas
![Page 95: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/95.jpg)
L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework
Daniele La Nave
Spring Projects Overview:
[email protected] - Extrema Sistemas
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
![Page 96: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/96.jpg)
L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 97: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/97.jpg)
L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 98: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/98.jpg)
L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework
Daniele La Nave
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
[email protected] - Extrema Sistemas
![Page 99: Talk codemotion 2013 - La sostenibile leggerezza di Spring](https://reader033.fdocuments.net/reader033/viewer/2022051513/5457a568b1af9fb66e8b539e/html5/thumbnails/99.jpg)
L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework
Daniele La Nave
tc Server Developer & Spring Insight
[email protected] - Extrema Sistemas