You are on page 1of 117

Agile Java Development

With Spring, Hibernate and Eclipse


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!
2
Some Material Taken From My Recent Book

Agile Java Development


With Spring, Hibernate and Eclipse

Forewords by Scott W. Ambler and Rod Johnson

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
available on amazon.com 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) 3


Book Related Talks

4
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


5
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.

6
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

7
Introduction to Agile Java Development

Assume simplicity.

Travel light.

- Agile Modeling principles:


agilemodeling.com
What Is Agile Java Development? It Could Include…
1. Agile Software Processes
 Iterative Development
 Use an Agile method - Scrum, XP, etc.

2. Agile Architecture/Design Modeling


 Incremental design with “good enough” models
 Use an agile method - Agile Model Driven Development
(AMDD)

3. 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

9
Agile Processes

Requirements change.

Design evolves.

Documents are seldom


current.
Some Stats by The Standish Group (standishgroup.com)
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
12
AgileManifesto.org

13
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…

14
“Agility” - All About Smaller Chunks (Shorter/Frequent
Cycles)

Release 1 Release 2

Iteration
0
Iteration
1
...Iteration
n
Iteration
0
Iteration
1
...Iteration
n
...

Incrementally Build Software - Highest Priority Features First!

software software software software software software


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

16
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 17
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

18
Agile Modeling

“...your goal is to build a shared


understanding, it isn’t to write detailed
documentation.”

- Scott W. Ambler
Quick Poll

Have you ever been on


a project where
documentation was kept
up-to-date through end
of project?

20
Agile Modeling Values, Practices & Principles
(agilemodeling.com)
Values

Communic
ation, simplicity, feedback, courage and humility.

Practices Principles

Core Practices: Core Principles:


Active Stakeholder Participation Model with a Purpose
Model with Others Maximize Stakeholder Investment
Apply the Right Artifact(s) Travel Light
Iterate to Another Artifact Multiple Models
Prove I t with Code Rapid Feedback
Use the Simplest Tools Assum e Simplicity
Model in Small Incr ements Embrace Cha nge
Single Source Information Incremental Change
Collective Ownership Quality Work
Create Several Models in Parallel Software Is Your Primary Goal
Create Simple Content Enabling the Next Effort Is Your
Depict Models Simply Secondary Goal
Display Models Publicly
Supplementary Principles:
Supplementary Practices: Content Is More I mportant Than
Apply Modeling Standards Representation
Apply Patterns Gently Open and Honest Comm unicat
ion

Discard Temporary Models


Formalize Contract Models
Update Only When It Hurts
Really Good Ideas:
Refactoring
Test-First Design
Definition Of Word “Model” (freedictionary.com)

"A preliminary work or


construction that serves
as a plan from which a
final product is to be
made ... used in testing
or perfecting
Word “model” used ato final
describe
product."
diagrams and other artifacts,
in this presentation.
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


Requirements
Architecture

Requirements modeling
 Usage models
 Domain models
 UI models
Let’s apply
this to a
Architecture modeling
sample
 Free-form diagrams
 Change cases
application
, next ...
23
Initiating A New Software Application Project

24
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 25
Project Kickoff Meeting

26
Choices Of Release (High) Level Models

Release
scope table, UI prototype
Level domain model user stories architecture
Models glossary, etc. & flow map

Iteration
acceptance application UML database
Level CRC cards
Models tests flow map diagrams model

Model with a purpose -- shared understanding!

27
Sample Scope Table

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.

Shared understanding: what's in and


what's out

28
Domain Model

Shared understanding: business concepts > key


domain objects
29
User Stories Or Use Cases

Use Case: Login


Author
Anil Hemrajani

Description
This process allows User to log into the System

Actors/I nterfaces
XP Style User Story • FM Trader

Card
• The System

Trigger
Userperforms aLogin action

Preconditions
• N/A

Success/B asic Flow


1. The System displaysthe Login panel prompting User forlogin detailsas specified in
the
2. Usercompletes allrequired fields and performs a Submit action.

Failure/A lternative Flow


InvalidUser ID and/or Password- The systemnotifies FM traderwith the message“InvalidUser
ID and/or Password”. The systemdisplaysthe Login panelto User with the contents of all fields
empty.

Use Case - Casual, Brief or Fully Dressed

Shared understanding: features


required of software 30
User Interface (UI) Prototype

Shared understanding: functionality,


look-and-feel, etc. 31
UI Flow Map (Storyboard)

Shared understanding: user interface


navigation/flow
32
High-Level Architecture Diagram

Web HTTP
Controller Model JDBC
Spring Business objects,
RDBMS
Browser DispatcherServlet Hibernate beans (Oracle)

Spring
View Schedul
JSP/HTML er

Objects managed by Spring IoC Container

BEA WebLogic Server

Shared understanding: technologies, scalability,


security, reliability
33
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…

Shared understanding: common


terminology
34
Choices Of Iteration Level (Detailed) Models

Release

scope table,
  
UI prototype

Level domain model user stories architecture
Models glossary, etc. & flow map

Iteration
acceptance application UML database
Level CRC cards
Models tests flow map diagrams model

35
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.

36
Exploring Classes Using CRC Cards
First, let's reflect on Second, let's explore classes
what we know, domain model, on CRC cards using both as
UI and architecture Cinput
l a s s N a m emodels
(N o un)

R e s p o n s ib ilit ie s ( o b lig a t io n s C o lla b o r a t o r s ( o t h e r


o f t h is c la s s , s u c h a s b u s in e s s c la s s e s r e q u ir e d t o
m e t h o d s , e x c e p t io n h a n d lin g , p r o v id e a c o m p le t e
s e c u r it y m e t h o d s , s o lu t io n t o a h ig h - le v e l
a t t r ib u t e s / v a r ia b le s ) . r e q u ir e m e n t )

Timesheet List
screen
T im e s h e e t L is tC o n tr o lle r

C o n t r o lle r ( in M V C ) fo r T im e s h e e t M a n a g e r
d is p la y in g a lis t o f t im e s h e e t s .

T im e s h e e t M a n a g e r

F e t c h e s t im e s h e e t ( s ) fr o m T im e s h e e t
free-form
architecture d a ta b a s e
S a v e s t im e s h e e t t o d a t a b a s e

T im e s h e e t

K n o w s o f p e r io d e n d in g d a t e

domain model K n o w s o f t im e
K n o w s o f d e p a rtm e n t c o d e

37
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 timesheetlist TimeSheetListController TimesheetManager Timesheet
List
Enter enterhours EnterHoursController TimesheetManager Timesheet
Hours
Department

38
UML Class and Package Diagrams

39
Focus Is On Working Software vs. Comprehensive
Documentation
Conceptual Models
problem
statement
scope


domain model table
user stories

UI glossary
prototypes Model in Small Increments
architecture

Depict Models Simply


Physical Models

acceptance database Discard temporary models


tests model
CRC cards
Prove it with code
application UML
flow map diagrams
- agilemodeling.com
Implementation THE FINAL AND LASTING ARTIFACTS!

Data Base UI prototype


Code Base
& flow map

40
Shifting Some Upfront Design to Refactoring

41
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

42
Agile Draw - Elegantly Simple Modeling Technique

High-Level
Architecture
UI Flow Map

Visit AgileDraw.org
Conceptual Class
Diagram
43
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

44
Agile Java Development:
Environment Setup (Directory Structure, JDK, Ant, and
JUnit)
Quick Poll

How many of you are


using Ant, JUnit,
Maven, Cruise Control,
etc?

46
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
47
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

48
Ant (ant.apache.org)

Ant task types


<ftp server="mirrors.kernel.org"
 Compile tasks (that is, action="get"
javac) remotedir="/gnu/chess"
 Deployment tasks userid="anonymous"
password="guest@guest.com"
 File tasks such as copy, verbose="yes"
delete, move, and others. binary="yes">
 Property tasks for <fileset file="README.gnuchess"/>
</ftp>
setting internal
variables
 Audit/coverage tasks
 Database tasks
 Documentation tasks
 Execution tasks <mail tolist="friend@somehost.com"
subject="Hello!"
 Mail tasks from="me@myhost.com"
 Preprocess tasks mailhost="myhost.com"
user="myuserid"
 Property tasks password="mypassword"/>
 Remote tasks
 Miscellaneous tasks (e.g.
echo) © Visual Patterns, Inc. 49
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 public class SimpleTest extends junit.framework.TestCase
{
int value1 = 2, value2 = 3, expectedResult = 5;
 assertFalse
public static void main(String args[])
 assertNotNull {
junit.textui.TestRunner.run(suite());
}
 assertNotSame
public static Test suite()
 assertNull {
return new TestSuite(SimpleTest.class);
 assertSame }
public void testAddSuccess()
 assertTrue {
assertTrue(value1 + value2 == expectedResult);
}
}

50
JUnit GUI Based Testing

Console Runner

Eclipse Plug-in

51
Agile Method: Test Driven Development (TDD) w/ JUnit
A term coined by Kent Beck
Also, a XP practice (test-first)
“Red - Green - Refactor”

Write Test First Code, Compile, Test


Write unit test code Write some actual code

More unit test code More actual code

More unit test code More actual code

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

52
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

53
Agile Java Development:
Using Hibernate For Persistent Objects
Quick Poll

What persistence
solution does your
project use (e.g.
JDBC, ORM, entity
bean)?

55
Where Hibernate Fits Into Our Architecture

56
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… 57
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 58
From Domain Model To A (Denormalized) Physical Data
Model

59
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
60
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();

61
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, 62
transaction management, etc.)
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

63
Agile Java Development:
The Spring Framework
Spring Modules

65
Spring Java Packaging (org.springframework.)

66
Quick Poll

Are you familiar with


Inversion of Control
(IoC)?
IoC Container And Dependency Injection Pattern
Normal Way Using IoC
public class A
{ Class B Class C
B myB = new B(); public class A
IOC
C myC = new C(); Container {
} public setB(B myB)
Class A public setC(C myC)

Dependency Injection Styles


 Two Supported By Spring:
 Setter/getter based
 Constructor based
 Fowler suggests a 3rd, interface injection,
http://www.martinfowler.com/articles/injection.html

Spring IoC Concepts: Beans, BeanFactory,


ApplicationContext…
68
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 69
Where Spring Framework Fits Into Our Architecture

Optional
Hibernate
integration

70
Quick Poll

Which web framework do


you use?

71
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)

72
Spring MVC Java Concepts

1.Controller

2.ModelAndView

3.Command (Form
Backing)
Object

4.Validator

5.Spring Tag
Library
(spring:bind)

73
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>

web.xml timex-
<bean id="urlMapAuthenticate” servlet.xml
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> 74
Sample End-To-End Flow Using Spring and Hibernate

75
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());

76
Enter Hours: A Form Screen

EnterHoursController.jav
a

EnterHoursValidator.java
enterhours.jsp

public class EnterHoursController extends SimpleFormController

77
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

78
Sign In (Authentication) - Spring HandlerInterceptor

public class HttpRequestInterceptor extends HandlerInterceptorAdapter


{
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler)
{
if (!signedIn)
{
response.sendRedirect(this.signInPage);
return false;
}

79
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…
80
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!

81
Spring ORM Module: Support for Hibernate (cont’d)
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);

File Programmatic Declarative


DepartmentManager.java 39 22
EmployeeManager.java 66 36
TimesheetManager.java 166 87
TOTAL 271 145

Less lines of
code 82
More Spring…
Scheduling Jobs (with Quartz or JDK
timers)
<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>

Spring email support

Much more
 JEE support
 Sub-projects (Acegi, BeanDoc, Spring
IDE, etc.)
83
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

84
Agile Java Development:
The Eclipse Phenomenon!
Quick Poll

Which IDE do you use?

86
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
87
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!

88
How Eclipse Can Help With Our Application

89
Eclipse Basic Concepts

• Workspace (directory of
projects)
• Workbench
• Perspectives
• Editors and Views
• Project
• Wizards (hundreds)

• Plug-ins (galore!)

sample
workspace

90
Eclipse Plug-in: Java Development Tools (JDT)Java Browsing

JUnit

Ant Assist
Java Compile 91
Errors/Warnings
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.)

92
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…

93
WTP: Notable Features
Servers
JSP Assist

Database
Web Services
94
CVS (Eclipse Team Sharing)

95
Hibernate and Spring Plug-Ins

Hibernate

Spring
IDE
96
Startup Time Comparison To IntelliJ and NetBeans

IntellIJ - 1 minute, 5
seconds!

NetBeans - 42
seconds.
Eclipse with JDT, WTP, Hibernate, Eclipse... 19
seconds!

97
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

98
Agile Java Development:
Logging, Debugging, Monitoring, and Profiling
Quick Poll

Do you use a GUI


debugger?
Or, a logging
framework?
Or, use println
statements?

100
Logging Basics and Frameworks
Types Logging Frameworks
1.Audit logAlternative to println statements
2.Tracing Key benefit - Output control (destination, format, log le
3.Error Most popular - Apache Log4J and JDK Logging
reportingJakarta Commons Logging -- bridge to frameworks

Pros import org.apache.commons.logging.Log;


import org.apache.commons.logging.LogFactory;
No human
interventio public class CommonsLoggingTest
n {
private static Log log =
(automated) LogFactory.getLog(CommonsLoggingTest.class);
Great for public static void main(String[] args)
head-less {
servers
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.");
Cons log.debug("This is a DEBUG message.");
Performance }
}

hit
Can clutter 101
Headaches of Finding and Fixing Bugs!

102
Debugging Java Code With Eclipse

Debug
perspectives “consolidated debugging”

and views

Breakpoints

Step through
code

Variable
inspection

Hotswap

Remote
debugging

103
Debugging Web User Interfaces Using Mozilla Firefox
JavaScript
debugger

Web Developer

Tamper Data 104


Java Monitoring and Profiling
Spring MBean Exporter
Monitoring <bean id="timexJmxBean” class=
 JSE 5.0 includes "com.visualpatterns.timex.util.TimexJmxBean" />

JConsole <bean id="exporter” class=


"org.springframework.jmx.export.MBeanExporter">
 Memory issues <property name="beans">
<map>
 Class loading and <entry key="Time Expression:name=timex-stats"
garbage value-ref="timexJmxBean" />

collection
 Management of
MBeans and JDK
logging level,
etc …
Profiling
 Memory usage and
leaks
 CPU utilization
 Trace objects and
methods
 Determine 105
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

106
Beyond The Basics
Security, Reliability and Scalability Considerations

108
Application Security Considerations
Authentication (user and application levels)
Authorization (roles, groups, etc.)
Encryption (wire protocol, configuration files)

User-level
authentication
& authorization

Wire protocol
(HTTP/S) Application-level
authentication

109
Other Considerations
Exception Handling
1.Checked exceptions (e.g. IOException) – required catch
or throw
2.Unchecked exceptions (e.g. NullPointerException) - no
catch/throw needed
3.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/ 110
Cool Concept For Smaller Apps - Entire System In A WAR
File!
Code (source, binary)
Relational database (e.g. HSQLDB)
Job Scheduling
More…

111
Wrap Up!
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
Constant Learning – Be a “Generalizing Specialist”

“A
generalizing
specialist
is someone
with a good
grasp of how
everything
fits
together.”
114
Most Important… Don’t Forget To Have Fun! :-)

RON STEVE RAJ SUSAN


115
THE END!
agilemodeling.com
agiledata.org
agilemanifesto.org
extremeprogramming.org
hibernate.org
springframework.org
eclipse.org

code.google.com/webtoolkit/
getahead.ltd.uk/dwr/

116
Thank you!

You might also like