© Visual Patterns, Inc.

Agile Java Development
With Spring, Hibernate and Eclipse
Anil Hemrajani
anil@visualpatterns.com
2
© Visual Patterns, Inc.
About This Presentation
• Not a tutorial on any one technology!
• Road map for building enterprise-class Java
applications … using various “hot” agile methods and
simpler Java technologies
Requirements > Design > Code > Monitor
• Downloadable code - Sample “time sheet” application
used here
• Note: Working knowledge of Java is expected for this
presentation!
3
© Visual Patterns, Inc.
Some Material Taken From My Recent Book
Agile Java Development
With Spring, Hibernate and Eclipse
1. Introduction to Agile Java Development
2. The Sample Application: An Online
Timesheet System
3. XP and AMDD-Based Architecture and
Design Modeling
4. Environment Setup: JDK, Ant, and JUnit
5. Using Hibernate For Persistent Objects
6. Overview of the Spring Framework
7. The Spring Web MVC Framework
8. The Eclipse Phenomenon
9. Logging, Debugging, Monitoring and
Profiling
10. Beyond the Basics
11. What Next?
12. Parting Thoughts

Appendices (with lots of goodies)
available on amazon.com
Forewords by Scott W. Ambler and Rod Johnson
4
© Visual Patterns, Inc.
Book Related Talks
5
© Visual Patterns, Inc.
My Background (details at VisualPatterns.com)
• 20 years of experience in the IT

Working with Java Technology since late 1995 as a developer,
entrepreneur, author, and trainer.

Helped several U.S. based Fortune 100 companies (some smaller
organizations)

Published a book and 30 articles

Presented at conferences and seminars around the world

Awards:

"Outstanding Contribution to the Growth of the Java Community"

"Best Java Client" for BackOnline (a Java-based online backup
product)

Nominated for a Computerworld-Smithsonian award by Scott McNealy
• Founder of:

Isavix Corporation – successful IT solutions company (now
InScope Solutions)

Isavix Community (now DeveloperHub.com) - award-winning online
developer community (grew to over 100,000 registered members)
• These days: Consultant/Author; details at
VisualPatterns.com
6
© Visual Patterns, Inc.
Practical Stuff, Not Fluff!
• Recently completed project for U.S. Fortune 50
company
• Application

Financial application process billions of $ every week

Clustered application (99.9% uptime required)

Technologies: Spring, Hibernate, JUnit, Ant, Eclipse,
etc.
7
© Visual Patterns, Inc.
Agenda
1.Introduction to Agile Java Development
2.Agile Processes
3.Agile Modeling
4.Agile Development

Environment Setup: Directory Structure, JDK, Ant and
JUnit

Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!

Logging, Debugging, Monitoring, and Profiling
5.Beyond The Basics
© Visual Patterns, Inc.
Introduction to Agile Java Development
Assume simplicity.
Travel light.
- Agile Modeling principles:
agilemodeling.com
9
© Visual Patterns, Inc.
What Is Agile Java Development? It Could Include…
1.Agile Software Processes
 Iterative Development
 Use an Agile method - Scrum, XP, etc.
• Agile Architecture/Design Modeling

Incremental design with “good enough” models

Use an agile method - Agile Model Driven Development
(AMDD)
• Agile Java Design/Development

Simple design and coding!

Test-driven development (TDD)

Efficient frameworks and tools (Ant, JUnit, Hibernate,
Spring, Eclipse…)

Plain Old Java Objects (POJOs), whenever possible
© Visual Patterns, Inc.
Agile Processes
Requirements change.
Design evolves.
Documents are seldom
current.
© Visual Patterns, Inc.
Some Stats by The Standish Group (standishgroup.com)
12
© Visual Patterns, Inc.
The Solution
CHAOS Ten – Success
Factors
source:
standishgroup.com
In 2001, seventeen software pundits came
together to unify their methodologies under one
umbrella; they jointly defined the term, Agile!
Read story at:
martinfowler.com/articles/agileStory.html
13
© Visual Patterns, Inc.
AgileManifesto.org
14
© Visual Patterns, Inc.
Term “Agile” Incorporates a Wide Range of Methods
• AM - Agile Modeling
• ASD - Adaptive Software Development
• AUP - Agile Unified Process
• Crystal
• FDD - Feature Driven Development
• DSDM - Dynamic Systems Development Method
• Lean Software Development
• Scrum
• Xbreed
• XP - eXtreme Programming
• Others…
© Visual Patterns, Inc.
“Agility” - All About Smaller Chunks (Shorter/Frequent
Cycles)
...
Iteration
0
Iteration
1
Iteration
n
Release 1
...
Release 2
Iteration
0
Iteration
1
Iteration
n
...
software software
software software software software
Incrementally Build Software - Highest Priority Features First!
16
© Visual Patterns, Inc.
Agile Method: Scrum
• Simple process for product/project management
• Product Backlog - List of known
features/changes for product
• Sprint - 1-month iterations (develop highest
priority items)
• Meetings

Sprint Planning Meeting – Done at beginning of each sprint
(after planning, features moved from product backlog to sprint
backlog)

Daily scrum meeting (short: 15 minutes)

Sprint review meeting
17
© Visual Patterns, Inc.
Agile Method: Extreme Programming (XP)
• Shorter and Frequent Cycles (smaller chunks!)

Release - Quarterly Cycles (set a theme)

Iteration - Weekly Cycles (e.g. aim for last day of
week)

10-minute builds

Continuous integration (multiple times per day; manual
or automatic)

Incremental Design and Planning (defer investment till
needed)

Development in small increments using Test-First
development
• Communications - Sit Together, Informative
Workspace, on-site customer
• Flow - sustainable pace versus rigid phases;
velocity, continuous integration
• Others… visit extremeprogramming.org
18
© Visual Patterns, Inc.
Presentation Outline

Introduction to Agile Java Development

Agile Processes
• Agile Modeling
• Agile Development

Environment Setup: Directory Structure, JDK, Ant and
JUnit

Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!

Logging, Debugging, Monitoring, and Profiling
• Beyond The Basics
© Visual Patterns, Inc.
Agile Modeling
“...your goal is to build a shared
understanding, it isn’t to write detailed
documentation.”
- Scott W. Ambler
20
© Visual Patterns, Inc.
Quick Poll
Have you ever been on
a project where
documentation was kept
up-to-date through end
of project?
© Visual Patterns, Inc.
Agile Modeling Values, Practices & Principles
(agilemodeling.com)
Values

Communication, simplicity, feedback, courage and humili ty.

Practices Principles

Core Practices:
Active Stakeholder Participation
Model with Others
Apply the Right Artifact(s)
Iterate to Another Artifact
Prove I t with Code
Use the Simplest Tools
Model in Small Incr ements
Singl e Source Information
Collective Ownership
Create Several Models in Paral lel
Create Simple Content
Depi ct Models Simply
Display Models Publicly

Supplementary Practices:
Apply Modeling Standards
Apply Patterns Gently

Discar d Temporary Models
Formali ze Contract Models
Update Only When It Hurts
Real ly Good Ideas:
Refactoring
Test-First Design

Core Principles:
Model with a Purpose
Maximize Stakeholder Investment
Travel Light
Multiple Models
Rapid Feedback
Assume Simplicity
Embrace Change
Incremental Change
Qual ity Work
Software Is Your Primary Goal
Enabli ng the Next Effort Is Your
Secondary Goal

Supplementary Principles:
Content Is More I mportant Than
Representation
Open and Honest Communicat ion



© Visual Patterns, Inc.
"A preliminary work or
construction that serves
as a plan from which a
final product is to be
made ... used in testing
or perfecting a final
product."
Definition Of Word “Model” (freedictionary.com)
Word “model” used to describe
diagrams and other artifacts,
in this presentation.
23
© Visual Patterns, Inc.
Agile Model Driven Development (AMDD)
• Subset of Agile Modeling (agilemodeling.com)
• Agile version of Model Driven Development (MDD)
• Instead of extensive models, “barely good
enough”
• Initial modeling activity
1. Requirements
2. Architecture
• Requirements modeling

Usage models

Domain models

UI models
• Architecture modeling

Free-form diagrams

Change cases
Let’s apply
this to a
sample
application
, next ...
24
© Visual Patterns, Inc.
Initiating A New Software Application Project
25
© Visual Patterns, Inc.
Problem Statement
Our employees currently submit
their weekly hours worked using a
paper-based timesheet system that
is manually intensive and error-
prone.
We require an automated solution
for submitting employee hours
worked, in the form of an
electronic timesheet, approving
them, and paying for the time
worked.
In addition, we would like to have
automatic notifications of
timesheet status changes and a
weekly reminder to submit and
approve employee timesheets.
26
© Visual Patterns, Inc.
Project Kickoff Meeting
27
© Visual Patterns, Inc.
Choices Of Release (High) Level Models
Model with a purpose -- shared understanding!
domain model user stories
UI prototype
& flow map
architecture
Release
Level
Models
scope table,
glossary, etc.
CRC cards
application
flow map
UML
diagrams
database
model
Iteration
Level
Models
acceptance
tests
28
© Visual Patterns, Inc.
Sample Scope Table
Shared understanding: what's in and
what's out
Scope Functionality
Include Time Expression will provide the capability to enter, approve, and
pay for hours worked by employees.
Defer Time Expression will not calculate deductions from paychecks, such
as federal/state taxes and medical expenses.
Defer Time Expression will not track vacation or sick leave.

29
© Visual Patterns, Inc.
Domain Model
Shared understanding: business concepts > key
domain objects
30
© Visual Patterns, Inc.
User Stories Or Use Cases
Shared understanding: features
required of software
3
XP Style User Story
Card
Use Case: Login
Author
Anil Hemrajani
Description
Thisprocess allows User to log into theSystem
Actors/I nterfaces
• 4M Tpoôrp
• Tnr Lvotrµ
Tpiy y r p
Yorprrpoopµo o Aoyiv o)tiov
Hpr )ov ôi tiovo
• N/A
Lu))roo/B ooi) 4iou
1. Tnr Lvot rµ ôioriovotnr Aoyiv rovri rpoµ rtivy Yorp oop ioyiv ôrtoiioooorr)ioirô iv
tnr
2. Yorp )oµ rirtro oii pruuiprô oiriôo ovô rrpoopµo o Luþµi t o)tiov.
4oiiupr /A itrpv otiGr 4iou
IvGoiiôYorpIA ovô/op Hooouopô Tnr ovotrµ votioiro 4Mtpoôrpuitntnr µroooyr ®IvGoiiôYorp
IA ovô/op Hooouopô ©. Tnr ovotrµôioriovo tnr Aoyiv rovrito Yorpuitntnr )ovtrvto oooiioiriôo
rµrtv.

Use Case - Casual, Brief or Fully Dressed
31
© Visual Patterns, Inc.
User Interface (UI) Prototype
Shared understanding: functionality,
look-and-feel, etc.
32
© Visual Patterns, Inc.
UI Flow Map (Storyboard)
Shared understanding: user interface
navigation/flow
33
© Visual Patterns, Inc.
High-Level Architecture Diagram
Shared understanding: technologies, scalability,
security, reliability
BEA WebLogic Server
Objects managed by Spring IoC Container
HTTP
JDBC
View
JSP/HTML
Controller
Spring
DispatcherServlet
Web
Browser
Model
Business objects,
Hibernate beans
Spring
Schedul
er
RDBMS
(Oracle)
34
© Visual Patterns, Inc.
Shared understanding: common
terminology
Glossary - List Of Common Business/Technical Terms
• Accounting
The accounting department/staff.
• Approved
Status of a timesheet when a Manager approves a
previously submitted timesheet.
• Employee
A person who works on an hourly basis and
reports to a manager.
• Paid
Status of a timesheet when the accounting
department has issued a check.
• Etc…
35
© Visual Patterns, Inc.
Choices Of Iteration Level (Detailed) Models
domain model user stories
UI prototype
& flow map
architecture
Release
Level
Models
scope table,
glossary, etc.
CRC cards
application
flow map
UML
diagrams
database
model
Iteration
Level
Models
acceptance
tests










36
© Visual Patterns, Inc.
Iteration Level Details - Acceptance Tests & Active
Stakeholders
• Sign In

The employee id can be up to 6 characters. The
password must be between 8 and 10 characters.

Only valid users can sign in.
• Timesheet List

Only a user's personal timesheets can be
accessed.
• Enter Hours

Hours must contain numeric data.

Daily hours cannot exceed 16 hours. Weekly
hours cannot exceed 96 hours.

Hours must be billed to a department.

Hours can be entered as two decimal places.

Employees can only view and edit their own
timesheets.
37
© Visual Patterns, Inc.
Exploring Classes Using CRC Cards
Class Name (Noun)
Responsibilities (obligations
of this class , such as business
methods, exception handling,
security methods,
attributes/variables).
Collaborators (other
classes required to
provide a complete
solution to a high -level
requirement)

TimesheetManager
Fetches timesheet(s) from
database
Saves timesheet to database
Timesheet

Timesheet
Knows of period ending date
Knows of time
Knows of department code


domain model
Timesheet List
screen
First, let's reflect on
what we know, domain model,
UI and architecture
Second, let's explore classes
on CRC cards using both as
input models
free-form
architecture
38
© Visual Patterns, Inc.
Application Flow Map (Home Grown Artifact)
• Complementary to class diagrams and CRC cards
• Can be extended using CRUD columns
Story Tag View Controller Class Collaborators Tables
Impacted
Timesheet
List
timesheetlist TimeSheetListController TimesheetManager Timesheet
Enter
Hours
enterhours EnterHoursController TimesheetManager Timesheet
Department

39
© Visual Patterns, Inc.
UML Class and Package Diagrams
40
© Visual Patterns, Inc.
Focus Is On Working Software vs. Comprehensive
Documentation
Physical Models
CRC cards
application
flow map
UML
diagrams
database
model
acceptance
tests
Conceptual Models
user stories
architecture
problem
statement
domain model
scope
table
glossary
UI prototype
& flow map
Implementation
Data Base Code Base
THE FINAL AND LASTING ARTIFACTS!




UI
prototypes • Model in Small Increments

Depict Models Simply
• Discard temporary models

Prove it with code
- agilemodeling.com
41
© Visual Patterns, Inc.
Shifting Some Upfront Design to Refactoring
42
© Visual Patterns, Inc.
Shifting Some Upfront Design To Refactoring (Continuous
Design)
• Refactoring is not a new concept; the term is
relatively new
• refactoring.com

“Refactoring is a disciplined technique for
restructuring an existing body of code, altering its
internal structure without changing its external
behavior.”
- Martin Fowler

Over 100 refactoring techniques; for example:

Extract superclass

Extract interface

Move class

Move method
43
© Visual Patterns, Inc.
Agile Draw - Elegantly Simple Modeling Technique
UI Flow Map
Conceptual Class
Diagram
Visit AgileDraw.org
High-Level
Architecture
44
© Visual Patterns, Inc.
Presentation Outline

Introduction to Agile Java Development

Agile Processes

Agile Modeling
• Agile Development

Environment Setup: Directory Structure, JDK, Ant and
JUnit

Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!

Logging, Debugging, Monitoring, and Profiling
• Beyond The Basics
© Visual Patterns, Inc.
Agile Java Development:
Environment Setup (Directory Structure, JDK, Ant, and
JUnit)
46
© Visual Patterns, Inc.
Quick Poll
How many of you are
using Ant, JUnit,
Maven, Cruise Control,
etc?
47
© Visual Patterns, Inc.
Personal Opinion:
Early Environment
Setup Is Essential

Involves more than people
expect/plan

Cycle 0
• Get minimal environment setup
(scripts, directory, version
control, etc.)
• Get end-to-end demo working

Helps team
48
© Visual Patterns, Inc.
Directory Structure, Naming Conventions, Version
Control, etc.

controller/TimesheetListController.java

model/Timesheet.java

model/TimesheetManager.java

test/TimesheetListControllerTest.java

test/TimesheetManagerTest.java

view/timesheetlist.jsp
49
© Visual Patterns, Inc.
Ant (ant.apache.org)
• Ant task types

Compile tasks (that is,
javac)

Deployment tasks

File tasks such as copy,
delete, move, and others.

Property tasks for
setting internal
variables

Audit/coverage tasks

Database tasks

Documentation tasks

Execution tasks

Mail tasks

Preprocess tasks

Property tasks

Remote tasks

Miscellaneous tasks (e.g.
echo)
<ftp server="mirrors.kernel.org"
action="get"
remotedir="/gnu/chess"
userid="anonymous"
password="guest@guest.com"
verbose="yes"
binary="yes">
<fileset file="README.gnuchess"/>
</ftp>
<mail tolist="friend@somehost.com"
subject="Hello!"
from="me@myhost.com"
mailhost="myhost.com"
user="myuserid"
password="mypassword"/>
50
© Visual Patterns, Inc.
JUnit (junit.org)
• Originally written by

Erich Gamma (Gang of Four, Design Patterns)

Kent Beck (author of Extreme Programming and Test Driven
Development)

• Simple framework – various assert methods

assertEquals

assertFalse

assertNotNull

assertNotSame

assertNull

assertSame

assertTrue
public class SimpleTest extends junit.framework.TestCase
{
int value1 = 2, value2 = 3, expectedResult = 5;
public static void main(String args[])
{
junit.textui.TestRunner.run(suite());
}
public static Test suite()
{
return new TestSuite(SimpleTest.class);
}
public void testAddSuccess()
{
assertTrue(value1 + value2 == expectedResult);
}
}
51
© Visual Patterns, Inc.
JUnit GUI Based Testing
Console Runner
Eclipse Plug-in
52
© Visual Patterns, Inc.
Agile Method: Test Driven Development (TDD) w/ JUnit
• A term coined by Kent Beck
• Also, a XP practice (test-first)
• “Red - Green - Refactor”
• Several benefits to this approach:

Minimal code written to satisfy requirements (nothing more, nothing less!)

If code passes the unit tests, it is done!

Can help design classes better (from a client/interface perspective)

Refactor with confidence
Write unit test code
More unit test code
More unit test code
Write some actual code
More actual code
More actual code
Write Test First Code, Compile, Test
53
© Visual Patterns, Inc.
Presentation Outline

Introduction to Agile Java Development

Agile Processes

Agile Modeling
• Agile Development

Environment Setup: Directory Structure, JDK, Ant and
JUnit

Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!

Logging, Debugging, Monitoring, and Profiling
• Beyond The Basics
© Visual Patterns, Inc.
Agile Java Development:
Using Hibernate For Persistent Objects
55
© Visual Patterns, Inc.
Quick Poll
What persistence
solution does your
project use (e.g.
JDBC, ORM, entity
bean)?
56
© Visual Patterns, Inc.
Where Hibernate Fits Into Our Architecture
57
© Visual Patterns, Inc.
An Overview of Object-Relational Mapping (ORM)
• ORM - Java object to database table/record mapping

Java = objects

database = relational
• Relationships

unidirectional and bidirectional

relations in a relational database are bidirectional by
definition
• Cardinality (OO term is multiciplicity)

One-to-one

one-to-many

many-to-one

and many-to-many
• Object Identity
• Cascade
• Others…
58
© Visual Patterns, Inc.
Hibernate Basics
• Dialect
(DB2, Microsoft SQL Server, MySQL, Oracle,
PostgreSQL, SAP DB, Sybase, TimesTen…)
• SessionFactory, Session, and Transaction
• Work with Database Records (as Java Objects)
• Object States - persistent, detached, and
transient
• Data Types – more than you'll likely need!
• Hibernate Query Language (HQL) – powerful SQL-
like language
59
© Visual Patterns, Inc.
From Domain Model To A (Denormalized) Physical Data
Model
60
© Visual Patterns, Inc.
Working With Hibernate - Simple Example Using
Department
• hibernate.cfg.xml – Hibernate configuration file
(DB configuration)
<property name="connection.url">
jdbc:hsqldb:hsql://localhost:9005/timex</property>
<mapping resource="Department.hbm.xml" />
• Department.hbm.xml – Mapping file for our
Department table
<class name="com.visualpatterns.timex.model.Department"
table="Department">
<id name="departmentCode" column="departmentCode">
<property name="name" column="name"/>
• Department.java – Bean file with two variables:
String departmentCode;
String name;
// Setter and getter methods
• HibernateTest.java – Simple test program (on
next slide)
61
© Visual Patterns, Inc.
HibernateTest.java
SessionFactory sessionFactory = new Configuration().configure()
.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
Department department = (Department)
session.get(Department.class, "IT");
System.out.println("Name for IT = " + department.getName());
...
List departmentList = session.createQuery("from Department").list();
for (int i = 0; i < departmentList.size(); i++)
{
department = (Department) departmentList.get(i);
System.out.println("Row " + (i + 1) + "> " +
department.getName()
+ " (" + department.getDepartmentCode() + ")");
}
...
sessionFactory.close();
62
© Visual Patterns, Inc.
Other Hibernate Features
• Saving (save, merge, saveOrUpdate)
session.saveOrUpdate(timesheet)
• Deleting records

session.delete(Object), or

session.createQuery("DELETE from Timesheet")
• Queries using Criteria interface (more OO and
typesafe)

List timesheetList =
session.createCriteria(Timesheet.class)
.add(Restrictions.eq("employeeId", employeeId))
.list();

Related classes: Restrictions, Order, Junction, Distinct, and
others
• Locking Objects (Concurrency Control)
• Lots More Hibernate (associtions, annotations,
filters, interceptors, scrollable iterations, native
SQL, transaction management, etc.)
63
© Visual Patterns, Inc.
Presentation Outline

Introduction to Agile Java Development

Agile Processes

Agile Modeling
• Agile Development

Environment Setup: Directory Structure, JDK, Ant and
JUnit

Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!

Logging, Debugging, Monitoring, and Profiling
• Beyond The Basics
© Visual Patterns, Inc.
Agile Java Development:
The Spring Framework
65
© Visual Patterns, Inc.
Spring Modules
66
© Visual Patterns, Inc.
Spring Java Packaging (org.springframework.)
© Visual Patterns, Inc.
Quick Poll
Are you familiar with
Inversion of Control
(IoC)?
68
© Visual Patterns, Inc.
• Dependency Injection Styles

Two Supported By Spring:

Setter/getter based

Constructor based

Fowler suggests a 3
rd
, interface injection,
http://www.martinfowler.com/articles/injection.html
• Spring IoC Concepts: Beans, BeanFactory,
ApplicationContext…
IoC Container And Dependency Injection Pattern
public class A
{
B myB = new B();
C myC = new C();
}
public class A
{
public setB(B myB)
public setC(C myC)
Class A
Class C Class B
IOC
Container
Normal Way
Using IoC
69
© Visual Patterns, Inc.
Benefits of Using Spring
• Light weight Inversion of Control (IoC)
container
• Excellent support for POJOs (e.g. declarative
transaction management)
• Modular – not an all-or-nothing approach
• Testing – dependency injection and POJOs makes
for easier testing
• Many others

No Singletons

Builds on top of existing technologies (e.g. JEE,
Hibernate)

Robust MVC web framework

Consistent database exception hierarchy (e.g. wrap
SQLException)
70
© Visual Patterns, Inc.
Where Spring Framework Fits Into Our Architecture
Optional
Hibernate
integration
71
© Visual Patterns, Inc.
Quick Poll
Which web framework do
you use?
72
© Visual Patterns, Inc.
Spring Web MVC
• Easier testing – mock classes, dependency injection
• Bind directly to business objects
• Clear separation of roles – validators, adaptable
controllers, command (form) object, etc.
• Simple but powerful tag libraries
• Support for various view technologies and web
frameworks (e.g. Struts, webwork, tapestry, JSF)
73
© Visual Patterns, Inc.
Spring MVC Java Concepts
1.Controller
2.ModelAndView
3.Command (Form
Backing)
Object
4.Validator
5.Spring Tag
Library
(spring:bind)
74
© Visual Patterns, Inc.
<bean id="urlMapAuthenticate”
class=
"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<prop key="/enterhours.htm">enterHoursController</prop>
...
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
Spring MVC Configuration
<servlet>
<servlet-name>timex</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>timex</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
timex-
servlet.xml
web.xml
75
© Visual Patterns, Inc.
Sample End-To-End Flow Using Spring and Hibernate
76
© Visual Patterns, Inc.
Timesheet List: A No-Form Controller Example
public class TimesheetListController
implements Controller
{
...
public ModelAndView handleRequest(
HttpServletRequest request,
HttpServletResponse response)
mockHttpServletRequest =
new MockHttpServletRequest("GET",
"/timesheetlist.htm");
ModelAndView modelAndView =
timesheetListController.handleRequest(
mockHttpServletRequest, null);
assertNotNull(modelAndView);
assertNotNull(modelAndView.getModel());
77
© Visual Patterns, Inc.
Enter Hours: A Form Screen
public class EnterHoursController extends SimpleFormController
1.
EnterHoursController.jav
a
2.
EnterHoursValidator.java
3. enterhours.jsp
78
© Visual Patterns, Inc.
View/JSP Code – Spring and JSTL Tag Libraries
<spring:bind path="command.employeeId">
<input name='<c:out value="${status.expression}"/>'
value='<c:out value="${status.value}"/>'
type="text" size="6" maxlength="6">
</spring:bind>
Special (Spring) variable named status

status.value

status.expression

status.error

status.errorMessage

status.errorMessages

status.displayValue
79
© Visual Patterns, Inc.
public class HttpRequestInterceptor extends HandlerInterceptorAdapter
{
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler)
{
if (!signedIn)
{
response.sendRedirect(this.signInPage);
return false;
}
Sign In (Authentication) - Spring HandlerInterceptor
80
© Visual Patterns, Inc.
Other Spring Web Stuff
• View with no controllers (e.g. only JSP files)
<bean id="urlFilenameController"
class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>
<prop key="/help.htm">urlFilenameController</prop>
• Spring 2.0 – new tag libraries

form:form - org.springframework.web.servlet.tags.form.FormTag

form:input- org.springframework.web.servlet.tags.form.InputTag

form:password -
org.springframework.web.servlet.tags.form.PasswordInputTag

form:hidden -
org.springframework.web.servlet.tags.form.HiddenInputTag

form:select -
org.springframework.web.servlet.tags.form.SelectTag

form:option -
org.springframework.web.servlet.tags.form.OptionTag

form:radiobutton -
org.springframework.web.servlet.tags.form.RadioButtonTag

Others…
• Other

Web Flow – gaining a lot of momentum! Wizard-like
features.

Portlet API – based on JSR-168 Portlet Specification
(jcp.org).
81
© Visual Patterns, Inc.
Spring ORM Module: Support for Hibernate
• Management of sessionfactory and session (no
close calls)
• Declarative transaction management in light-
weight containers
• Easier testing (pluggable Sessionfactory via
XML file)
• Less lines of code – focus on business logic!
82
© Visual Patterns, Inc.
Spring ORM Module: Support for Hibernate (cont’d)
Less lines of
code
File Programmatic Declarative
DepartmentManager.java 39 22
EmployeeManager.java 66 36
TimesheetManager.java 166 87
TOTAL 271 145

Session session =
HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
try
{
session.saveOrUpdate(timesheet);
session.getTransaction().commit();
}
catch (HibernateException e)
{
session.getTransaction().rollback();
throw e;
}
getHibernateTemplate().saveOrUpdate(timesheet);
83
© Visual Patterns, Inc.
More Spring…
• Scheduling Jobs (with Quartz or
JDK timers)
• Spring email support
• Much more

JEE support

Sub-projects (Acegi, BeanDoc, Spring
IDE, etc.)
<bean id="reminderEmailJobDetail" class=
"org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="reminderEmail" />
<property name="targetMethod" value="sendMail" />
</bean>
<bean id="reminderEmailJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reminderEmailJobDetail" />
<property name="cronExpression" value="0 0 14 ? * 6" />
</bean>
84
© Visual Patterns, Inc.
Presentation Outline

Introduction to Agile Java Development

Agile Processes

Agile Modeling
• Agile Development

Environment Setup: Directory Structure, JDK, Ant and
JUnit

Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!

Logging, Debugging, Monitoring, and Profiling
• Beyond The Basics
© Visual Patterns, Inc.
Agile Java Development:
The Eclipse Phenomenon!
86
© Visual Patterns, Inc.
Quick Poll
Which IDE do you use?
87
© Visual Patterns, Inc.
The Eclipse Foundation, Platform and Projects
• Foundation

Originally developed by Object Technology International
(OTI), purchased by IBM ($40 million) and donated it to
open source!

Recruited various corporations; from eclipse.org:
Industry leaders Borland, IBM, MERANT, QNX Software Systems,
Rational Software, Red Hat, SuSE, TogetherSoft and Webgain
formed the initial eclipse.org Board of Stewards in November
2001. By the end of 2003, this initial consortium had grown to
over 80 members.

My view: Eclipse foundation is similar to Apache foundation for
GUI tools
• Platform objectives

robust platform for highly integrated dev tools

enable view and/or editing of any content type

attract a large community of developers to develop plug-
ins
• Projects
Application Development, editors, modeling, performance,
testing, reporting, and many more
88
© Visual Patterns, Inc.
Personal Opinion:
The Java versus
Microsoft Thing

First exciting IDE

Huge community - Plug-ins galore
(thousand+)

Ward Cunningham and Erich Gamma

Battle of IDEs has only now begun!
89
© Visual Patterns, Inc.
How Eclipse Can Help With Our Application
90
© Visual Patterns, Inc.
Eclipse Basic Concepts
• Workspace (directory of
projects)
• Workbench
• Perspectives
• Editors and Views
• Project
• Wizards (hundreds)
• Plug-ins (galore!)
sample
workspace
91
© Visual Patterns, Inc.
Eclipse Plug-in: Java Development Tools (JDT)
Ant Assist
Java Browsing
Java Compile
Errors/Warnings
JUnit
92
© Visual Patterns, Inc.
JDT: Other Notable Features
• Compile during save (within the blink of an eye)
• Formatting options
• Scrapbook
• TODO lists
• Others

Powerful search

Code refactoring (some based on Fowler's
refactoring.com)

Export feature (create zip files, etc.)
93
© Visual Patterns, Inc.
Eclipse Plug-In: Web Tools Platform (WTP; eclipse.org)
• Tools for developing JEE Web applications
• Editors

Source - HTML, JavaScript, CSS, JSP, SQL, XML, DTD, XSD,
and WSDL

Graphical - XSD and WSDL
• Database access and query tools and models
• Web service wizards
• Other JEE features (EJB, JSP, Servlet…)
• Much more…
94
© Visual Patterns, Inc.
WTP: Notable Features
Database
Servers
JSP Assist
Web Services
95
© Visual Patterns, Inc.
CVS (Eclipse Team Sharing)
96
© Visual Patterns, Inc.
Hibernate and Spring Plug-Ins
Hibernate
Spring
IDE
97
© Visual Patterns, Inc.
Startup Time Comparison To IntelliJ and NetBeans
IntellIJ - 1 minute, 5
seconds!
Eclipse with JDT, WTP, Hibernate, Eclipse... 19
seconds!
NetBeans - 42
seconds.
98
© Visual Patterns, Inc.
Presentation Outline

Introduction to Agile Java Development

Agile Processes

Agile Modeling
• Agile Development

Environment Setup: Directory Structure, JDK, Ant and
JUnit

Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!

Logging, Debugging, Monitoring, and Profiling
• Beyond The Basics
© Visual Patterns, Inc.
Agile Java Development:
Logging, Debugging, Monitoring, and Profiling
100
© Visual Patterns, Inc.
Quick Poll
Do you use a GUI
debugger?
Or, a logging
framework?
Or, use println
statements?
101
© Visual Patterns, Inc.
Logging Basics and Frameworks

Types
• Audit log
• Tracing
• Error
reporting

Pros

No human
interventio
n
(automated)

Great for
head-less
servers

Cons

Performance
hit

Can clutter
code
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CommonsLoggingTest
{
private static Log log =
LogFactory.getLog(CommonsLoggingTest.class);
public static void main(String[] args)
{
log.fatal("This is a FATAL message.");
log.error("This is an ERROR message.");
log.warn("This is a WARN message.");
log.info("This is an INFO message.");
log.debug("This is a DEBUG message.");
}
}
Logging Frameworks
• Alternative to println statements
• Key benefit - Output control (destination, format, log level)
• Most popular - Apache Log4J and JDK Logging
• Jakarta Commons Logging -- bridge to frameworks
102
© Visual Patterns, Inc.
Headaches of Finding and Fixing Bugs!
103
© Visual Patterns, Inc.
Debugging Java Code With Eclipse

Debug
perspectives
and views
• Breakpoints

Step through
code
• Variable
inspection

Hotswap
• Remote
debugging
“consolidated debugging”
104
© Visual Patterns, Inc.
Debugging Web User Interfaces Using Mozilla Firefox
JavaScript
debugger
Web Developer
Tamper Data
105
© Visual Patterns, Inc.
Java Monitoring and Profiling
• Monitoring

JSE 5.0 includes
JConsole

Memory issues

Class loading and
garbage
collection

Management of
MBeans and JDK
logging level,
etc …
• Profiling

Memory usage and
leaks

CPU utilization

Trace objects and
methods

Determine
performance
bottlenecks
<bean id="timexJmxBean” class=
"com.visualpatterns.timex.util.TimexJmxBean" />
<bean id="exporter” class=
"org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="Time Expression:name=timex-stats"
value-ref="timexJmxBean" />
Spring MBean Exporter
106
© Visual Patterns, Inc.
Presentation Outline

Introduction to Agile Java Development

Agile Processes

Agile Modeling

Agile Development

Environment Setup: Directory Structure, JDK, Ant and
JUnit

Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!

Logging, Debugging, Monitoring, and Profiling
• Beyond The Basics
© Visual Patterns, Inc.
Beyond The Basics
108
© Visual Patterns, Inc.
Custom Tag Libraries
public class PayPeriodCheckTag extends TagSupport
{
public int doStartTag()
throws JspException
{
boolean includeText = ; // do something
if (includeText)
return TagSupport.EVAL_BODY_INCLUDE;

return TagSupport.SKIP_BODY;
}
<timex:periodcheck
checkDate="${command.periodEndingDate}">
<input name="save" type="submit" value="Save">
</timex:periodcheck>
109
© Visual Patterns, Inc.
Security, Reliability and Scalability Considerations
110
© Visual Patterns, Inc.
Application Security Considerations
• Authentication (user and application levels)
• Authorization (roles, groups, etc.)
• Encryption (wire protocol, configuration files)
Wire protocol
(HTTP/S)
User-level
authentication
& authorization
Application-level
authentication
111
© Visual Patterns, Inc.
Other Considerations
• Exception Handling

Checked exceptions (e.g. IOException) – required catch
or throw

Unchecked exceptions (e.g. NullPointerException) - no
catch/throw needed

Errors (e.g. OutOfMemoryError)

• Clustering (serialize, no static variables,
simplicity…)
• Multi-threading (JDK 1.5 concurrent API)
• Rich Internet Applications (RIA)

AJaX -

Google Web Toolkit (GWT) -
http://code.google.com/webtoolkit/

Direct Web Remoting (DWR) - http://getahead.ltd.uk/dwr/

Adobe Flex

Java Swing and Web Start
112
© Visual Patterns, Inc.
Cool Concept For Smaller Apps - Entire System In A WAR
File!
• Code (source, binary)
• Relational database (e.g. HSQLDB)
• Job Scheduling
• More…
© Visual Patterns, Inc.
Wrap Up!
© Visual Patterns, Inc.
Presentation Outline
Introduction to Agile Java Development

Agile Processes

Agile Modeling
Agile Development
Environment Setup: Directory Structure, JDK, Ant
and JUnit
Using Hibernate For Persistent Objects
The Spring Framework
The Eclipse Phenomenon!
Logging, Debugging, Monitoring, and Profiling

Beyond The Basics
115
© Visual Patterns, Inc.
Constant Learning – Be a “Generalizing Specialist”
“A
generalizing
specialist
is someone
with a good
grasp of how
everything
fits
together.”
-
agilemodeling.c
om
116
© Visual Patterns, Inc.
Most Important… Don’t Forget To Have Fun! :-)
RON STEVE RAJ SUSAN
© Visual Patterns, Inc.
VisualPatterns.com - Downloadable Application &
Presentation
BEA WebLogic Server
Objects managed by Spring IoC Container
HTTP
JDBC
View
JSP/HTML
Controller
Spring
DispatcherServlet
Web
Browser
Model
Business
objects,
Hibernate beans
Spring
Scheduler
RDBMS
(Oracle)
visualpatterns.com/resources.jsp
• Spring
• Hibernate
• Ant
• JUnit
• DisplayTag
• HSQLDB
118
© Visual Patterns, Inc.
VisualPatterns.com - Other Stuff
Planning Coding
• User stories are written.
· Release planning creates the
schedule.
· Make frequent small releases.
· The Project Velocity is measured.
· The project is divided into iterations.
· Iteration planning starts each
iteration.
· Move people around.
· A stand-up meeting starts each day.
· Fix XP when it breaks.
· The customer is always available.
· Code must be written to agreed
standards.
· Code the unit test first.
· All production code is pair programmed.
· Only one pair integrates code at a time.
· Integrate often.
· Use collective code ownership.
· Leave optimization till last.
· No overtime.
Designing Testing
· Simplicity.
· Choose a system meta phor.
· Use CRCcards for design sessions.
· Create spike solutions to reduce risk.
· No functionality is added early.
· Refactor whenever and wherever
possible.
· All code must have unit tests.
· All code must pass all unit tests before it
can be released.
· When a bug is found tests are created.
· Acceptance tests are run often and the
score is published.

Comics
Cheat Sheets
R&D Concepts
119
© Visual Patterns, Inc.
THE END!
• agilemodeling.com
• agiledata.org
• agilemanifesto.org
• extremeprogramming.org
• hibernate.org
• springframework.org
• eclipse.org
• code.google.com/webtoolkit/
• getahead.ltd.uk/dwr/
• VisualPatterns.com (links, comics, code, cheat
sheets…)
Stay in touch!
Anil@VisualPatterns.com

Sign up to vote on this title
UsefulNot useful

Master Your Semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master Your Semester with a Special Offer from Scribd & The New York Times

Cancel anytime.