© visual patterns, inc. agile java development with spring, hibernate and eclipse anil hemrajani...

120
© Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani [email protected]

Upload: rodolfo-alcock

Post on 14-Dec-2015

227 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Agile Java DevelopmentWith Spring, Hibernate and Eclipse

Anil [email protected]

Page 2: © 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! Overview of each technology (use website, books, etc. for details)

Downloadable code (working application) Latest buzz in the US, Europe, etc.

• End-to-end system! Requirements Architecture/design Java development and debugging Deployment Logging/monitoring Advanced considerations

• Content/format (text, graphs, code, comics)

Page 3: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

3© Visual Patterns, Inc.

Material In This Presentation Taken Directly From My Book

Agile Java DevelopmentWith Spring, Hibernate and Eclipse

Forewords by Scott W. Ambler and Rod Johnson

1. Introduction to Agile Java Development2. The Sample Application: An Online Timesheet System3. XP and AMDD-Based Architecture and Design Modeling4. Environment Setup: JDK, Ant, and JUnit5. Using Hibernate For Persistent Objects6. Overview of the Spring Framework7. The Spring Web MVC Framework8. The Eclipse Phenomenon9. Logging, Debugging, Monitoring and Profiling10. Beyond the Basics11. What Next?12. Parting Thoughts Appendices (with lots of goodies)

available on amazon.com

Page 4: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

4© 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 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) DeveloperHub.com (formerly isavix.net) - award-winning online

developer community (grew to over 100,000 registered members)

• At present – VisualPatterns.com and AgileDraw.org

Page 5: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

5© 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)

Used most the technologies covered in presentation(spring, hibernate, eclipse, ant, JUnit…)

Page 6: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

6© Visual Patterns, Inc.

Agenda

1.Introduction to Agile Java Development2.Agile Processes3.Agile Modeling4.Agile Development

Environment Setup: Directory Structure, JDK, Ant and JUnit

Using Hibernate For Persistent Objects (Short Break) The Spring Framework The Eclipse Phenomenon! Logging, Debugging, Monitoring, and Profiling

5.Beyond The Basics

Page 7: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Introduction to Agile Java Development

Assume simplicity.

Travel light.

- Agile Modeling principles: agilemodeling.com

Assume simplicity.

Travel light.

- Agile Modeling principles: agilemodeling.com

Page 8: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

8© Visual Patterns, Inc.

What Is Agile Java Development? It Could Include…

1.Agile Software Lifecycle Processes (e.g. Scrum, XP, TDD)

2.Agile Architecture/Design Modeling Incremental (just-in-time) design “Good enough” diagrams 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

Page 9: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

9© Visual Patterns, Inc.

Sample (Time Sheet) Application Used In This Presentation

BEA WebLogic Server

Objects managed by Spring IoC Container

HTTP JDBC

ViewJSP/HTML

ControllerSpring

DispatcherServlet

Web

Browser

ModelBusiness

objects,

Hibernate beans

SpringScheduler

RDBMS(Oracle)

Downloadable code: visualpatterns.com/resources.jspDownloadable code: visualpatterns.com/resources.jsp

Page 10: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Agile Processes

Requirements change.

Design evolves.

Documents are seldom current.

Requirements change.

Design evolves.

Documents are seldom current.

Page 11: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Some Stats by The Standish Group (standishgroup.com)

Page 12: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

12© Visual Patterns, Inc.

The Solution

CHAOS Ten – Success Factorssource:

standishgroup.com

In 2001, seventeen methodologists came together to unify their methodologies under one umbrella; they jointly defined the term, Agile!

Read story at: martinfowler.com/articles/agileStory.html

In 2001, seventeen methodologists came together to unify their methodologies under one umbrella; they jointly defined the term, Agile!

Read story at: martinfowler.com/articles/agileStory.html

Page 13: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

13© Visual Patterns, Inc.

AgileManifesto.org

Page 14: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

14© Visual Patterns, Inc.

What Does “Agile” Exactly Mean?

The Term Agile incorporates a wide range of methods, for example:

• 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

Page 15: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

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

...Iteration

0Iteration

1Iteration

n

Release 1

...

Release 2

Iteration0

Iteration1

Iterationn

...

softwaresoftware

softwaresoftware softwaresoftware softwaresoftware softwaresoftware softwaresoftware

Incrementally Build Software - Highest Priority Features First!Incrementally Build Software - Highest Priority Features First!

Page 16: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

Page 17: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

17© Visual Patterns, Inc.

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

Page 18: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

Page 19: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Agile Modeling

“...your goal is to build a shared understanding, it isn’t to write detailed documentation.”

- Scott W. Ambler

“...your goal is to build a shared understanding, it isn’t to write detailed documentation.”

- Scott W. Ambler

Page 20: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

20© Visual Patterns, Inc.

Quick Poll

Have you ever been on a project where

documentation was kept up-to-date through end

of project?

Have you ever been on a project where

documentation was kept up-to-date through end

of project?

Page 21: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

21© 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 activity1. Requirements

2. Architecture

• Requirements modeling Usage models Domain models UI models

• Architecture modeling Free-form diagrams Change cases

Page 22: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

22© Visual Patterns, Inc.

Project Initiation

Page 23: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

23© 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.

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.

Page 24: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

24© Visual Patterns, Inc.

Project Kickoff Meeting

Page 25: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

25© Visual Patterns, Inc.

Choices Of Release (High) Level Models

Model with a purpose -- shared understanding!

domain modeldomain model user storiesuser stories UI prototype& flow map

UI prototype& flow map architecturearchitecture

ReleaseLevelModels

scope table,glossary, etc.

scope table,glossary, etc.

CRC cardsCRC cards applicationflow map

applicationflow map

UML diagrams

UML diagrams

databasemodel

databasemodel

IterationLevelModels

acceptancetests

acceptancetests

Page 26: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

26© Visual Patterns, Inc.

Sample Scope Table

Shared understanding: what's in and what's out

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.

Page 27: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

27© Visual Patterns, Inc.

Domain Model

Shared understanding: business concepts > key domain objects

Shared understanding: business concepts > key domain objects

Page 28: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

28© Visual Patterns, Inc.

User Stories Or Use Cases

Shared understanding: features required of software

Shared understanding: features required of software

3

XP Style User Story Card

Use Case: Login

Author Anil Hemrajani

Description This process allows User to log into the System

Actors/Interfaces • FM Trader • TheSystem

Trigger User perfor ms aLogin action

Preconditions • /N A

Success/B asic Flow 1. The System displays the Login panel prompting User forlogin details as specified i n

the 2. Usercomple tes all required fields and performs a Submit acti .on

Failure/A lternative Flow Invalid User ID /and or Password - Thesystem notifies FM trader with the message “Invalid U serID / and or Password”. The system displays the Login panel to User with the contents of all field s

.empty

Use Case - Casual, Brief or Fully Dressed

Page 29: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

29© Visual Patterns, Inc.

User Interface (UI) Prototype

Shared understanding: functionality, look-and-feel, etc.

Shared understanding: functionality, look-and-feel, etc.

Page 30: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

30© Visual Patterns, Inc.

UI Flow Map (Storyboard)

Shared understanding: user interface navigation/flow

Shared understanding: user interface navigation/flow

Page 31: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

31© Visual Patterns, Inc.

High-Level Architecture Diagram

Shared understanding: technologies, scalability, security, reliability

Shared understanding: technologies, scalability, security, reliability

BEA WebLogic Server

Objects managed by Spring IoC

Container

HTTP JDBC

ViewJSP/HTML

ControllerSpring

DispatcherServl

et

Web

Browser

ModelBusiness

objects,

Hibernate

beans

SpringScheduler

RDBMS(Oracle)

Page 32: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

32© Visual Patterns, Inc.

Shared understanding: common terminology

Shared understanding: common terminology

Glossary - List Of Common Business/Technical Terms

• AccountingThe accounting department/staff.

• ApprovedStatus of a timesheet when a Manager approves a previously submitted timesheet.

• EmployeeA person who works on an hourly basis and reports to a manager.

• PaidStatus of a timesheet when the accounting department has issued a check.

• Etc…

Page 33: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

33© Visual Patterns, Inc.

Choices Of Iteration Level (Detailed) Models

domain modeldomain model user storiesuser stories UI prototype& flow map

UI prototype& flow map architecturearchitecture

ReleaseLevelModels

scope table,glossary, etc.

scope table,glossary, etc.

CRC cardsCRC cards applicationflow map

applicationflow map

UML diagrams

UML diagrams

databasemodel

databasemodel

IterationLevelModels

acceptancetests

acceptancetests

Page 34: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

34© Visual Patterns, Inc.

Acceptance Tests (Serve As Detailed Requirements)

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

Page 35: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

35© Visual Patterns, Inc.

Active Stakeholder Participation (With Business Representative)

Page 36: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

36© 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

Page 37: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

37© 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

Page 38: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

38© Visual Patterns, Inc.

UML Class and Package Diagrams

Page 39: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

39© Visual Patterns, Inc.

Focus Is On Working Software vs. Comprehensive Documentation

“…your goal is to build a shared understanding, it isn’t to write detailed documentation.”

- Scott W. Ambler

“…your goal is to build a shared understanding, it isn’t to write detailed documentation.”

- Scott W. Ambler

Physical Models

CRC cardsCRC cards

applicationflow map

applicationflow map UML

diagrams

UML diagrams

databasemodel

databasemodel

acceptancetests

acceptancetests

Conceptual Models

user storiesuser stories

architecturearchitecture

problemstatement

domain modeldomain modelscopetable

scopetable

glossaryglossary

UI prototype& flow map

UI prototype& flow map

Implementation

Data BaseData Base Code BaseCode Base

THE FINAL AND LASTING ARTIFACTS!

UIprototypes

UIprototypes

Page 40: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

40© Visual Patterns, Inc.

Shifting Some Upfront Design to Refactoring

Page 41: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

41© 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

Page 42: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

42© Visual Patterns, Inc.

Agile Draw - Elegantly Simple Modeling Technique

UI Flow Map

Conceptual Class Diagram

Visit AgileDraw.org Visit AgileDraw.org

High-Level Architecture

Page 43: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

43© 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

Page 44: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Agile Java Development:

Environment Setup (Directory Structure, JDK, Ant, and

JUnit)

Page 45: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

45© Visual Patterns, Inc.

Quick Poll

How many of you are using Ant, JUnit,

Maven, Cruise Control, etc?

How many of you are using Ant, JUnit,

Maven, Cruise Control, etc?

Page 46: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

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

Page 47: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

Page 48: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

48© 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="[email protected]" verbose="yes" binary="yes"> <fileset file="README.gnuchess"/></ftp>

<ftp server="mirrors.kernel.org" action="get" remotedir="/gnu/chess" userid="anonymous" password="[email protected]" verbose="yes" binary="yes"> <fileset file="README.gnuchess"/></ftp>

<mail tolist="[email protected]" subject="Hello!" from="[email protected]" mailhost="myhost.com" user="myuserid" password="mypassword"/>

<mail tolist="[email protected]" subject="Hello!" from="[email protected]" mailhost="myhost.com" user="myuserid" password="mypassword"/>

Page 49: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

49© 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); }}

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); }}

Page 50: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

50© Visual Patterns, Inc.

JUnit GUI Based Testing

Console Runner

Eclipse Plug-in

Page 51: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

51© 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

Page 52: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

52© 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

Page 53: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Agile Java Development:

Using Hibernate For Persistent Objects

Page 54: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

54© Visual Patterns, Inc.

Quick Poll

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

bean)?

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

bean)?

Page 55: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

55© Visual Patterns, Inc.

Where Hibernate Fits Into Our Architecture

Page 56: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

56© 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…

Page 57: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

57© 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

Page 58: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

58© Visual Patterns, Inc.

From Domain Model To A (Denormalized) Physical Data Model

Page 59: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

59© Visual Patterns, Inc.

Working With Hibernate - Simple Example Using Department1.hibernate.cfg.xml – Hibernate configuration file

(DB configuration)<mapping resource="Department.hbm.xml" />

2.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"/>

3.Department.java – Bean file with two variables: String departmentCode; String name;

4.HibernateTest.java – Simple test program (on next slide)

Page 60: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

Page 61: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

61© 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.)

Page 62: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

62© 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

Page 63: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Agile Java Development:

The Spring Framework

Page 64: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

64© Visual Patterns, Inc.

Spring Modules

Page 65: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

65© Visual Patterns, Inc.

Spring Java Packaging (org.springframework.)

Page 66: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Quick Poll

Are you familiar with Inversion of Control

(IoC)?

Are you familiar with Inversion of Control

(IoC)?

Page 67: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

67© Visual Patterns, Inc.

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

IoC Container And Dependency Injection Pattern

public class A{ B myB = new B(); C myC = new C();}

public class A{ B myB; C myC;

public setB(B myB) public setC(C myC)

Class A

Class CClass B

IOCContainer

Normal Way Using IoC

Page 68: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

68© 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)

Page 69: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

69© Visual Patterns, Inc.

Where Spring Framework Fits Into Our Architecture

OptionalHibernate integration

Page 70: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

70© Visual Patterns, Inc.

Quick Poll

Which web framework do you use?

Which web framework do you use?

Page 71: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

Page 72: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

72© Visual Patterns, Inc.

Spring MVC Java Concepts

1.Controller

2.ModelAndView

3.Command (Form Backing) Object

4.Validator

5.Spring Tag Library (spring:bind)

Page 73: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

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

<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

Page 74: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

74© Visual Patterns, Inc.

Sample End-To-End Flow Using Spring and Hibernate

Page 75: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

mockHttpServletRequest = new MockHttpServletRequest("GET", "/timesheetlist.htm");ModelAndView modelAndView = timesheetListController.handleRequest( mockHttpServletRequest, null);

assertNotNull(modelAndView);assertNotNull(modelAndView.getModel());

Page 76: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

76© Visual Patterns, Inc.

Enter Hours: A Form Screen

public class EnterHoursController extends SimpleFormControllerpublic class EnterHoursController extends SimpleFormController

1. EnterHoursController.java2. EnterHoursValidator.java3. enterhours.jsp

Page 77: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

77© 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>

<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

Page 78: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

78© 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; }

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

Page 79: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

79© 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).

Page 80: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

80© 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!

Page 81: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

81© 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;}

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);getHibernateTemplate().saveOrUpdate(timesheet);

Page 82: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

82© 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>

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

Page 83: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

83© 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

Page 84: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Agile Java Development:

The Eclipse Phenomenon!

Page 85: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

85© Visual Patterns, Inc.

Quick Poll

Which IDE do you use?Which IDE do you use?

Page 86: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

86© 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

• ProjectsApplication Development, editors, modeling, performance, testing, reporting, and many more

Page 87: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

87© Visual Patterns, Inc.

Many Platforms Supported (Windows, Unix, Linux, Mac OS X…)

Page 88: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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!

First exciting IDE Huge community - Plug-ins galore

(thousand+) Ward Cunningham and Erich Gamma Battle of IDEs has only now begun!

Page 89: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

89© Visual Patterns, Inc.

Eclipse Basic Concepts

1. Workspace (directory of projects)

2. Workbench3. Perspectives4. Editors and Views5. Project6. Wizards (hundreds)

7. Plug-ins (galore!)

sample workspace

Page 90: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

90© Visual Patterns, Inc.

Project/Plug-in: Java Development Tools (JDT)

• Java views (e.g. packages, types, members)

• Intelligent code fix and content assist

• Compile during save (within the blink of an eye)

• Powerful debugger (than works!)

• Pre-configured for JUnit and Ant

• Others Formatting options Powerful search Code refactoring (some based on Fowler's refactoring.com)

TODO lists Scrapbook Export feature (create zip files, etc.)

Page 91: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

91© Visual Patterns, Inc.

JDT Features

Ant Assist

Java Browsing

Java Compile Errors/Warnings

JUnit

Page 92: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

92© Visual Patterns, Inc.

Project/Plug-ins: Eclipse Web Tools Platform (WTP)

• Tools for developing J2EE 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

• J2EE - project natures, builders, models navigator

Page 93: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

WTP Web Services Related Screens

Page 94: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

94© Visual Patterns, Inc.

Other WTP Features

Database

Servers

JSP Assist

Page 95: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

95© Visual Patterns, Inc.

CVS (Eclipse Team Sharing)

Page 96: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

96© Visual Patterns, Inc.

Hibernate and Spring Plug-Ins

Hibernate

Spring IDE

Page 97: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

97© Visual Patterns, Inc.

Startup Time Comparison To IntelliJ and NetBeans

IntellIJ - 1 minute, 5 seconds!

Eclipse with JDT, WTP, Hibernate, Eclipse... 19 seconds!

Eclipse with JDT, WTP, Hibernate, Eclipse... 19 seconds!

NetBeans - 42 seconds.

Page 98: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

Page 99: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Agile Java Development:

Logging, Debugging, Monitoring, and Profiling

Page 100: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

100© Visual Patterns, Inc.

Quick Poll

Do you use a GUI debugger? Or, a logging framework?

Or, use println statements?

Do you use a GUI debugger? Or, a logging framework?

Or, use println statements?

Page 101: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

101© Visual Patterns, Inc.

Logging Basics and Frameworks

• Types1.Audit log2.Tracing3.Error reporting

• Pros• No human intervention (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

Page 102: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

102© Visual Patterns, Inc.

Headaches of Finding and Fixing Bugs!

Page 103: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

103© Visual Patterns, Inc.

Debugging Java Code With Eclipse

• Debug perspectives

and views

• Breakpoints

• Step through code

• Variable inspection

• Hotswap

• Remote debugging

“consolidated debugging”

Page 104: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

104© Visual Patterns, Inc.

Debugging Web User Interfaces Using Mozilla Firefox

JavaScript debugger

Web Developer

Tamper Data

Page 105: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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" />

<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

Page 106: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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

Page 107: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Beyond The Basics

Page 108: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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>

<timex:periodcheck checkDate="${command.periodEndingDate}"> <input name="save" type="submit" value="Save"></timex:periodcheck>

Page 109: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

109© Visual Patterns, Inc.

Security, Reliability and Scalability Considerations

Page 110: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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 authenticati

on & authorizatio

n

Application-level

authentication

Page 111: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

111© Visual Patterns, Inc.

Other Considerations

• Exception Handling1. 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/

Adobe Flex Java Swing and Web Start

Page 112: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

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…

Page 113: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Wrap Up!

Page 114: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Presentation Outline

Introduction to Agile Java DevelopmentAgile ProcessesAgile ModelingAgile 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

Page 115: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

115© Visual Patterns, Inc.

Constant Learning – Be a “Generalizing Specialist”

Page 116: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

116© Visual Patterns, Inc.

Don’t Forget - Release Completion Celebration!

RONRON STEVESTEVE RAJRAJ SUSANSUSAN

Page 117: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

© Visual Patterns, Inc.

Some Near Term Plans

Page 118: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

118© Visual Patterns, Inc.

Book - Released 12th May, 2006

Agile Java DevelopmentWith Spring, Hibernate and Eclipse

Forewords by Scott W. Ambler and Rod Johnson

1. Introduction to Agile Java Development2.2. The Sample Application: An Online The Sample Application: An Online Timesheet SystemTimesheet System3.3. XP and AMDD-Based Architecture and XP and AMDD-Based Architecture and Design ModelingDesign Modeling4. Environment Setup: JDK, Ant, and JUnit5. Using Hibernate For Persistent Objects6. Overview of the Spring Framework7. The Spring Web MVC Framework8. The Eclipse Phenomenon9. Logging, Debugging, Monitoring and Profiling10. Beyond the Basics11. What Next?12. Parting Thoughts Appendices (with lots of goodies)

available on amazon.com

Page 119: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

119© Visual Patterns, Inc.

Interesting Stuff At VisualPatterns.com - Visit Site Periodically

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 CRC cards 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.

ComicsCheat Sheets

R&D Concepts

Page 120: © Visual Patterns, Inc. Agile Java Development With Spring, Hibernate and Eclipse Anil Hemrajani anil@visualpatterns.com

120© 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!

[email protected]

Stay in touch!

[email protected]