Rocky Mountain Software Symposium

May 4 - 6, 2007 - Denver, CO


Renaissance Suites Flatiron Hotel
500 Flatiron Blvd
Broomfield, CO   80021
Map »

NOTE: You are viewing details about a past event. We will be back in DenverNovember 15 - 17, 2013.
View the event details here ».

Session Schedule

We are committed to hype-free technical training for developers, architects, and technical managers. We offer over 55 sessions in the span of one weekend. Featuring leading industry experts, who share their practical and real-world experiences; we offer intensive speaker interaction time during sessions and breaks.

About Sessions

Our sessions are designed to cover the latest in trends, best practices, and latest developments in Java application development. Each session lasts 90 minutes unless otherwise noted.

Friday - May 4


  Flatiron Ballroom Flagstaff Red Rocks Chautauqua Eldorado
11:30 - 1:00 PM REGISTRATION
1:00 - 1:15 PM WELCOME
1:15 - 2:45 PM

Gradual Agile: The Secret to Introducing Agile Practices

Jared Richardson
2:45 - 3:15 PM BREAK
3:15 - 4:45 PM
4:45 - 5:00 PM break
5:00 - 6:30 PM

JavaScript Exposed: There's a Real Programming Language in There! (Part 2)

Glenn Vanderburg

Real World Grails

Scott Davis

Shippers Unite!

Jared Richardson

Regular Expressions in Java

Neal Ford
6:30 - 7:15 PM DINNER
7:15 - 8:00 PM Keynote: Software "Engineering" & Polyglot Programming by Neal Ford

Saturday - May 5


  Flatiron Ballroom Flagstaff Red Rocks Chautauqua Eldorado
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM

Debugging and Testing the Web Tier

Neal Ford
10:30 - 11:00 AM BREAK
11:00 - 12:30 PM

RAD JSF with Seam, Facelets, and Ajax4jsf, Part Two

David Geary

Everything Old Is New Again

Glenn Vanderburg

Agile Estimating, Planning and Tracking: Part I

Pete Behrens
12:30 - 1:30 PM LUNCH
1:30 - 3:00 PM

The Google Web Toolkit, Part One

David Geary

Agile Metrics and Measurements

Pete Behrens
3:00 - 3:15 PM BREAK
3:15 - 4:45 PM

The Google Web Toolkit, Part Two

David Geary

Making Architecture Work Through Agility

Mark Richards
4:45 - 5:30 PM BIRDS OF A FEATHER

Implementing SOA

close
Neal Ford

By Neal Ford

This talk avoids SOA hype and gets to the meat of the matter: how do you implement a Service-Oriented Architecture, what are the technological pitfalls, how do you test it, and what traps should you avoid. No marketecture: just implementation details.

No subject has been subject to more recent hype than Service-Oriented Architecture (I think it was because of a really good article in an in-flight magazine). For whatever the reason, the CxO has decided that we need one. It's up to you to implement it. This session is all about the technical considerations required to implement a service oriented architecture. It discusses technology choices, what is in (and out) of SOA's scope, how to implement transformations, routing, and other key services, how to version endpoints, and finally testing and debugging SOA. This session is marketecture free: it covers the details you need to implement this style of architecture.

Session Topics:

  • What SOA means to those who must implement it
  • Technology choices
  • Routing
  • The WS deathstar
  • MOM
  • Implementing transformations
  • Versioning services
  • Testing SOA
  • Debugging SOA implementations



The Productive Programmer: Practice (10 Ways to Improve Your Code)

close
Neal Ford

By Neal Ford

No one writes perfect code: even the best developers fall into bad habits and traps. These topics from The Productive Programmer illustrate blind spots and helps you write better code.

It is too easy to get into a coding slump and not realize it. This talk revitalizes your relationship to code, forcing you to rethink some of the thing that you take for granted and showing new approaches to solving hard problems. It covers topics that range from improve the overall structure of your code to the way you write JavaBeans, with lots of examples. Everything in this talk may not be new to you, but I guarantee that you'll see some things that will make you reevaluate the way you think about your code.

Session Outline:

  1. TDD
  2. Static Analysis
  3. Good Citizenship
    • getters and setters
    • Constructors
    • Static State
  4. YAGNI
  5. Occam and His Razor
  6. Question Authority
    • DSLs
    • JavaBean Specification
  7. SLAP
  8. New Languages
  9. Every Nuance
  10. Anti-objects



Regular Expressions in Java

close
Neal Ford

By Neal Ford

Regular expressions should be an integral part of every developer?s toolbox, but most don?t realize what an important topic it is. Regular expressions have existed for decades, but many developers don't understand how to take full advantage of this powerful mechanism, either through command line tools and editors or in their development.

This session shows how to fully exploit regular expressions. It begins with the basic premise of how regular expressions work, then shows how to take advantage of the RegEx library built into the Java platform. This session shows how to use wildcards, escape characters, meta-tags, character class operators, look-aheads/look-behinds, and how to use the greedy operators effectively. It covers regular expressions from the beginning through to advanced usage, both in Java and in tools that support regular expressions. This session is packed with real examples of regular expressions (including a game show with no fabulous prizes).

Key Session Points:

  • Regular expressions defined
  • Examples
  • Using the regex classes in Java
  • Regular expression techniques
  • Patterns
  • Groups and subgroups
  • RegEx Game Show!
  • Back references
  • Greedy, reluctant, and possessive qualifiers
  • Lookaheads and lookbehinds
  • Practical regular expressions
  • Best practices
  • Common Regex mistakes



  • Keynote: Software "Engineering" & Polyglot Programming

    close
    Neal Ford

    By Neal Ford

    About bridges, languages, engineering, polyglot programming, and the near future.

    Other engineers sneer at us when we call ourselves "Software Engineers", and they have a point. This keynote discusses real comparisons between traditional engineering and the software kind. It also delves into what it will take to make our profession a real engineering discipline and the near future of languages and environments. Come see your future.



    Debugging and Testing the Web Tier

    close
    Neal Ford

    By Neal Ford

    As out applications have spilled from the server across the wire to the web tier, we increasingly must debug and test in the browser. This session covers debugging and testing tools for clients, JavaScript, and Ajax.

    As the browser has become important again, our applications have spilled out of the server side to the web tier, and now we have to debug and test there. This session is all about debugging and testing the web tier. I discuss the tools Firebug, Venkman, the Developer's toolbar, and bookmarklets for debugging JavaScript, Ajax, and general browser behavior. Then, I discuss testing the web tier, first with unit testing via JsUnit, the user acceptance testing with Selenium and Sahi. This session is packed with examples and demonstrations, including real-world scenarios and pitfalls.

    Session Topics:

    • Debugging
      • Firebug
      • Venkman
      • Developer's Toolbar
      • Bookmarklets
    • Testing
      • JsUnit
      • Selenium
      • Sahi



    Advanced Selenium

    close
    Neal Ford

    By Neal Ford

    This session discusses advanced Selenium techniques for testing web applications. It discusses techniques for both TestRunner and Remote Control Selenium, including data driven tests, creating branch points, testing Ajax applications, creating flexible tests, integration with continuous integration, and tons more.

    By now, just about everyone has heard of Selenium, the revolutionary open source testing tool for web applications. This session takes Selenium to the next level, showing how to handle complex, real world scenarios in Selenium. It discusses Selenium setup for both TestRunner and Remote Control. Mostly, though, this session delves into specific techniques for testing real world kinds of behaviors in web applications. I discuss data driven tests, generated tests, decision points in tests, interactive Remote Control, integration with continuous integration, testing Ajax applications (including applications that only Selenium can test), and future directions. This session will turn up the volume on your testing to "11".

    Session Topics:

    • Generating random values
    • Data-driven tests
    • Remote control Selenium
      • Setup
      • Interactive mode
      • Writing and running tests
      • Decisions, decisions
      • Test Reusability
    • Integration with continuous integration
    • Documenting tests
    • Choosing the right mode for the job
    • Extending Selenium
    • Testing Ajax applications
      • Testing data
      • Testing dynamic user interface
    • Specialized Selenium
    • Future directions



    Introduction to JRuby

    close
    Neal Ford

    By Neal Ford

    This session describes JRuby, the 100% pure-Java implementation of the Ruby programming language. It covers the basics of programming with JRuby and examples of how to integrate it into existing Java projects.

    Like hamburger & fries and turkey & dressing, JRuby allows you to harness the awesome power of Ruby in your Java projects. This session describes the origins, capabilities, and limitations of JRuby, the 100% pure-Java implementation of the Ruby programming language. This session also demonstrates some areas where it makes sense to mixin Ruby and Java code: Rails on Java, testing, and dynamic programming. JRuby is a powerful implementation of Polyglot Programming, and this session shows you how to leverage this cutting-edge concept.

    Session Topics:

    • JRuby's origins
    • Calling Java from Ruby
    • Calling Ruby from Java
    • Limitations and pitfalls
    • Example usage
      • Rails on Java
      • Testing
      • Dynamic programming
    • The future



    Rails for JRuby

    close
    Neal Ford

    By Neal Ford

    This session explains all the hype surrounding Ruby on Rails, in a context familiar to Java developers. It covers convention over configuration, ActiveRecord, controllers, views, Ajax, scaffolding, testing, and deployment...on the JVM, using JRuby.

    Find out why everyone won't shut up already about Ruby on Rails! This web framework for Ruby has appeared from nowhere to become the critics darling: there must be good reasons why. This session shows those reasons, in a context familiar to Java developers. It discusses how configuration works in Rails, persistence through ActiveRecord, scaffolding, controllers, views, and Ajax. It also covers the important topic of testing, and how Rails makes it easy and automatic. Finally, this session discusses deployment on the JVM, using JRuby, and reflects back on the important lessons that Rails teaches Java developers. This session also presents information about the boundary between Rails, Ruby, and JRuby.

    Session Topics:

    • Why Ruby? Why Rails?
    • Getting started
    • JRuby and Rails
    • Convention over configuration
    • Scaffolding
    • ActiveRecord: Persistence done right
    • ActionPack
      • Controllers
      • Views
      • Ajax for free
    • Testing
    • Deployment
    • Reflection



    Productive Programmer: Automation and Canonicality

    close
    Neal Ford

    By Neal Ford

    This session discusses how to use the Productive Programmer principles of automation and canonicality to become a more productive programmer. This session describes these principles, but the primary focus of this session is demonstration of these principles with real-world examples.
    

    In The Productive Programmer, David Bock and I identify 5 principles of productivity: this talk goes into great detail on 2 of those principles. The session defines the principles and describes their use, but the primary focus of this talk is on real-world examples of how you can use these principles to make yourself a more productive programmer. Canonicality (the DRY principle from The Pragmatic Programmer) discourages repeating artifacts in projects. This talk shows effective ways to avoid this repetition. For example, I show how to reuse documentation via a Subversion hook that posts comments to a Wiki with an RSS feed. Automation refers to making the computer do more work for you. This talk includes tons of examples, all culled from real-world projects.

    Session Topics:

    • The Productive Programmer
    • Automation defined
    • Applying automation
      • Scripting with...
        • Win XP
        • Bash
        • Unix shell/cygwin
        • Ruby
        • Groovy
      • Case Studies
    • Canonicality defined
    • Applying canonicality
      • Hibernate and code generation
      • Documentation Part 1
      • Documentation Part 2

    <cite>Note: This is a companion talk to my other talk, <b>Productive Programmer: Acceleration, Focus, and Indirection</b>, but each talk is completely independent of the other -- they are not "Part 1" and "Part 2".</cite>
    


    Productive Programmer: Acceleration, Focus, and Indirection

    close
    Neal Ford

    By Neal Ford

    This session discusses how to use the Productive Programmer principles of acceleration, focus, and indirection to become a more productive programmer. This session describes these principles, but the primary focus of this session is demonstration of these principles with real-world examples.

    In The Productive Programmer, David Bock and I identify 5 principles of productivity: this talk goes into great detail on 3 of those principles. The session defines the principles and describes their use, but the primary focus of this talk is on real-world examples of how you can use these principles to make yourself a more productive programmer. Acceleration covers keyboard shortcuts (including ways to make better use of them) in both IntelliJ and Eclipse. Focus describes how you can modify both the operating system and your code base to eliminate noise. Indirection shows how a simple concept can have profound effects, including how to share a common set of plugins across an entire Eclipse project. This talk includes tons of examples, all culled from real-world projects.

    Session Topics:

    • The Productive Programmer
    • Acceleration defined
      • Applying Acceleration
      • Keyboard shortcuts
      • Plug-ins
      • Getting around in a hurry
      • Launching stuff
    • Focus defined
      • Applying Focus
      • Get out of the trees
      • Searching several ways
      • Code focus
      • Avoiding the trash pile
    • Indirection
      • Applying Indirection
      • links vs. shortcuts
      • Sharing stuff
      • Canonical plug-ins
      • Environment isolation

    Note: This is a companion talk to my other talk, Productive Programmer: Automation and Canonicality, but each talk is completely independent of the other -- they are not "Part 1" and "Part 2".



    The Busy Java Developer's Guide to Rules and Rules Engines Using JESS

    close
    Ted Neward

    By Ted Neward

    If you've been keeping your ear to the ground, you may have heard some talk recently about "rules", "business rules" and "rules engines", but not necessarily any clear discussion on what they are, how to use or design them, or why they might be useful or important.

    This presentation puts some concrete definition around what a "rule" is, how a "rule engine" like JESS (Java Expert System Shell) can enable your users to be more agile than they ever thought possible, where JSR-94 fits into both the J2EE and "lightweight" development environments, and how you can (finallY!) get out of the "infinite if-else game".



    The Busy Java Developer's Guide to Debugging

    close
    Ted Neward

    By Ted Neward

    Bugs? We all know your code has no bugs, but someday, you're going to find yourself tracking down a bug in somebody else's code, and that's when it's going to be helpful to have some basic ideas about bug-tracking in your toolbox. Learn to make use of the wealth of tools that the Java Standard Platform makes available to you--tools that your IDE may not know exist, tools that you can make use of even within a production environment.

    Learn to use jdb, jconsole, jps, jstat, and other tools to identify and squash software defects that just won't reveal themselves during development. Then, just in case those tools aren't enough for you, we'll look at how to write your own, special-purpose tools using the same technology backplane.



    The Busy Java Developer's Guide to Reflection

    close
    Ted Neward

    By Ted Neward

    If you've never used Reflection (java.lang.reflect), you don't know what you're missing. In this presentation, we'll take a code-first, soup-to-nuts look at the Java Reflection APIs, from how to examine the class metadata that Reflection provides, to using annotations to enhance that metadata with your own information, even through the use of Java Dynamic Proxies to create flexible object "interceptors" that can layer services in front of ordinary method calls with nothing more complicated and an interface and a factory.

    For beginning to intermediate Java developers who've not used Reflection or Dynamic Proxies before.



    The Busy Java Developer's Guide to ClassLoaders

    close
    Ted Neward

    By Ted Neward

    If you've ever gotten a ClassCastException and just knew the runtime was wrong about it, or found yourself copying .jar files all over your production server just to get your code to run, then you probably find the Java ClassLoader mechanism to be deep, dark, mysterious, and incomprehensible. Take a deep breath, and relax--ClassLoaders aren't as bad as they seem at first, once you understand a few basic rules regarding their operation, and have a bit more tools in your belt to diagnose ClassLoader problems. And once you've got that, and hear about ClassLoaders' ability to run multiple versions of the same code at the same time, and to provide isolation barriers inside your application, or even compile code on the fly from source form, you might just find that you like ClassLoaders after all... maybe.

    For a beginning to intermediate Java audience.



    The Enterprise Service Bus: Do We Really Need It?

    close
    Mark Richards

    By Mark Richards

    There has been a significant amount of buzz in the community and industry about the definition and role of an Enterprise Service Bus (ESB), particularly within the area of Service-Oriented Architecture (SOA). In this product-agnostic high energy session we will take a step back and consider whether we really need an ESB. Through real-world application and architecture scenarios we will see where an ESB would be helpful and where it would be overkill. We will take a look under the hood and find out just what an ESB is really doing, and take a quick look at JBI (JSR-208) and see the impact it has on the ESB worls. Then, using product-agnostic coding examples we will learn what an Enterprise Service Bus is supposed to do, then answer the question about whether the ESB is just a bunch of hype or if we really need it.

    Agenda - Introduction - Handling Distributed Services Today - ESB Alternatives - Services - ESB Capabilities - Rolling Your Own: Possible Java Implementations - ESB Use Cases - JBI (JSR-208) - Summary and Q&A



    Making Architecture Work Through Agility

    close
    Mark Richards

    By Mark Richards

    As companies continue to change the way they do business, so must the IT systems that support the business. Changes due to regulatory requirements, competitive advantage, mergers, acquisitions, and industry trends require flexible IT systems to meet the demands of the business. Software Architects must therefore make their architectures more agile to meet the flexible demands of today's business. Through real-world examples and scenarios we will explore some of the challenges facing Software Architecture and discuss several concrete techniques for applying agility to both the architecture process and the technical architecture itself. We will also look at various architecture refactoring techniques, and discuss the pros and cons of each. By attending this session you will learn how to apply various agile techniques to improve your architectures and overcome some of the challenges facing software architecture in today's ever-changing market.

    Agenda: - Introduction - Part One: Applying Agility to Architecture (Interactive) - Part Two: Agile Methodologies - FDD - Part Three: Agility and Architectural Refactoring



    Intro to Java Persistence API (JPA)

    close
    Mark Richards

    By Mark Richards

    In addition to providing a simplified API, the new EJB3 specification (JSR-220) defines a standard ORM Java Persistence API (JPA) that is rapidly gaining in popularity. As you will see in this session, JPA bears a striking resemblance to popular ORM solutions like Hibernate and Toplink. In this session we will explore in detail the new Java Persistence API offered by JSR-220. We will start by discussing the overall design and architecture of the JPA and how the major components within JPA interact. We will then look at defining mapping objects (entities) and how to use the EntityManager to manage these entities. Through interactive coding examples we will investigate the pros and cons of detached entities and merging, how to map and use entity relationships (1-1, 1-N, N-1, and N-N), discuss Lazy Loading, and finally see how to use XML mappings rather than annotations. More advanced features of JPA will be covered in a separate session.

    Agenda - Introduction - JPA Framework Overview - Defining and Mapping Entity Objects - Managing Entity Objects (EntityManager) - Detached Entities and Merging - Entity Relationships - Lazy Loading - Using XML Mappings - Summary



    Advanced Java Persistence API (JPA)

    close
    Mark Richards

    By Mark Richards

    This session picks up where the Intro to JPA session left off and covers some of the more advanced topics in the Java Persistence API. Some of the topics covered in this session include switching persistence providers, versioning, compound keys, entity inheritance, and finally handling both simple and complex stored procedures. Some knowledge of JPA is recommended for this session as I will not be covering the basics of JPA (that is covered in a separate Intro to JPA session). Through a combination of slides and interactive coding I will demonstrate these advanced topics using both Hibernate and Toplink JPA.

    Agenda - Introduction - Switching Providers - Versioning - Compound Keys - Entity Inheritance - Handling Stored Procedures - Summary and Discussion



    EJB3 Core Specification (JSR-220)

    close
    Mark Richards

    By Mark Richards

    EJB3 (JSR-220) offers some great improvements over the prior EJB specs in terms of development simplicity and new features. In this session we will explore in detail some of the new features of the core EJB 3 specification. Included in this session will be a hands-on discussion and demonstration of session beans, dependency injection, interceptors (aop), and Message-Driven Beans (MDB). For the interceptors discussion I will be showing how to define interceptors for enabling a method trace, mocking objects, and sending JMS message notifications to be later picked up by the MDBs I will be creating. During the session I will demonstrate the new features of EJB 3 through interactive coding examples. Note: this session does not cover the new Java Persistence API (JPA) - only the core specification.

    Agenda - Introduction - Constructing and Accessing EJB 3 Session Beans - Dependency Injection - Interceptors (AOP) - Method Trace - Mock Objects - Sending JMS Message Notifications - Message-Driven Beans (MDB) - Using XML over Annotations - Summary and Discussion



    Java Persistence: Approaching the Silver Bullet

    close
    Mark Richards

    By Mark Richards

    Java Persistence has come along way since the days of straight JDBC coding and custom framework development. We have at our disposal several outstanding open source frameworks such as Hibernate, Toplink, iBatis, and OpenJPA (just to name a few), and we now have a promising and emerging standards-based solution called Java Persistence API (JPA). However, all to often we find in the Java persistence space that it is a world of one-size-does-not-fit-all. We continually struggle with traditional ORM solutions like Hibernate when it comes to reporting queries, complex queries, complex relationships, and stored procedures, and we also struggle with managing the enormous amount of SQL required for solutions such as iBATIS or JDBC-based frameworks. In this coding-intensive session we will take a detailed look at identifying and overcoming the challenges we face when using frameworks such as Hibernate, iBATIS, and JPA, and how to combine the various persistence frameworks to create an effective Java persistence solution that approaches (but of course does not reach) the silver bullet.

    Agenda: - Introduction - Framework Differences - Brief Overview of iBatis - Brief Overview of JPA - Aspect Analysis - Inserts and Updates - Reporting Queries - Stored Procedures - Complex SQL - Debugging and Testing Techniques - The Fast Lane Reader Pattern - Combining ORM and SQL Mapping Frameworks - Summary and Q&A



    The Grails Plug-in System: Plug into productivity

    close
    Graeme Rocher

    By Graeme Rocher

    Grails is more than just a web framework, it is a complete platform and API for runtime configuration. This talk, by Grails project lead Graeme Rocher, will demonstrate Grails' modular architecture and how to hook into runtime configuration to adapt your application based on its environment and/or the presence of other plug-ins.

    The talk will start with an overview of the Grails architecture and then jump into an extended example of how to write your own plug-in. As part of the journey you'll learn how to customize the Grails build system, participate in runtime Spring configuration, add new persistence methods that work with Hibernate and enhance your existing classes through Grails' advanced Groovy Meta-programming system.

    Session Topics:

    • The Grails Architecture
    • Scripting Grails with Gant
    • Using Grails' Spring DSL: The BeanBuilder
    • Adding new methods, properties and constructors with ExpandoMetaClass
    • Packaging, distributing and installing your plug-in


    Grails: Spring & Hibernate Development Re-invented

    close
    Graeme Rocher

    By Graeme Rocher

    Spring & Hibernate development, although hailed in the past as being "lightweight", is still an XML-centric, configuration heavy approach to web application development. In this talk, by Grails project lead Graeme Rocher, you will discover how you can leverage Spring & Hibernate without ever having to write a line of configuration!

    The talk will demonstrate how Grails handles all the heavy lifting by performing runtime configuration based on conventions for you leaving you to focus on your business logic. At the same time you'll discover that none of what Spring & Hibernate provides has been taken away allowing you to leverage what is great about this frameworks from using AOP to mapping onto a legacy database system.

    Session Topics:

    • The Grails Architecture Overview
    • Grails & Spring
    • Re-using existing Spring services
    • Leveraging Spring AOP
    • Lightweight Hibernate with Grails
    • Using EJB3 annotations or Hibernate XML to map onto legacy system


    GORM - Object Relational Mapping with Hibernate De-mystified

    close
    Graeme Rocher

    By Graeme Rocher

    Hibernate is an immensely powerful ORM layer with an array of features and mapping options which comes at the cost of complexity. The web application framework Grails ships with an ORM layer that builds of top of Hibernate, but eliminates much of the complexity through clever use of convention and the dynamic features of the Groovy language. Known as GORM, it offers a convention-based mapping strategy that hooks into the Hibernate configuration model and provides an abstraction layer above Hibernate with powerful features like Groovy builders for Criteria, dynamic finders and transaction management through closures.

    This talk, by Grails project lead Graeme Rocher, will walk you through the features of GORM and demonstrate how to create different persistence mappings. Once the basics of mapping is understood you'll dive head first into persisting and reading data without ever accessing a Hibernate session!

    Session Topics:

    • GORM - An Introduction
    • Mapping Domain Models with GORM
    • Persisting and Reading data
    • Querying with Dynamic finders
    • Querying with Criteria"


    Annotation Hammer

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Annotation is an interesting feature in Java. However, like any features, there are good uses and bad uses. When should you use Annotation? This presentation will answer that question for you.

    In this presentation we will take a closer look at annotation. We will see how to write them, how to use them. Then we will take a look at examples of annotation in various Java applications/frameworks. We will discuss examples of good use and not so good use. We will then lay out some good practices to follow.



    Domain Driven Design

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Domain Driven Design (DDD) is an approach that places emphasis on the domain model and carrying it into implementation. DDD is mostly repackaging of fundamental OO Design. It brings new emphasis to what we should be already doing, but often find it hard and confusing given the realities and complexities of our real world. In this presentation we will take a close look at what DDD is and how to use it for agile development. We will discuss several design options, and also look at some examples of good modeling and layering.

    Domain Model Model and the implementation Domain objects and life cycle Developing with domain model Design strategies Refactoring



    OSGi: A Well Kept Secret

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    In this presentation we will introduce OSGi and discuss how it can help modularize and version your enterprise Java applications.

    In this session we will delve into: What is OSGi? OSGi fundamentals Modularization and versioning Developing and deploying components OSGi implementations OSGi and Spring integration



    Drooling with Groovy and Rules

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Rule based programming allows us to develop applications using declarative rules. These can simplify development in applications where such rules based knowledge is used for decision making.

    In this presentation we will take a look at Drools and its evolution into JBoss Rules and how you can express rules including Groovy and other alternatives. We'll taken an example oriented approach to creating a sample application.



    Java 6 Features, what's in it for you?

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    What benefit do new Java 6 features offer you. Are there issues with using these features. The objective of this presentation is not simply to introduce you to the features, but to the effective use of these as well.

    We will take a close look at a number of features that you will be expected to know well when you program using Java 6.



    get Fit

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Unit testing tells you, the programmer, that your code (and the change) meets your expectations. How do you know if you are meeting your customers' expectations? Agile development is all about feedback and doing what's relevant to the customers, isn't it? Framework for Integration testing or Fit helps you to automate tests for customer expectations.

    In this presentation we will learn how to write Fit tests and how to automate their execution. We will also use FitNesse.

    Topics: Beyond Unit Testing Integration Testing Customer Expectations Writing Fit Tests Writing Fixtures Automating tests What is FitNesse Using FitNesse



    Agile Estimating, Planning and Tracking: Part I

    close
    Pete Behrens

    By Pete Behrens

    Business leaders and stakeholders require accountability and accuracy in our software release projections and yet, as an industry, we have failed. However, many of these same leaders are not convinced that agile is any more than an excuse to avoid projections at all. While it is true that agility provides the framework to support change, it doesn't mean you can't provide accurate projections. In fact, a well-executed agile process actually provides more accurate results with less time investment than traditional methods. This session will demonstrate these agile project management techniques to manage 6-12 month projects.

    This session focuses on the release level, followed by Part II which focuses on the sprint level.

    In this session we will demonstrate an engaging agile team estimation technique to drive more accurate projections than traditional estimation techniques provide. Then we will explore multi-level planning and tracking practices to guide your understanding of how to use those estimates to manage your release goals.



    Agile Metrics and Measurements

    close
    Pete Behrens

    By Pete Behrens

    Are you being asked to measure your agility? How productive is your team? What is the quality of your product? How accurate are your estimates? Be careful, you will get what you measure.

    This session will evaluate metrics which attempt to measure productivity, quality, esimation accuracy, value, and return on investment within the context of an agile project. What measurements are teams using and why? We will explore various measurements used by session participants and discuss some of their pros and cons.

    We will discuss the pros and cons of various metrics and how each has the potential to create dysfunction within the team and how they can be "gamed".



    Groovy: The Next Generation of Java

    close
    Scott Davis

    By Scott Davis

    This is the year of the dynamic scripting language. Ruby (and Rails) has won the hearts and minds of many independent software developers. JavaScript is experiencing a renaissance thanks to the wild success of AJAX and websites like Google Maps. And Groovy (JSR-241) brings the same level of excitement and "scripting goodness" to the Java platform.

    In this presentation, we take a very pragmatic "prove it in code" approach to learning Groovy. Since the syntax is (almost) identical to Java, we can dive right in from the very beginning, learning the "syntactic sugar" as we solve real world problems.

    You'll learn how easy it is to install Groovy and get started working with it. You'll tackle file I/O, reading and creating text files. You'll create and parse XML and HTML. You'll interact with databases. You'll create Groovlets (servlets sprinkled with Groovy-dust). And finally, you'll get a brief introduction to Grails (hint: the 'G' is silent).



    Groovy and Java: The Integration Story

    close
    Scott Davis

    By Scott Davis

    I'm attracted to Groovy because of its spirit of inclusiveness. Because it extends my platform of choice, not replaces it -- include a single JAR in your classpath and you are Groovy-enabled. Because it offers full bidirectional integration with Java. Because it offers a nearly flat learning curve for experienced Java developers. Come see how you can use Groovy to augment your existing Java codebase.

    We'll look at calling Groovy from Java. We'll look at calling Java from Groovy. We'll look at compiling Groovy code, JARring it up, and deploying it alongside Java.

    Groovy offers the same level of integration with Ant. We'll look at Ant tasks that allow you to include Groovy in your build process. Or maybe you'd prefer to use the Groovy AntBuilder and completely manage your build in code. The choice is yours. The important thing is Groovy works along side your familiar toolkit instead of forcing you to replace it.



    Real World Grails

    close
    Scott Davis

    By Scott Davis

    Scott Davis is the Editor in Chief of aboutGroovy.com. The website, in addition to being, umm, about Groovy, is implemented in Grails. This talk shows you how to get started with Grails, but also talks about the experience of using it in a live, production web site.

    Grails is a fully integrated, modern Java web development stack. In a single zip file, it includes a web server (Jetty), a database (HSQLDB), a build system (GANT, a Groovy/Ant hybrid), a logging framework (Log4J), and a unit testing framework (JUnit). It also includes mainstream libraries like Spring for dependency injection, Hibernate for Object/Relational mapping, Quartz for scheduling, and SiteMesh for page layout. For Ajax, Grails allows you to choose between three major included technology stacks: Prototype/script.aculo.us, the Yahoo UI library, and Dojo. Coupling the power of these mainstream libraries with the ease-of-use that Groovy offers, you have an unprecedented collection of technologies that will have you up and running in record time.

    Grails maximizes the strengths of these familiar Java libraries while minimizing the XML jockeying it usually takes to get them all to play nicely with one another. It brings "Convention over Configuration" to Java. It uses Groovy as the language to glue the pieces together, which means that experienced JEE developers can learn Groovy in the context of libraries that they are already familiar with.

    It is no exaggeration to say that you will have your first Grails application up and running in minutes. But Grails is more than about a quick start. In this talk, we'll look at ways to move beyond the default configurations. We'll deploy a Grails app to an external Tomcat instance instead of the included Jetty server. We'll move from the default HSQLDB database to MySQL. We'll include external JARs to bring new functionality to the mix.



    The Zen of REST

    close
    Scott Davis

    By Scott Davis

    Google quietly deprecated their SOAP search API at the end of 2006. While this doesn't mean that you should abandon SOAP, it does reflect a growing trend towards simpler dialects of web services. Google joins a number of popular websites (Yahoo, Flickr, YouTube, del.icio.us) that offer all of the benefits of web services without all of the complexity of SOAP.

    REST isn't a specification or a framework -- it's a set of architectural principles. This means that you can begin using it immediately. No framework wars, no version mismatches. This talk demonstrates some of the more popular RESTful web services out there in the wild. It also shows you live examples of how to implement your own.

    We'll look at the simplest form of REST -- GETful web services. We'll also look at more sophisticated RESTful interfaces that utilize all of the HTTP verbs (GET, POST, PUT, and DELETE) and MIME types. Finally, we'll look at Atom and the Atom Publishing Protocol -- the RESTful implementation that Google chose to replace its aging SOAP implementation.



    Mocking Web Services

    close
    Scott Davis

    By Scott Davis

    In this talk, we'll survey the web services exposed by leading websites (Google, Yahoo, Amazon, eBay) and discuss how they can be easily mocked up for testing purposes and to aid offline development. You'll see working examples of RESTful, SOAP, and JSON web services, as well as strategies for unit and functional testing your asynchronous, service-oriented architecture.

    As more software engineers add unit testing to their everyday development regime, the concept of mock objects is becoming increasingly popular. Mock objects proxy more complicated objects, fulfilling their doppelganger's interface and behavior for testing purposes. Coding to interfaces instead of implementations is a best practice that applies equally well to POJOs and Web Services.

    Web Services, too, are being added to our toolkit with increasing frequency. Building a true service-oriented architecture brings with it new challenges: how do you code against an external service? If that service is metered, how do you develop iteratively without using up your production budget in tests? These questions and more are answered in this talk.



    RAD JSF with Seam, Facelets, and Ajax4jsf, Part One

    close
    David Geary

    By David Geary

    In this session, see how you can get Ruby On Rails-like productivity on the Java side of the house with this compelling combination of technologies.

    JSF has been out for nearly three years now, and in many respects, the JSF specification has become a bit long in the tooth. Fortunately, the open source community has picked up the ball in a big way. In this 2-session presentation, we will explore three open source projects based on JSF--Seam, Facelets, and Ajax4jsf-- that will propel you into the stratosphere of productivity.

    Seam is a framework from JBoss that combines the JSF and EJB3.0/Hibernate 3.0 frameworks into one component model. That means you only have to learn one framework to build compelling web applications.

    This is the first of a two-part session, where we'll focus mostly on the Seam framework.



    RAD JSF with Seam, Facelets, and Ajax4jsf, Part Two

    close
    David Geary

    By David Geary

    A continuation of a 2-session presentation on Seam, Facelets, and Ajax4jsf.

    In the second part of this 2-session presentation, we'll turn our attention to Facelets and how you can use this compelling display technology with Seam.

    We will also discuss Ajax4jsf and demonstrate how you can use that framework to create rich, interactive user interfaces for your JSF-based web applications.



    The Google Web Toolkit, Part One

    close
    David Geary

    By David Geary

    Developing highly interactive web applications, for the most part requires knowledge of a wide array of technologies: HTML, CSS, JavaScript, XMLHttpRequest, JSP, JSF, etc.

    With the Google Web Toolkit (GWT), Google turns that notion of development on its head. Instead, you implement Ajax applications by writing almost entirely in Java. You use an AWT-like API, which the Google compiler compiles to JavaScript that runs on the client.

    In the early days of Java, application development with the AWT was relatively simple. You had to have a decent understanding of Java and AWT fundamentals, but once equipped with such knowledge, you could dive in and develop some impressive applications.

    Ten years later, we have, in so many respects, gone significantly backwards. We've shoehorned technologies such as HTML into shoes for which they were never intended, and for our efforts, we have a mismatch of disparate technologies that one needs to knit together for a truly interactive web application.

    This is the first session of a two-part presentation on the GWT, where I'll concentrate on GWT basics: implementing Ajax-enabled applications in Java, internationalization, testing, and remote procedure calls.



    The Google Web Toolkit, Part Two

    close
    David Geary

    By David Geary

    The second part of a 2-session presentation on the Google Web Toolkit.

    In this session, we'll dive deeper into the GWT and explore some of it's more advanced aspects, such as implementing custom widgets, deploying your application in a servlet container, and implementing drag and drop.



    Spring 2.0: New and Noteworthy

    close
    Ben Hale

    By Ben Hale

    Spring 2.0 has marked a major advance in the Spring Framework. While still maintaining backwards compatibility, this release adds quite a few new features. What are those features and how do they add value? Come by and see.

    In this session we'll provide a practical tour of what's new in Spring 2.0. Spring 1.x users who are looking to upgrade to Spring 2.0 will love this session. If you're not using Spring already, this talk will give a great overview of the things you're missing out by not using Spring 2.0.

    The talk will highlight new configuration strategies, Spring AOP, bean scoping, JPA support, JMS improvements, new Spring MVC features, VM languages, and much more.



    Spring and Hibernate in the Middle Tier

    close
    Ben Hale

    By Ben Hale

    To today's JEE developer, there are two indispensable tools for creating applications; Spring and Hibernate. Together these two frameworks comprise one of the most powerful and often used stacks in the industry. While it is possible to do amazing things it's not always obvious how best to use them to maximize value. This session aims to correct that.

    In this session, we'll start by addressing the basic design of an application using Spring and Hibernate. Once we've established some baseline best practices, we'll focus on how to best use Hibernate (both 2 and 3) in the persistence tier. We'll take a look at the use of Spring's HibernateTemplate and some new strategies in Spring 2.0. To finish with a look to the future, we'll explore use of JPA (Hibernate implementation) with Spring 2.0.



    AOP and JMX: A match made in heaven

    close
    Ben Hale

    By Ben Hale

    You're winding down a project and you get that dreaded email from your project manager, "How hard would it be to add some performance monitoring to the system?" Well, after this session, you'll be able to respond, "No problem at all!" It turns out that with a pinch of AOP and a dash of JMX, you can introduce amazing management and monitoring capabilities without changing your mainline code one bit.

    In this session, we explore the technologies of AOP and JMX and how they can be used together to transparently add management and monitoring in a completely non-invasive way. We'll explore some of the various AOP packages including Spring AOP and AspectJ and how they can be used to apply management and monitoring inline to an application. Once we've added this functionality we'll how to expose it using JMX using Spring's JMX support and consume it using JConsole or Spring.

    If you're tentative about introducing AOP or JMX into your application, come take a look at some of the cool things you can do with them and how easy it can be.



    Acegi Security: The security framework with the funny name

    close
    Ben Hale

    By Ben Hale

    Security is one of the major requirements in modern day enterprise applications and yet it is also one of the weakest parts of most developers toolboxes. The problem is of course that security is HARD! It turns out that rather than reinventing the wheel for each application, developers can turn to a great security framework out there already; Acegi.

    In this session we'll discuss a little known but widely used Spring sub-project called Acegi Security. Acegi is a great tool for implementing security at the URL, method, and domain object layers and can greatly simplify security requirement fulfillment for enterprise applications. The first part of the session will focus primarily on some basic security concepts and where Acegi fits into the equation. The second part of the session will focus on basic design and usage principals of Acegi. The final segment will be a live coding example where we actually take an application and add all three levels of Acegi security to it. As a bonus, I'll even tell you the story of how the Acegi name came about :)



    Spring Web Flow Jumpstart

    close
    Ben Hale

    By Ben Hale

    Have you ever developed a web application with a long user action based on form input? Did you curse the Java community for their inability to address this very common application type? Well, attend this session about Spring Web Flow and you'll curse no more.

    In this session we'll learn about a new(ish) Spring sub-project, Spring Web Flow. Spring Web Flow is an innovative new framework for declaratively modeling web application user interactions. We'll start with an exploration of some web development issues and then take a look at the value proposition that Web Flow brings to the table. Once everyone is comfortable with that, we'll jump straight to code. We'll start by exploring some of the features that SWF has and then we'll finish with a live coding example where the audience will help write the application.



    Writing Good APIs

    close
    Brian Pontarelli

    By Brian Pontarelli

    Writing APIs is fairly easy but writing an API that is usable and lives longer than a few days is hard. This talk discusses methodologies, tips and tricks for writing good APIs.

    During the course of this talk we'll cover many of the common forms of APIs including base types, domains, services and toolkits and how to approach writing each type. We'll also cover the different between internal and external APIs and how to protect your code from your clients.

    Attendees should take away a base set of tactics that assist in writing solid APIs.



    Gradual Agile: The Secret to Introducing Agile Practices

    close
    Jared Richardson

    By Jared Richardson

    Agile practices are popular because they work, but getting people to take that first step can be tricky.

    We'll look at how continuous integration was successfully introduced to a very large, established software shop and used to introduce other Agile practices. Let's see what lessons we can draw from this example that you can take back to your shop.



    Agile Software Testing Strategies

    close
    Jared Richardson

    By Jared Richardson

    Creating and maintaining a solid automated test suite is critical to an Agile strategy, but often we're just told to "Do it." In this talk we'll look at several pragmatic strategies for creating and building your suite.

    We'll examine these strategies and then look at scenarios for using them next week. This presentation will get you started whether you're starting a new project or trying to clean up an existing one.



    Shippers Unite!

    close
    Jared Richardson

    By Jared Richardson

    An overview of the Agile software approach from the book Ship It! A Practical Guide to Successful Software Projects.

    This book provides a comprehensive look at the software life cycle and can be used to retool the way you, and your team, builds software. While we can't cover the entire book in nintey minutes, we can look how a holistic view of the software life cycle helps you improve your projects and makes your life easier.



    Build Teams, Not Products

    close
    Jared Richardson

    By Jared Richardson

    A great team builds great software, but how do you build a great team?

    Let's move beyond getting lucky and look at some key practices that will help you build your scattered cats into a well-oiled machine.



    Continuous Integration with Cruise Control

    close
    Jared Richardson

    By Jared Richardson

    Continuous Integration is increasingly recognized as a vital practice in an Agile software shop. Traditionally it's been difficult to set up and administer. Today, that's no longer the case.

    We'll look at Cruise Control, a popular CI package. We'll start with the "quick-start" binary release, then change the set up to point to our own project. When we're done, you'll be able to set up your own Cruise Control install on Monday morning.



    Ajax Design and Architecture

    close
    Glenn Vanderburg

    By Glenn Vanderburg

    Ajax applications have unique design and architectural challenges and opportunities. This presentation will show you how to take advantage of the Ajax's strengths, and work around its quirks.

    We'll start with an overview of Ajax, and then dive right into an extended example where we add Ajax to an existing web application. Along the way we'll cover several tools that we use to aid in Ajax development: The JavaScript Shell, Firebug, and the Web Developer's Toolbar. We'll also look at two popular JavaScript Ajax libraries: Prototype and Scriptaculous.

    With the example application under our belts, we'll move to a discussion of Ajax architectural questions, including:

    How do I select an Ajax library? What format data should my Ajax calls use: XML, JSON, HTML, or other? How do I handle the back button and deep linking in Ajax? Prior exposure to Ajax and JavaScript is useful but not required.



    JavaScript Exposed: There's a Real Programming Language in There! (Part 1)

    close
    Glenn Vanderburg

    By Glenn Vanderburg

    With the sudden importance of Ajax, it's time to take JavaScript seriously. That means learning it the right way: looking at the fundamentals of the language and surveying its strengths and weaknesses, instead of just copying other people's poorly written examples.

    JavaScript got a bum rap. It's almost universally derided among serious programmers for being a toy language, or for its strange characteristics, or bugs, or slowness, or because it's only good for adding useless window dressing to web pages.

    But JavaScript is actually a very nice little language which is popping up everywhere these days (not just in Ajax apps). Sure, JavaScript is quirky, but its problems are mostly due to history, association, and misunderstanding. Especially misunderstanding. Let's face it: most developers learned JavaScript by looking at examples in web pages they found online, and few of those examples are paragons of JavaScript style. Other developers learned JavaScript from books, but the typical JavaScript book ignores the fundamentals of the language, instead focusing on examples and the fastest ways to do fancy web page tricks.

    In this talk, we'll go back to the basics that most JavaScript resources omit. We'll talk about JavaScript as a language, learning its fundamental concepts and the simple rules that underlie the sometimes bewildering behavior.



    JavaScript Exposed: There's a Real Programming Language in There! (Part 2)

    close
    Glenn Vanderburg

    By Glenn Vanderburg

    Building on part 1, this talk dives deep into JavaScript's object model. We'll see how it differs from more mainstream object-oriented languages, and why. We'll explore how to hide some of those differences, as well as the reasons you might not want to. Additionally, we'll cover useful tools for JavaScript testing, debugging, and profiling.

    Ajax is not the focus of this talk, but a strong foundation in JavaScript is essential for working with Ajax.



    Java Performance Myths

    close
    Glenn Vanderburg

    By Glenn Vanderburg

    Performance myths about the Java platform abound, from the general "Java is slow", to the more specific "reflection is slow", "allocation is slow", "synchronization is slow", "garbage collection is slow", etc. Many of these myths have their root in fact (in JDK 1.0, everything was slow); today, not only are many of these statements not true, but Java performance has surpassed that of C in many areas, such as memory management.

    In this class, we'll look at some common Java performance myths, identify where they came from, and explore the platform changes that have rendered them no longer true. Many common performance hacks don't actually help, and some can seriously hurt performance. The result is that clean code that follows common usage patterns generally shows far better behavior on modern JVMs than code laden with tweaks designed to "help" the JIT or garbage collector. More often than not, this well-intentioned assistance has the unfortunate effect of undermining many common JIT optimizations, resulting in slower -- not faster -- code.



    Everything Old Is New Again

    close
    Glenn Vanderburg

    By Glenn Vanderburg

    The early years of computers -- the '50s and '60s -- were characterized by furious exploration of a huge variety of different ideas. Since then many of the hot topics of those days have moved to the fringe, largely ignored by the mainstream of software development. But some of them are being rediscovered, and a lot of what we think of as "new developments" are really just some old ideas returning to center stage.

    This talk will trace the roots of some contemporary software trends back to their origins before most of us were born.