The Spring Framework

ballooncadgeInternet and Web Development

Oct 31, 2013 (4 years and 8 months ago)


The Spring Framework

J2EE without EJB

Jürgen Höller


J2EE Reviewed

Introducing the Spring Framework

Spring and J2EE

Core Container

AOP Framework

Transactions & Data Access


Further Services

J2EE Reviewed (1)

Challenges of modern server
side software

threaded execution

resource and transaction management

remote service access

HTTP server integration

Java 2 Enterprise Edition (J2EE

set of specifications for standard application

server infrastructure

industry standard: backed by Sun, IBM, Oracle

application server implements standard APIs

application uses standard APIs

J2EE Reviewed (2)

J2EE specifies system services

Servlets, JSP, JTA, JDBC, JMS, JavaMail

builds on underlying standard Java runtime

J2EE also specifies component models

Servlets for HTTP endpoints

EJBs for middle tier components

Focus on traditional 3
tier server layout

focus on physical separation between tiers

middle tier always requires application server

level APIs

direct usage in applications often cumbersome

comfortable high
level APIs?

J2EE Reviewed (3)

Scope of J2EE is limited

EJBs are coarse
grained components

mainly for (remote) service façades

special deployment effort for every component

How to deal with fine

located application objects?

forced to use custom solutions

common: open source libraries / frameworks

How to run outside of an application server?

not covered by traditional J2EE

important for unit tests and integration tests

also important for productive development

Spring Framework (1)

Java / J2EE Application Framework

based on Rod Johnson’s book

“J2EE Design & Development” (Wiley, 2002)

current book: "J2EE Development without EJB"

(Rod Johnson, Jürgen Höller; Wiley, 2004)

Focus on "Plain Old Java Objects" (POJOs)

natural, generic component model for applications

flexible alternative to EJB, not tied to J2EE

Open Source Project on SourceForge

Apache license

since February 2003

25 developers

Spring Framework (2)

Business objects as decoupled POJOs

configuration and wiring through framework

or usage as normal Java objects

independent from the actual environment

no unnecessary ties to a framework

reusable in any kind of environment

in particular: testability in unit / integration tests

Generic middleware services

e.g. declarative transactions for POJOs

flexible alternative to EJB CMT

for all applications, including standalone

leverage J2EE container services when available

Spring Framework (3)

Integration with existing solutions

Object/Relational Mapping tools

web frameworks

remoting protocols

"It‘s all about choice"

JDBC, Hibernate, JDO, Oracle TopLink,

Apache OJB, iBATIS SQL Maps

Spring Web MVC, Spring Web Flow,

Struts, WebWork, Tapestry, JSF

HTTP invoker, RMI invoker, conventional RMI,

RPC (WSDL/SOAP), Hessian, Burlap

Spring and J2EE (1)

J2EE provides standard system services

to be leveraged by higher
level components

Spring abstractions can run on top of J2EE

J2EE system services

J2EE deployment and management

Spring application container

Spring service abstractions

Application components

Spring and J2EE (2)

Spring is a de
facto standard Java / J2EE
application framework

typically running on top of J2EE server

but: application components are not tied to J2EE

Most popular "lightweight container"

widespread adoption over the past 2.5 years

endorsed / supported by BEA, IBM, Oracle

e.g.: support partnership for Spring on WebLogic

EJB3 specification will follow Spring model

adopts some important ideas from Spring

Spring and J2EE (3)

Constantly increasing download numbers

~30.000 downloads of every point release

>400.000 downloads overall

Growing Spring ecosystem

Spring sister projects

Acegi Security, Spring Web Flow

used or supported by many other products

open source and commercial

e.g. Atlassian Confluence, Liferay Portal

5 dedicated books on Spring already available

by various authors

more books in the works

Core Container (1)

"Inversion of Control"

configuration and lifecycle of application objects

objects do not configure themselves, but get
configured from the outside

objects don't know the origin of their configuration

"Dependency Injection"

based" (JavaBean properties)

based" (constructor arguments)

alternative: "Service Lookup"

for example: JNDI

Core Container (2)

grained externalized configuration

representing the internal structure of the application

references to other components

configuration parameters

enables flexible configuration management

at fine
grained component level

switching between different deployment scenarios

XML bean definitions

most common configuration format

often: separate admin properties file

linked into XML bean definitions through placeholders

Core Container (3)

<bean id="
" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="${jdbc.driver}"/>

<property name="url" value="${jdbc.url}"/>

<property name="username" value="${jdbc.username}"/>

<property name="password" value="${jdbc.password}"/>


<bean id="

<property name="dataSource" ref="

<property name="sqlMap" ref="


<bean id="


<property name="orderDao" ref="

<property name="itemDao" ref="


AOP Framework (1)

Oriented Programming"

proxies for arbitrary POJOs

flexible combination of interceptors


fixed component model ("EJB a la carte")

Cutting Concerns"

actions at the beginning/end of a method call

Target method



AOP Framework (2)

Do not repeat code: factor out interceptor

e.g. logging: configurable trace log

e.g. security: authorization checks

e.g. common exception handling

e.g. transaction demarcation

Method interceptor

interceptor can be applied to any methods

interceptor can be enabled/disabled

AOP Alliance: MethodInterceptor interface

reuse of pre
built interceptors

Transactions & DAOs (1)

Transaction Strategy Abstraction

PlatformTransactionManager SPI

switching between JTA and native transactions

Transaction Demarcation Options

programmatic demarcation a la JTA

declarative demarcation for arbitrary POJOs

Transaction Definitions

all EJB CMT propagation codes supported


optional transaction semantics beyond EJB

nested, isolation level, timeout, read
only flag

Transactions & DAOs (2)

DataAccessException hierarchy

independent of JDBC, Hibernate, JDO, etc

unchecked, as most failures are not recoverable

subclasses like OptimisticLockingFailureException

Support for DAO implementations

implicit access to resources

many operations become one

no try/catch blocks anymore

built integration classes for many solutions



Transactions & DAOs (3)

Example for a JDBC
based DAO

public class ExampleJdbcDao extends


public void clearDatabase() throws DataAccessException {

.update("DELETE FROM imagedb");


public void deleteImage(int imageId) throws DataAccessException {

.update("DELETE FROM imagedb WHERE id=?",

new Object[] {new Integer(imageId)});


public int getNrOfImages() throws DataAccessException {



"SELECT COUNT(*) FROM imagedb");




Export POJOs as remote services

in server
side Spring applications

through Spring remote service exporter

Make remote services accessible

in client
side Spring applications

through Spring remote proxy factory

Protocol choice is configuration matter

Hessian, Burlap, SOAP, RMI, HTTP invoker

protocol to be chosen according to requirements

Support for integration of EJBs

through Spring EJB proxy factory

declarative proxies for Stateless Session Beans

Further Services

JMS Support

lightweight messaging

JCA Support

access to J2EE Connectors

Mail Support


Scheduling Support

Quartz, Timer

Web Application Support

Struts, JSF, WebWork, Tapestry

Spring Web MVC, Spring Web Flow

Summary (1)

Spring is a popular Java application framework

core container, AOP framework

transactions, data access, remoting

dedicated support for J2EE environments

integrating with many existing solutions

Solves ubiquitous architectural issues

wiring and configuration of components

flexible configuration of interceptors

declarative transaction demarcation

implicit management of resources

Summary (2)

Works in any environment

no special compilation or deployment steps

no special class loader

can run on J2EE, but not tied to J2EE

seamless switching between deployment scenarios

For any kind of application

J2EE web applications running on e.g. Tomcat

full J2EE applications running on e.g. WebLogic

rich clients (usually with J2EE server as backend)

standalone applications (with GUI or headless)