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