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