Talk codemotion 2013 - La sostenibile leggerezza di Spring

100
La sostenibile leggerezza di Spring! Ovvero, come migliorare il nostro team e la nostra produttività utilizzando Spring Framework. Daniele La Nave [email protected] Spring Certified Trainer & Specialist @ Extrema Sistemas

description

Ovvero, come migliorare il nostro team e la nostra produttività utilizzando Spring Framework

Transcript of Talk codemotion 2013 - La sostenibile leggerezza di Spring

Page 1: Talk codemotion 2013 - La sostenibile leggerezza di Spring

La sostenibile leggerezza di Spring! Ovvero, come migliorare il nostro team e la nostra produttività utilizzando Spring Framework.

Daniele La Nave

[email protected]

Spring Certified Trainer & Specialist @ Extrema Sistemas

Page 2: Talk codemotion 2013 - La sostenibile leggerezza di Spring

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework

Daniele La Nave

tc Server Developer & Spring Insight

[email protected] - Extrema Sistemas