SVILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE IOC E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008
May 02, 2015
SVILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE IOC E AOP
Alessandro Franchi - 0000219521Reti di Calcolatori L-SA.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
BookServiceImplBookServiceImpl
ShoppingCartServiceShoppingCartServiceBookService<<interface>>
BookService<<interface>>
ShoppingCartBookServiceShoppingCartBookService
ShoppingCartShoppingCart
new ShoppingCart()
new BookServiceImpl()
BookServiceMockBookServiceMock
new BookServiceMock()
Librerie vs. Framework IoC Dependency Injection
Loose coupling Testabilità Manutenibilità
ShoppingCartServiceShoppingCartServiceBookService<<interface>>
BookService<<interface>>
ShoppingCartBookServiceShoppingCartBookService
ShoppingCartShoppingCart
BookServiceImplBookServiceImpl
injected
injected BookServiceMockBookServiceMock
injectedJNDI lookup
ShoppingCartServiceShoppingCartService
ShoppingCartBookServiceImplShoppingCartBookServiceImpl
ShoppingCartShoppingCart
BookServiceImplBookServiceImpl
new ShoppingCart()
INVERSION OF CONTROL (IOC)
3
ASPECT ORIENTED PROGRAMMING (AOP)
Servizi ortogonali alla business logic:
SICUREZZA
BookServiceBookServiceShoppingCartServiceShopping
CartService
UserServiceUserService
TRANSAZIONI
BookServiceBookService
ShoppingCartServiceShoppingCartService
UserServiceUserService
TRANSAZIONI
TRANSAZIONI
SICUREZZA
SICUREZZA
4
LOGGING
Cross-cutting concerns come aspect:
flusso di esecuzione
AdviceAdvice
Joinpoint
Pointcut
Pointcut
SPRING FRAMEWORK
Architettura:
Spring Web Flow Flusso
stati, eventi e transizioni
CoreIoC Container (ApplicationContext)
CoreIoC Container (ApplicationContext)
ORMHibernate
…
ORMHibernate
…JEE
RemotingJMSEJB…
JEERemoting
JMSEJB…
DAOJDBC
Transazioni
DAOJDBC
Transazioni
AOPAOP
WebMVC
Integrazionecon altri
framework
WebMVC
Integrazionecon altri
framework
5
Applicazione web per la gestione di uno shop online Three-tiered architecture:
ARCHITETTURA DELLA WEBAPP
6
Security Layer
Security Layer
Database
Presentation Layer
Presentation Layer
Application Layer
Application Layer
Persistence Layer
Persistence Layer
Web Browser
Web Browser
……
PRESENTATION LAYER (CLIENT-SIDE LOGIC)
7
Dispatcher Servlet(Front
Controller)
Dispatcher Servlet(Front
Controller)
ModelAndViewModelAndView
Handler MappingHandler Mapping
Views:hello.jsphello.jsp login.jsplogin.jsp buy.jspbuy.jsp
………… ……
View Resolver
View Resolver
Page Controllers:
HomeControllerHomeController
LoginControllerLoginController
FlowControllerFlowController
Request: login.htmRequest: login.htm
ServiceLayer
ServiceLayer
FlowExecutorFlowExecutor
FlowRegistryFlowRegistry
buyFlow(main flow)
buyFlow(main flow)
FLOW DI ACQUISTOCON CARRELLO DELLA SPESA VIRTUALE
8
search(subflow)search
(subflow)addToCart
(subflow)addToCart
(subflow)removeFromCart
(subflow)removeFromCart
(subflow)
updatedatabaseupdate
databasecheckoutcheckoutstartstart buybuy
warnnot
in stock
warnnot
in stock
thankyou
thankyou endend
ShoppingCartServiceShoppingCartService
ShoppingCartShoppingCartShopping
CartShopping
Cartinjected
APPLICATION LAYER (BUSINESS LOGIC)
Gestione domain objects
Ambiente multiutente Un “carrello della spesa” virtuale per utente
9
scoped-proxyscoped-proxy
HTTP Session
----Shopping
Cart
HTTP Session
----Shopping
Cart
injected
PERSISTENCE LAYER (DATABASE LOGIC)
Object-Relational Mapping Hibernate
Data Access Object (DAO) Gestione transazioni come “aspect”
Spring AOP: proxy-based method joinpoint
10
proxyproxy
BookServiceBookService
txAdvicetxAdvice
BookDaoBookDaosaveBooks()updateBooks()getBooks()
saveBooks()updateBooks()getBooks()
Inizia transazioneInizia transazione
Termina transazione(commit o rollback)Termina transazione(commit o rollback)
RisultatiRisultati
Esegue business logic
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
12
ControllerMVC
ControllerMVC
ProxyFactoryBean(crea proxy specifici per RMI, HTTP Invoker…)
ProxyFactoryBean(crea proxy specifici per RMI, HTTP Invoker…)
invocazione metodo
networknetwork JRMP,HTTP
JRMP,HTTP BookServiceBookService
BookDaoBookDao
Database
PROXy
PROXy
BookService(interfaccia del servizio
remoto)
BookService(interfaccia del servizio
remoto)
creaproxy
Application Layer
Application Layer
Persistence Layer
Persistence Layer
Presentation Layer
Presentation Layer
Web Browser
Web Browser
……
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