Está en la página 1de 119

Agile Java Development

With Spring, Hibernate and Eclipse


Anil Hemrajani
anil@visualpatterns.com

Visual Patterns, Inc.

About This Presentation

Not a tutorial on any one technology!

Road map for building enterprise-class Java applications using various hot agile methods and simpler Java technologies

Requirements > Design > Code > Monitor

Downloadable code - Sample time sheet application used here

Note: Working knowledge of Java is expected for this presentation!

Visual Patterns, Inc.

Some Material Taken From My Recent Book

Agile Java Development


With Spring, Hibernate and Eclipse
Forewords by Scott W. Ambler and Rod Johnson

available on amazon.com

1. Introduction to Agile Java Development 2. The Sample Application: An Online Timesheet System 3. XP and AMDD-Based Architecture and Design Modeling 4. Environment Setup: JDK, Ant, and JUnit 5. Using Hibernate For Persistent Objects 6. Overview of the Spring Framework 7. The Spring Web MVC Framework 8. The Eclipse Phenomenon 9. Logging, Debugging, Monitoring and Profiling 10. Beyond the Basics 11. What Next? 12. Parting Thoughts
Appendices (with lots of goodies)

Visual Patterns, Inc.

Book Related Talks

Visual Patterns, Inc.

My Background (details at VisualPatterns.com)

20 years of experience in the IT

Working with Java Technology since late 1995 as a developer, entrepreneur, author, and trainer. Helped several U.S. based Fortune 100 companies (some smaller organizations)

Published a book and 30 articles


Presented at conferences and seminars around the world Awards:
"Outstanding Contribution to the Growth of the Java Community" "Best Java Client" for BackOnline (a Java-based online backup product)

Nominated for a Computerworld-Smithsonian award by Scott McNealy

Founder of:

Isavix Corporation successful IT solutions company (now InScope Solutions) Isavix Community (now DeveloperHub.com) - award-winning online developer community (grew to over 100,000 registered members)

These days: Consultant/Author; details at VisualPatterns.com


Visual Patterns, Inc.

Practical Stuff, Not Fluff!

Recently completed project for U.S. Fortune 50 company Application

Financial application process billions of $ every week Clustered application (99.9% uptime required)
Technologies: Spring, Hibernate, JUnit, Ant, Eclipse, etc.

Visual Patterns, Inc.

Agenda

1. 2. 3. 4.

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

5. Beyond The Basics

Visual Patterns, Inc.

Introduction to Agile Java Development

Assume simplicity. Travel light. - Agile Modeling principles: agilemodeling.com

Visual Patterns, Inc.

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

Visual Patterns, Inc.

Agile Processes

Requirements change. Design evolves. Documents are seldom current.

Visual Patterns, Inc.

Some Stats by The Standish Group (standishgroup.com)

Visual Patterns, Inc.

The Solution

CHAOS Ten Success Factors source: standishgroup.com

In 2001, seventeen software pundits came together to unify their methodologies under one umbrella; they jointly defined the term, Agile! Read story at: martinfowler.com/articles/agileStory.html
Visual Patterns, Inc.

12

AgileManifesto.org

Visual Patterns, Inc.

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
Visual Patterns, Inc.

14

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

Release 1
Iteration 0 Iteration 1

Release 2

...

Iteration n

Iteration 0

Iteration 1

...

Iteration n

...

Incrementally Build Software - Highest Priority Features First!

software

software

software

software

software

software

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

Visual Patterns, Inc.

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, onsite customer

Flow - sustainable pace versus rigid phases; velocity, continuous


integration

Others visit extremeprogramming.org


Visual Patterns, Inc.

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

Visual Patterns, Inc.

18

Agile Modeling
...your goal is to build a shared understanding, it isnt to write detailed documentation.

- Scott W. Ambler

Visual Patterns, Inc.

Quick Poll

Have you ever been on a project where documentation was kept up-to-date through end of project?

Visual Patterns, Inc.

20

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


Values
Communication, sim plic it y, feedback, courage and humili ty.

Practices
Core Practices: Active Stakeholder Participat ion Model with Others Apply the Right Artifact(s) Iterate to Another Artifact Prove It with Code Use the Simplest Tools Model in Small Incr ements Single Source Informatio n Colle ctive Ownership Create Several Models in Paral lel Create Sim ple Content Depict Models Simply Displa y Models Public ly Supplementary Practices: Apply Modeling Standards Apply Patterns Gently Discar d Temporary Models Formali ze Contract Models Update Only When It Hurts Really Good Ideas: Refactoring Test-Fir st Design

Principles
Core Princip les: Model with a Purpose Maximize Stakeholder Investment Travel Light Mult iple Models Rapid Feedback Assume Simplicity Embrace Change Incremental Change Quality Work Software Is Your Primary Goal Enabling the Next Effort Is Your Secondary Goal Supplementary Principles: Content Is More Important Than Representation Open and Honest Communication

Visual Patterns, Inc.

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 a final product."
Word model used to describe diagrams and other artifacts, in this presentation.

Visual Patterns, Inc.

Agile Model Driven Development (AMDD)

Subset of Agile Modeling (agilemodeling.com) Agile version of Model Driven Development (MDD) Instead of extensive models, barely good enough Initial modeling activity
1. 2.

Requirements Architecture

Requirements modeling

Usage models Domain models UI models

Architecture modeling

Free-form diagrams Change cases


Visual Patterns, Inc.

Lets apply this to a sample application, next ...


23

Initiating A New Software Application Project

Visual Patterns, Inc.

24

Problem Statement

Our employees currently submit their weekly hours worked using a paper-based timesheet system that is manually intensive and errorprone. 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.

Visual Patterns, Inc.

25

Project Kickoff Meeting

Visual Patterns, Inc.

26

Choices Of Release (High) Level Models

Release Level Models

scope table, glossary, etc.

domain model

user stories

UI prototype & flow map

architecture

Iteration Level Models

acceptance tests

CRC cards

application flow map

UML diagrams

database model

Model with a purpose -- shared understanding!

Visual Patterns, Inc.

27

Sample Scope Table

Scope Functionality Include Time Expression will provide the capability to enter, approve, and pay for hours worked by employees. Defer Defer Time Expression will not calculate deductions from paychecks, such as federal/state taxes and medical expenses. Time Expression will not track vacation or sick leave.

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

Visual Patterns, Inc.

28

Domain Model

Shared understanding: business concepts > key domain objects


Visual Patterns, Inc.

29

User Stories Or Use Cases


3
Use Case: Login
Author Anil Hemrajani Description
This process allows User to log into the System

XP Style User Story Card

Actors/Interfaces
FM Trader The System

Trigger User performs a Login action


Preconditions
N/A

Success/Basic Flow 1. The System displays the Login panel p rompting User for login details as specified in the 2. User completes all required fields and performs a Submit action. Failure/Alternative Fl ow
Invalid User ID and/or Password - The system notifies FM trader with the message Invalid User ID and/or Password . The system displays the Login panel to User with the contents of all fields empty.

Use Case - Casual, Brief or Fully Dressed

Shared understanding: features required of software


Visual Patterns, Inc.

30

User Interface (UI) Prototype

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


Visual Patterns, Inc.

31

UI Flow Map (Storyboard)

Shared understanding: user interface navigation/flow


Visual Patterns, Inc.

32

High-Level Architecture Diagram

Web Browser

HTTP

Controller
Spring

Model
Business objects,
Hibernate beans

JDBC

RDBMS
(Oracle)

DispatcherServlet

View
JSP/HTML

Spring Scheduler

Objects managed by Spring IoC Container

BEA WebLogic Server

Shared understanding: technologies, scalability, security, reliability


Visual Patterns, Inc.

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
Visual Patterns, Inc.

34

Choices Of Iteration Level (Detailed) Models

Release Level Models

domain model CRC cards

user stories

UI prototype & flow map

architecture

scope table, glossary, etc.

Iteration Level Models

acceptance tests

application flow map

UML diagrams

database model

Visual Patterns, Inc.

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. Only a user's personal timesheets can be accessed. 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.

Timesheet List

Enter Hours

Visual Patterns, Inc.

36

Exploring Classes Using CRC Cards


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

Timesheet List screen

TimesheetListController Controller (in MVC) for displaying a list of timesheets.


TimesheetManager
free-form architecture

TimesheetManager

Fetches timesheet(s) from database Saves timesheet to database

Timesheet

Timesheet Knows of period ending date


domain model

Knows of time Knows of department code


Visual Patterns, Inc.

37

Application Flow Map (Home Grown Artifact)

Complementary to class diagrams and CRC cards Can be extended using CRUD columns

Story Tag Timesheet List Enter Hours

View timesheetlist enterhours

Controller Class TimeSheetListController EnterHoursController

Colla borators TimesheetManager TimesheetManager

Tables Impacted Timesheet Timesheet Department

Visual Patterns, Inc.

38

UML Class and Package Diagrams

Visual Patterns, Inc.

39

Focus Is On Working Software vs. Comprehensive Documentation


Conceptual Models

problem statement

domain model user stories UI prototypes architecture

scope table

Model in Small Increments Depict Models Simply

glossary

Physical Models

acceptance tests

CRC cards

database model

Discard temporary models Prove it with code

application flow map

UML diagrams

- agilemodeling.com

Implementation

THE FINAL AND LASTING ARTIFACTS!

Data Base

UI prototype Code Base & flow map

Visual Patterns, Inc.

40

Shifting Some Upfront Design to Refactoring

Visual Patterns, Inc.

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

Visual Patterns, Inc.

42

Agile Draw - Elegantly Simple Modeling Technique

High-Level Architecture UI Flow Map

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

Visual Patterns, Inc.

44

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

Visual Patterns, Inc.

Quick Poll

How many of you are using Ant, JUnit, Maven, Cruise Control, etc?

Visual Patterns, Inc.

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

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


Visual Patterns, Inc.

48

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

<ftp server="mirrors.kernel.org" action="get" remotedir="/gnu/chess" userid="anonymous" password="guest@guest.com" verbose="yes" binary="yes"> <fileset file="README.gnuchess"/> </ftp>

Remote tasks
Miscellaneous tasks (e.g. echo)

<mail tolist="friend@somehost.com" subject="Hello!" from="me@myhost.com" mailhost="myhost.com" user="myuserid" password="mypassword"/>

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

Visual Patterns, Inc.

50

JUnit GUI Based Testing

Console Runner

Eclipse Plug-in
Visual Patterns, Inc.

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


Write unit test code More unit test code More unit test code

Code, Compile, Test


Write some actual code More actual 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

Visual Patterns, Inc.

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

Visual Patterns, Inc.

53

Agile Java Development: Using Hibernate For Persistent Objects

Visual Patterns, Inc.

Quick Poll

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

Visual Patterns, Inc.

55

Where Hibernate Fits Into Our Architecture

Visual Patterns, Inc.

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
Visual Patterns, Inc.

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
Visual Patterns, Inc.

58

From Domain Model To A (Denormalized) Physical Data Model

Visual Patterns, Inc.

59

Working With Hibernate - Simple Example Using Department

1. hibernate.cfg.xml Hibernate configuration file (DB


configuration)
<property name="connection.url"> jdbc:hsqldb:hsql://localhost:9005/timex</property> <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; // Setter and getter methods

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


Visual Patterns, Inc.

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

Visual Patterns, Inc.

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, transaction management, etc.)
Visual Patterns, Inc.

62

Presentation Outline

Introduction to Agile Java Development Agile Processes Agile Modeling


Agile Development

Environment Setup: Directory Structure, JDK, Ant and JUnit Using Hibernate For Persistent Objects

The Spring Framework

The Eclipse Phenomenon!


Logging, Debugging, Monitoring, and Profiling

Beyond The Basics

Visual Patterns, Inc.

63

Agile Java Development: The Spring Framework

Visual Patterns, Inc.

Spring Modules

Visual Patterns, Inc.

65

Spring Java Packaging (org.springframework.)

Visual Patterns, Inc.

66

Quick Poll

Are you familiar with Inversion of Control (IoC)?

Visual Patterns, Inc.

IoC Container And Dependency Injection Pattern


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

Using IoC
Class B
IOC Container

Class C

Class A

public class A { public setB(B myB) 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


Visual Patterns, Inc.

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 SQLException)
Visual Patterns, Inc.

69

Where Spring Framework Fits Into Our Architecture

Optional Hibernate integration

Visual Patterns, Inc.

70

Quick Poll

Which web framework do you use?

Visual Patterns, Inc.

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)

Visual Patterns, Inc.

72

Spring MVC Java Concepts

1. Controller 2. ModelAndView 3. Command (Form Backing) Object 4. Validator 5. Spring Tag Library (spring:bind)

Visual Patterns, Inc.

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-servlet.xml

<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> 74 Visual Patterns, Inc.

Sample End-To-End Flow Using Spring and Hibernate

Visual Patterns, Inc.

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());
Visual Patterns, Inc.

76

Enter Hours: A Form Screen


1. EnterHoursController.java 2. EnterHoursValidator.java 3. enterhours.jsp

public class EnterHoursController extends SimpleFormController

Visual Patterns, Inc.

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

Visual Patterns, Inc.

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

Visual Patterns, Inc.

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

Other

Web Flow gaining a lot of momentum! Wizard-like features. Portlet API based on JSR-168 Portlet Specification (jcp.org).
Visual Patterns, Inc.

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!

Visual Patterns, Inc.

81

Spring ORM Module: Support for Hibernate (contd)


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 DepartmentManager.java EmployeeManager.java TimesheetManager.java TOTAL

Programmatic 39 66 166 271

Declarative 22 36 87 145

Less lines of code


Visual Patterns, Inc.

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

Visual Patterns, Inc.

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

Visual Patterns, Inc.

84

Agile Java Development: The Eclipse Phenomenon!

Visual Patterns, Inc.

Quick Poll

Which IDE do you use?

Visual Patterns, Inc.

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

Projects
Application Development, editors, modeling, performance, testing, reporting, and many more
Visual Patterns, Inc.

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!

Visual Patterns, Inc.

88

How Eclipse Can Help With Our Application

Visual Patterns, Inc.

89

Eclipse Basic Concepts


1. 2. 3. 4. 5. 6. Workspace (directory of projects) Workbench Perspectives Editors and Views Project Wizards (hundreds)

7. Plug-ins (galore!)

sample workspace

Visual Patterns, Inc.

90

Eclipse Plug-in: Java Development Tools (JDT)

Java Browsing

JUnit

Java Compile Errors/Warnings

Ant Assist
Visual Patterns, Inc.

91

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

Visual Patterns, Inc.

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

Visual Patterns, Inc.

93

WTP: Notable Features


Servers

JSP Assist

Database

Web Services
Visual Patterns, Inc.

94

CVS (Eclipse Team Sharing)

Visual Patterns, Inc.

95

Hibernate and Spring Plug-Ins

Hibernate

Spring IDE
Visual Patterns, Inc.

96

Startup Time Comparison To IntelliJ and NetBeans

IntellIJ - 1 minute, 5 seconds!

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

Visual Patterns, Inc.

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

Visual Patterns, Inc.

98

Agile Java Development: Logging, Debugging, Monitoring, and Profiling

Visual Patterns, Inc.

Quick Poll

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

Visual Patterns, Inc.

100

Logging Basics and Frameworks


Types 1.Audit log 2.Tracing 3.Error reporting Pros No human intervention (automated) Great for head-less servers Cons Performance hit Can clutter code
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
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."); } }
Visual Patterns, Inc.

101

Headaches of Finding and Fixing Bugs!

Visual Patterns, Inc.

102

Debugging Java Code With Eclipse


Debug

perspectives and views Breakpoints Step through code Variable inspection Hotswap Remote debugging

consolidated debugging

Visual Patterns, Inc.

103

Debugging Web User Interfaces Using Mozilla Firefox


JavaScript debugger

Web Developer

Tamper Data

Visual Patterns, Inc.

104

Java Monitoring and Profiling

Monitoring

Spring MBean Exporter


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

JSE 5.0 includes JConsole Memory issues

Class loading and garbage collection


Management of MBeans and JDK logging level, etc Memory usage and leaks CPU utilization Trace objects and methods

Profiling

Determine performance bottlenecks


Visual Patterns, Inc.

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

Visual Patterns, Inc.

106

Beyond The Basics

Visual Patterns, Inc.

Custom Tag Libraries

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

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

Visual Patterns, Inc.

108

Security, Reliability and Scalability Considerations

Visual Patterns, Inc.

109

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

Visual Patterns, Inc.

110

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/

Adobe Flex Java Swing and Web Start


Visual Patterns, Inc.

111

Cool Concept For Smaller Apps - Entire System In A WAR File!

Code (source, binary) Relational database (e.g. HSQLDB) Job Scheduling

More

Visual Patterns, Inc.

112

Wrap Up!

Visual Patterns, Inc.

Presentation Outline

Introduction to Agile Java Development Agile Processes Agile Modeling Agile Development

Beyond The Basics

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

Visual Patterns, Inc.

Constant Learning Be a Generalizing Specialist

A generalizing specialist is someone with a good grasp of how everything fits together.
- agilemodeling.com

Visual Patterns, Inc.

115

Most Important Dont Forget To Have Fun! :-)

RON

STEVE
Visual Patterns, Inc.

RAJ

SUSAN
116

VisualPatterns.com - Downloadable Application & Presentation

visualpatterns.com/resources.jsp

Spring Hibernate Ant JUnit DisplayTag HSQLDB

Web Browser

HTTP

Controller
Spring

Model
Business objects,
Hibernate beans Spring Scheduler JDBC

RDBMS
(Oracle)

DispatcherServlet

View
JSP/HTML

Objects managed by Spri ng IoC Contai ner

BEA WebLogic Server


Visual Patterns, Inc.

VisualPatterns.com - Other Stuff


Planning
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. Simplicity. Choose a system metaphor. Use CRC cards for design sessions. Create spike solutions to reduce risk. No functionality is added early. Refactor whenever and wherever possible.

Coding
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
All code must have unit tests. All code must pass all unit tests before it can be released. When a bug is found tests are created. Acceptance tests are run often and the score is published.

Comics

Cheat Sheets

R&D Concepts
Visual Patterns, Inc.

118

THE END!

agilemodeling.com agiledata.org agilemanifesto.org


Stay in touch!

extremeprogramming.org
hibernate.org springframework.org eclipse.org

Anil@VisualPatterns.com

code.google.com/webtoolkit/ getahead.ltd.uk/dwr/ VisualPatterns.com (links, comics, code, cheat sheets)


Visual Patterns, Inc.

119

También podría gustarte