S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di...

15
SVILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE IOC E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008

Transcript of S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di...

Page 1: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

SVILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE IOC E AOP

Alessandro Franchi - 0000219521Reti di Calcolatori L-SA.A. 2007/2008

Page 2: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C 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

Page 3: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 4: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 5: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 6: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

……

Page 7: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 8: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 9: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 10: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 11: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 12: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

……

Page 13: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 14: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

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

Page 15: S VILUPPO E COLLAUDO DI UNA WEBAPP MEDIANTE I O C E AOP Alessandro Franchi - 0000219521 Reti di Calcolatori L-S A.A. 2007/2008.

FINE 15