Agile Java Development
With Spring, Hibernate and Eclipse Anil Hemrajani
[email protected]
© 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.
2
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 © Visual Patterns,(with Inc. Appendices lots of goodies)
3
Book Related Talks
© Visual Patterns, Inc.
4
My Background (details at VisualPatterns.com)
• 20 years of experience in the IT
Working with Java Technology since late 1995 as a developer, entrepreneur, author, and trainer. Helped several U.S. based Fortune 100 companies (some smaller organizations)
Published a book and 30 articles
Presented at conferences and seminars around the world
Awards: "Outstanding Contribution to the Growth of the Java Community" "Best Java Client" for BackOnline (a Java-based online backup
product)
Nominated for a Computerworld-Smithsonian award by Scott McNealy
• Founder of:
Isavix Corporation – successful IT solutions company (now InScope Solutions) Isavix Community (now DeveloperHub.com) - award-winning online developer community (grew to over 100,000 registered members)
• These days:
© Visual Patterns, Inc. Consultant/Author; details at
5
Practical Stuff, Not Fluff!
• Recently completed project for U.S. Fortune 50 company
• Application
Financial application process billions of $ every week
Clustered application (99.9% uptime required)
Technologies: Spring, Hibernate, JUnit, Ant, Eclipse, etc.
© Visual Patterns, Inc.
6
Agenda
1. Introduction to Agile Java Development 2. Agile Processes 3. Agile Modeling 4. Agile Development
Environment Setup: Directory Structure, JDK, Ant and JUnit
Using Hibernate For Persistent Objects
The Spring Framework
The Eclipse Phenomenon!
Logging, Debugging, Monitoring, and Profiling
5. Beyond The Basics
© Visual Patterns, Inc.
7
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.
•
Agile Architecture/Design Modeling
•
Incremental design with “good enough” models Use an agile method - Agile Model Driven Development (AMDD)
Agile Java Design/Development
Simple design and coding!
Test-driven development (TDD)
Efficient frameworks and tools (Ant, JUnit, Hibernate, Spring, Eclipse…) Plain Old Java Objects (POJOs), whenever possible © Visual Patterns, Inc.
9
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 2
Release 1 Iteration 0
Iteration 1
...Iteration n
Iteration 0
Iteration 1
...Iteration n
...
Incrementally Build Software - Highest Priority Features First!
software
software
software
software
© Visual Patterns, Inc.
software
software
Agile Method: Scrum
• •
Simple process for product/project management
•
Sprint - 1-month iterations (develop highest priority items)
•
Meetings
Product Backlog - List of known features/changes for product
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, on-site customer
• Flow - sustainable pace versus rigid phases; velocity, continuous integration © 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 isn’t 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
Communic ation, simplicity, feedback, courage and humility. Practices
Principles
Core Practices: Active Stakeholder Participation Model with Others Apply the Right Artifact(s) Iterate to Another Artifact Prove I t with Code Use the Simplest Tools Model in Small Incr ements Single Source Information Collective Ownership Create Several Models in Parallel Create Simple Content Depict Models Simply Displa y Models Publicly
Core Principles: Model with a Purpose Maximize Stakeholder Investment Travel Light Multiple Models Rapid Feedback Assum e Simplicity Embrace Cha nge Incremental Change Quality Work Software Is Your Primary Goal Enabling the Next Effort Is Your Secondary Goal
Supplementary Practices: Apply Modeling Standards Apply Patterns Gently
Supplementary Principles: Content Is More I mportant Than Representation Open and Honest Communicat ion
Discar d Temporary Models Formalize Contract Models Update Only When It Hurts Really Good Ideas: Refactoring Test-First Design © 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 Word “model” used ato final describe diagrams and other artifacts, product." 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 modeling
•
Requirements Architecture
Usage models Domain models UI models
Architecture modeling
Free-form diagrams Change cases ©
Visual Patterns, Inc.
Let’s 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 © 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 Include
Functionality Time Expression will provide the capability to enter, approve, and pay for hours worked by employees.
Defer
Time Expression will not calculate deductions from paychecks, such as federal/state taxes and medical expenses.
Defer
Time Expression will not track vacation or sick leave.
Shared understanding: what's in and what's out © 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/I nterfaces • •
•
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
Model
Spring
Business objects,
DispatcherServlet
Hibernate beans
View JSP/HTML
JDBC
RDBMS (Oracle)
Spring Schedul er
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
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
© 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.
• 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. © 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 Class Namemodels (Noun) input 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
TimesheetManager free-form architecture
Fetches timesheet(s) from database
Timesheet
Saves timesheet to database 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
View
Controller Class
Collaborators
Timesheet List
timesheetlist
TimeSheetListController
TimesheetManager
Tables Impacted Timesheet
Enter Hours
enterhours
EnterHoursController
TimesheetManager
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
scope table
domain model user stories UI prototypes
glossary
• Model in Small Increments
architecture
• Depict Models Simply
Physical Models
acceptance tests
application flow map
Implementation
Data Base
CRC cards
database model
UML diagrams
• Discard temporary models • Prove it with code - agilemodeling.com
THE FINAL AND LASTING ARTIFACTS!
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 © Visual Patterns, Inc.
43
Presentation Outline
Introduction to Agile Java Development Agile Processes Agile Modeling • Agile Development
Environment Setup: Directory Structure, JDK, Ant and JUnit
Using Hibernate For Persistent Objects
The Spring Framework
The Eclipse Phenomenon!
Logging, Debugging, Monitoring, and Profiling
• Beyond The Basics
© 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
© Visual Patterns, Inc.
47
Directory Structure, Naming Conventions, Version Control, etc.
➔controller/TimesheetListController.java ➔model/Timesheet.java ➔model/TimesheetManager.java ➔test/TimesheetListControllerTest.java ➔test/TimesheetManagerTest.java ➔view/timesheetlist.jsp
© 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
Remote tasks
Miscellaneous tasks (e.g. echo) © Visual
<mail tolist="
[email protected] " subject="Hello!" from="
[email protected] " mailhost="myhost.com" user="myuserid" password="mypassword"/>
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
public class SimpleTest extends junit.framework.TestCase { int value1 = 2, value2 = 3, expectedResult = 5;
assertNotNull
assertNotSame
assertNull
assertSame
assertTrue }
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
Code, Compile, Test
Write unit test code
Write some actual code
More unit test code
More actual code
More unit test code
More actual code
Several benefits to this approach:
Minimal code written to satisfy requirements (nothing more, nothing less!)
If code passes the unit tests, it is done!
Can help design classes better (from a client/interface perspective)
Refactor with confidence
© 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 SQLlike 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
•
hibernate.cfg.xml – Hibernate configuration file (DB configuration) <property name="connection.url"> jdbc:hsqldb:hsql://localhost:9005/timex <mapping resource="Department.hbm.xml" />
•
Department.hbm.xml – Mapping file for our Department table
<property name="name" column="name"/>
•
Department.java – Bean file with two variables: String departmentCode; String name; // Setter and getter methods © 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,
62
filters, interceptors, scrollable iterations, native © 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.
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 C
Class B IOC Container
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 © 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-class> org.springframework.web.servlet.DispatcherServlet 1 <servlet-mapping> <servlet-name>timex *.htm
web.xml
timexservlet.xml
<prop key="/enterhours.htm">enterHoursController ...
<property name="viewClass"> org.springframework.web.servlet.view.JstlView <property name="prefix"> /WEB-INF/jsp/ <property name="suffix"> .jsp 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.jav a 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">
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) <prop key="/help.htm">urlFilenameController
• 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… © Visual Patterns, Inc.
80
Spring ORM Module: Support for Hibernate
• Management of sessionfactory and session (no close calls)
• Declarative transaction management in lightweight 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 (cont’d) Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { session.saveOrUpdate(timesheet); session.getTransaction().commit(); } catch (HibernateException e) { session.getTransaction().rollback(); throw e; }
getHibernateTemplate().saveOrUpdate(timesheet);
File DepartmentManager.java EmployeeManager.java TimesheetManager.java TOTAL
Programmatic 39 66 166 271
Less lines of code © Visual Patterns, Inc.
Declarative 22 36 87 145
82
More Spring…
• Scheduling Jobs (with Quartz or JDK
class= "org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="reminderEmail" /> <property name="targetMethod" value="sendMail" /> <property name="jobDetail" ref="reminderEmailJobDetail" /> <property name="cronExpression" value="0 0 14 ? * 6" />
• 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 plugins © 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 •
Workspace (directory of
• • • • •
Workbench Perspectives Editors and Views Project Wizards (hundreds)
•
projects)
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 © Visual Patterns, Inc.
Web Services
94
CVS (Eclipse Team Sharing)
© Visual Patterns, Inc.
95
Hibernate and Spring Plug-Ins
Hibernate
© Visual Patterns, Inc.
Spring 96 IDE
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 Logging Frameworks • Audit log • Alternative to println statements • Tracing • Key benefit - Output control (destination, format, • Error • Most popular - Apache Log4J and JDK Logging reporting • Jakarta Commons Logging -- bridge to frameworks • Pros • No human interventio n (automated) • Great for head-less servers • Cons • Performance hit • Can clutter
log le
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
“consolidated debugging”
and views • Breakpoints • Step through code • Variable inspection • Hotswap • Remote 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 Spring MBean Exporter
• Monitoring
JSE 5.0 includes
id="exporter” class= "org.springframework.jmx.export.MBeanExporter"> <property name="beans"> <map> and <entry key="Time Expression:name=timex-stats" value-ref="timexJmxBean" />
Class loading garbage collection Management of MBeans and JDK logging level, etc …
• Profiling
Memory usage and leaks CPU utilization Trace objects and methods Determine
© 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
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
– Checked exceptions (e.g. IOException) – required catch or throw – Unchecked exceptions (e.g. NullPointerException) - no catch/throw needed – Errors (e.g. OutOfMemoryError)
• Clustering (serialize, no static variables, simplicity…)
• Multi-threading (JDK 1.5 concurrent API) • Rich Internet Applications (RIA)
AJaX -
Google Web Toolkit (GWT) -
http://code.google.com/webtoolkit/
Direct Web Remoting (DWR) - Inc. http://getahead.ltd.uk/dwr/ © Visual Patterns,
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 Agile Processes Agile Modeling Agile Development Environment and JUnit
Java Development
Setup: Directory Structure, JDK, Ant
Using Hibernate For Persistent Objects The Spring Framework The Eclipse Phenomenon! Logging, Debugging, Monitoring, and Profiling
Beyond
The Basics
© Visual Patterns, Inc.
Constant Learning – Be a “Generalizing Specialist”
“A generalizing specialist is someone with a good grasp of how everything fits together.” © Visual Patterns, Inc.
115
Most Important…
RON
Don’t Forget To Have Fun!
STEVE
RAJ
© Visual Patterns, Inc.
:-)
SUSAN 116
VisualPatterns.com - Downloadable Application & Presentation
visualpatterns.com/resources.jsp • • • • • •
Web Browser
HTTP
Controller Spring
DispatcherServlet
View JSP/HTML
Model Business objects, Hibernate beans Spring Scheduler
Objects managed by Spring IoC Container
BEA WebLogic Server © Visual Patterns, Inc.
JDBC
RDBMS (Oracle)
Spring Hibernate Ant JUnit DisplayTag HSQLDB
VisualPatterns.com - Other Stuff
Comics
Planning • User stories are written. · Release planning creates the schedule. · Make frequent small releases. · The Proje ct 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. Designing · 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.
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. 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.
Cheat Sheets
R&D Concepts © Visual Patterns, Inc.
118
THE END!
• • • • • • •
agilemodeling.com agiledata.org agilemanifesto.org extremeprogramming.org
Stay in touch!
[email protected]
hibernate.org springframework.org eclipse.org
• code.google.com/webtoolkit/ • getahead.ltd.uk/dwr/ • VisualPatterns.com (links, comics, code, cheat sheets…)
© Visual Patterns, Inc.
119