SVILUPPO E COLLAUDO DI UNA
WEBAPP MEDIANTE IOC E AOP
Alessandro Franchi - 0000219521
Reti di Calcolatori L-S
A.A. 2007/2008
INTRODUZIONE

JavaBeans


Troppo semplici per applicazioni di livello enterprise
J2EE
Disaccoppiamento tra Presentation Layer (JSP e servlet) e
Business Logic (EnterpriseJavaBeans)
 Servizi middleware
 EJB troppo complessi
 Implementazione complessa
 Molto invasivo
 Difficili da testare

Nuovi pattern di programmazione
2
INVERSION OF CONTROL (IOC)
Librerie vs. Framework IoC
 Dependency Injection


Loose coupling
Testabilità
 Manutenibilità

ShoppingCart
ShoppingCartService
BookService
ShoppingCart
BookService
BookServiceImpl
<<interface>>
BookServiceMock
BookServiceImpl
BookServiceImpl
3
ASPECT ORIENTED PROGRAMMING (AOP)

Servizi ortogonali alla business logic:
TRANSAZIONI
L
O
G
G
I
N
G

Shopping
CartService
BookService
UserService
S
I
C
U
R
E
Z
Z
A
BookService
ShoppingCartService
UserService
T
R
A
N
S
A
Z
I
O
N
I
S
I
C
U
R
E
Z
Z
A
Cross-cutting concerns come aspect:
Advice
Pointcut
flusso di esecuzione
Joinpoint
4
SPRING FRAMEWORK

Architettura:
ORM
DAO
Hibernate
…
JDBC
Transazioni
AOP
JEE
Web
Remoting
JMS
EJB
…
MVC
Integrazione
con altri
framework
Core
IoC Container (ApplicationContext)

Spring Web Flow

Flusso
 stati, eventi e transizioni
5
ARCHITETTURA DELLA WEBAPP
Applicazione web per la gestione di uno shop online
 Three-tiered architecture:

Web
Browser
…
Security
Layer
Presentation
Layer
Application
Layer
Persistence
Layer
Database
6
PRESENTATION LAYER (CLIENT-SIDE LOGIC)
Handler Mapping
Page
Controllers:
HomeController
Dispatcher
Servlet
(Front
Controller)
Request:
login.htm
ModelAndView
Views:
…
login.jsp
…
Service
Layer
FlowController
View
Resolver
hello.jsp
LoginController
buy.jsp
FlowExecutor
FlowRegistry
…
7
FLOW DI ACQUISTO
CON CARRELLO DELLA SPESA VIRTUALE
buyFlow
(main flow)
start
buy
checkout
update
database
thank
you
end
warn
not
in stock
search
addToCart
removeFromCart
(subflow)
(subflow)
(subflow)
8
APPLICATION LAYER (BUSINESS LOGIC)

Gestione domain objects

Ambiente multiutente

Un “carrello della spesa” virtuale per utente
scoped-proxy
ShoppingCartService
ShoppingCart
injected
HTTP
Session
Shopping
---Cart
Shopping
Cart
9
PERSISTENCE LAYER (DATABASE LOGIC)

Object-Relational Mapping

Hibernate
Data Access Object (DAO)
 Gestione transazioni come “aspect”


Spring AOP:
 proxy-based
 method joinpoint
Inizia transazione
Risultati
proxy
txAdvice
BookService
saveBooks()
updateBooks()
getBooks()
BookDao
Termina transazione
(commit o rollback)
10
Esegue business
logic
TESTING

Supporto di Spring alla fase di testing
Unit Testing di controller Spring MVC
 Verifica che il model contenga certi oggetti
 Verifica che la view ritornata sia quella giusta
 Testing di flow definiti con Spring Web Flow
 Verifica della correttezza degli stati e delle transizioni
 Integration Testing dell’applicazione
 Verifica del funzionamento dell’applicazione o di parti di essa
caricando l’ApplicationContext
 Transactional Testing dei componenti per l’accesso al database
 Verifica delle operazioni di accesso e modifica del database
 Ogni test è wrappato in una transazione


EasyMock

Per implementazioni mock dei service objects nel caso di Unit Test
11
DEPLOY DISTRIBUITO
Web
Browser
Book
invocazione
…
Controller metodo
Service
MVC
P
Presentation
Layer
R
(interfaccia
del servizio
remoto)
O
X
y
JRMP,
HTTP
crea
proxy
Application
Layer
Persistence
Layer
network
JRMP,
HTTP
BookService
BookDao
ProxyFactoryBean
(crea proxy specifici per
RMI, HTTP Invoker…)
Database
12
CONCLUSIONI

Spring Framework:
Componenti loosely coupled, riutilizzabili e facilmente
testabili
 Servizi ortogonali (transazioni) applicati come aspect
 Architettura scalabile


Futuri sviluppi dell’applicazione
Data source
 estratta da directory JNDI
 che ottiene connessioni da un pool di connessioni
 Load balancing
1.
Gestore a livello applicativo
2.
Load balancer a livello HTTP
3.
Java Message System

13
BIBLIOGRAFIA















C. Walls and R. Breidenbach, Spring in Action, Manning, 2005.
Java Beans (http://java.sun.com/javase/technologies/desktop/javabeans/index.jsp)
Sun Microsystems (http://www.sun.com/)
Java (http://java.sun.com/)
Java 2 Platform, Enterprise Edition (J2EE) (http://java.sun.com/j2ee/overview.html)
Enterprise JavaBeans Technology (http://java.sun.com/products/ejb/)
M. Fowler, “Inversion of Control,” 2005
(http://martinfowler.com/bliki/InversionOfControl.html)
SpringSource.org - Spring Framework (http://www.springsource.org/)
M. Fowler, “Inversion of Control Containers and the Dependency Injection pattern,”
2004 (http://martinfowler.com/articles/injection.html)
SpringSource.org - Spring Web Flow (http://www.springsource.org/webflow)
Acegi Security - Acegi Security System for Spring (http://www.acegisecurity.org/)
Hibernate (http://www.hibernate.org/)
Remote Method Invocation Home
(http://java.sun.com/javase/technologies/core/basic/rmi/index.jsp)
Hessian Binary Web Service Protocol (http://hessian.caucho.com/)
Burlap XML Web Service Protocol
(http://www.caucho.com/resin-3.0/protocols/burlap.xtp)
14
FINE
15