Spring Overview
Problems with traditional Java EE Development
What is Spring?
Spring Versions and Compatibility
The Traditional Development Approach
Introducing Dependency Injection
A First Look at Spring
A Spring Example
The Spring Distribution and JARs
Spring Configuration
The Spring Modules
Exercise – Working with Spring
Deeper into Inversion of Control
Spring IOC
Types of Dependency Injection
Setter Injection
Constructor Injection
Injecting Beans into Other Beans (“Wiring Up” Beans)
Spring Configuration files
Differences between Spring 2.0 and Spring 1.2.x
The <bean/> Element
Spring 2.0 scopes
Scope vs. Singleton attributes
Bean Singletons
Bean Prototypes
Spring BeanFactories
ApplicationContext
Creating the Container
Building Spring Services
Exercise 2 – Creating Spring Services
Bean Scopes in Spring 2.0
Request and Session-scoped Beans
Steps toward Spring-enabling Your Web Applications
Using Request/Session-scoped beans within Singleton Services
Using Placeholders
Internationalization
Lookup Method Injection
Lazy Initialization
Autowiring
Controlling Bean Lifecycles
Exercise – Spring-enabling the Web Application
JDBC Spring Integration
Why use Spring’s JDBC Integration
What does Spring JDBC integration offer?
JDBCTemplate
JDBCDaoSupport
Configuring the DataSource
Building a Spring-based DAO
Building a Row Mapper
Retrieving a Single Object
Spring JDBC Error Handling
DataAccessExceptions
Updates with JDBCTemplate
Updates via SQLUpdate
Exercise – Retrieving and Updating Objects Using Spring JDBC
Core Hibernate
Has JDBC Failed?
JPA and Hibernate 3
Choosing a Persistence Strategy
Objects vs. Relations
Lightweight Services vs. Heavyweight Containers
How Hibernate Works
Within an Application Server
Persisting Plain Old Java Objects (POJOs)
Introducing the Hibernate Persistence Service
Getting Started with Hibernate
Setting up the Environment
hibernate.properties
Basic Configuration and Persistence Objects
Hibernate Mappings
Mapping Properties
Configuring the SessionFactory
Maintaining the Session Factory
A First Hibernate Example
Performing a Query
What is a Session?
Returning Multiple Rows
Executing Updates
Insert and Delete Operations with Hibernate
Configuring Log4J within Hibernate
Eclipse and Hibernate Plug-ins
Exercise – Displaying, Inserting, Removing Products and Orders
The Hibernate API
Basic Configuration
The SessionFactory
A Hibernate Session
The Session Interface
Hibernate Exceptions
The LifeCycle of a POJO
Transient, Persistent, and Detached Objects
Session State Methods
Session Persistence Methods
First-Level Caching
Saving Duplicate Objects
Merging Detached Objects
Reattaching vs. Merging Detached Objects
Checking the Cache and Evicting
Loading Objects
Get() versus Load()
Mapping Associations
Mapping Metadata
XML vs. Annotations
Java vs. XDoclet Annotations
Java Annotations
Hibernate Annotations Extensions
Cascading Operations
Composite Keys
Exercise – Using Composite Keys and Associations
The Hibernate API – Part II
The Query Interface
Performing Queries
Query Methods
Iterating a Query
Iterating vs. Lists
Selecting Multiple Columns
Using HQL
Basic Syntax
Ordering and Grouping
HQL and Object Graphs
Maps and Functions in HQL
HQL Joins and Subqueries
Named Parameters
Positional Parameters
Pagination
Externalizing Queries
Stored Procedures
Lazy Loading
Working with Detached Object Graphs
Exercise – Using HQL, Named Parameters, and Externalized Queries
More On Hibernate Mapping
Mapping Associations
Many-to-One
One-to-One
Directionality
Bi-directional Associations
Collections Mapping
Collection Types
Many-to-many Mappings
Unidirectional One-to-Many Lists
One-to-Many Bags
More on Types
Mapping Types
Hibernate and XDoclet
Exercise – Querying and Updating with Many-to-Many Mappings
Integrating Frameworks
DAO Patterns
Wrapping Hibernate
An Abstract DAO
Hibernate Spring Integration
The HibernateTemplate
Configuring Spring to Support Hibernate
Configuring the SessionFactory within Spring
Spring’s HibernateDaoSupport Class
A Hybrid Spring/Hibernate DAO
Using the New DAO
Patterns of Usage for Hibernate Sessions in Web Apps
Exercise – Using the DAO Spring Service and HibernateTemplate
Apache Struts Web Tier Integration
Spring-Enabling Web Apps
Spring-Enabling Struts-based Apps
IOC and Struts Actions
Replacing the RequestProcessor and Injecting Actions
Exercise – Integrating Struts and Spring
JavaServer Faces Web Tier Integration
Spring-Enabling JSF-based Web Apps
Modifying faces-context.xml
Incorporating Spring’s DelegatingVariableResolver
Using the SpringBeanVariableResolver
Controlling bean delegation between JSF and Spring
Exercise – Integrating JSF and Spring Framework
Spring Remoting and Distributed Services
Integrating Spring and EJBs
Wiring EJBs
Enterprise Solutions with Spring and EJBs
Remoting with Spring
Created a Distributed App using Spring Remoting
Wiring Web Services
Exercise – Utilizing Spring Remoting
Spring and Web 2.0
Serving JavaScript Resources with Spring
Serving JavaScript Libraries with Spring
Serving other client-side resources with Spring
Ajax and Spring
Enabling DWR
Sending Objects using DWR via Spring
Exercise – Incorporating Ajax into Spring-based Apps
Appendix A - AOP
Why Aspect-Oriented Programming?
Programming the Spring AOP Way
Common Terms
Recognizing Concerns
Weaving
Aspects
Aspect Structure
Join Points
Pointcuts
Advice
Introductions
Installing AspectJ
Aspects
AspectJ vs. Spring AOP
Exercise – Creating and Utilizing AspectJ Aspects
Appendix B - Spring AOP
SpringAOP Basics
Using Before Advice
MethodBeforeAdvice Interface
Configuring Advice
Running the Client
Using After Advice
AfterReturningAdvice Interface
Around Advice
MethodInterceptor
Spring AOP Proxies
Client’s and the Proxy
Programmatic vs. Declarative Proxies
Pointcuts
Spring-Provided Pointcuts
Creating Pointcuts
Creating Advisors
Exercise – Working with Spring AOP Around Advice for Data Validation
Appendix C - Spring MVC
The Spring MVC Process
Spring MVC Components
Spring MVC and Dependency Injection
Configuring the DispatcherServlet
Return of the ApplicationContext
Working with Spring Controllers
Defining HandlerMappings
What is a ModelAndView?
Configuring ViewResolvers
Spring JSP Tags and Data Binding
Data Validation: Jakarta Commons vs. Valang
Creating a Validator
Exercise – Creating the Product Spring MVC Application
Appendix D – Spring Web Flows
Spring Web Flow
Spring Web Flow Actions
Configuring Web Flows
Transitions and Decisions
Managing Flow Execution
Incorporating JSF into Web Flows
Using Flow Variables in JSF Views
Exercise – Incorporating Spring Faces into a Spring MVC Application
Appendix E – Hibernate Transactions and Caching
Dealing with Concurrency
Hibernate Transactions
Configuring Transaction Type
Working with the JTA
Data Isolation Issues
Managing Transaction Isolation
Locking Strategies
Using LockMode
Hibernate LockMode Object
Automatic Versioning
First-Level Caching
Second-Level Caching
Configuring and Mapping Second Level Caches
Performance
Exercise – Working with a Second-Level Cache