New England Software Symposium

April 4 - 6, 2008 - Boston, MA


Sheraton Ferncroft
50 Ferncroft Road
Danvers, MA   01923
Map »

Session Schedule

We are committed to hype-free technical training for developers, architects, and technical managers. We offer over 65 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 - April 4


  North Shore B&C North Shore A Newburyport Gloucester Ipswich Georgetown
12:00 - 1:00 PM REGISTRATION
1:00 - 1:15 PM WELCOME
1:15 - 2:45 PM
2:45 - 3:15 PM BREAK
3:15 - 4:45 PM
4:45 - 5:00 PM BREAK
5:00 - 6:30 PM
6:30 - 7:15 PM DINNER
7:15 - 8:00 PM Keynote: Ancient Philosophers & Blowhard Jamborees by Neal Ford

Saturday - April 5


  North Shore B&C North Shore A Newburyport Gloucester Ipswich Georgetown
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM
10:30 - 11:00 AM MORNING BREAK
11:00 - 12:30 PM
12:30 - 1:30 PM LUNCH
1:30 - 3:00 PM
3:00 - 3:15 PM BREAK
3:15 - 4:45 PM
4:45 - 5:30 PM BIRDS OF A FEATHER SESSIONS

Sunday - April 6


  North Shore B&C North Shore A Newburyport Gloucester Ipswich Georgetown
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM
10:30 - 11:00 AM BREAK
11:00 - 12:30 PM
12:30 - 1:30 PM LUNCH
1:30 - 2:15 PM EXPERT PANEL DISCUSSION
2:15 - 3:45 PM
3:45 - 4:00 PM BREAK
4:00 - 5:30 PM

A Thorough Introduction To Groovy

close
Jeff Brown

By Jeff Brown

Groovy is an agile dynamic language for the Java platform. The language and its libraries bring many things to the table to ease the process of building applications for the Java platform. This session provides a detailed run through Groovy with lots of code samples to drive home the power of the language.

Dynamic languages provide a lot of power and flexibility compared to statically typed languages. Groovy brings that power and flexibility to the Java platform in a way that is totally compatible with all of your existing Java code, tools and infrastructure. This session covers all of the fundamentals of Groovy and gives developers a whole lot of practical information they need to get started with the language.



Powerful Metaprogramming Techniques With Groovy

close
Jeff Brown

By Jeff Brown

Metaprogramming is a key component in building truly dynamic and flexible applications with Groovy. Groovy's metaprogramming capabilities bring great new possibilities to the table that would be very difficult or just plain impossible to write with Java alone. This session will demystify a lot of the magic that seems to be going on inside of a Groovy application.

When Java developers are first introduced to Groovy one of the first things they notice is how much easier things are in Groovy compared to Java. Boilerplate code typically generated by your IDE all melts away to nothing in a Groovy bean. Creating XML is a snap, not a tangled mess. File I/O is a breeze. Those developer productivity gains are an important part of the story. However, in addition to making easy the things you are used to doing the hard way Groovy brings whole new capabilities to the party that Java developers don't even think about because you can't do those things with Java. Many of those capabilities are made possible because of the powerful metaprogramming capabilities

Prerequisite: A Thorough Introduction To Groovy



Agile Test Driven Development With Groovy

close
Jeff Brown

By Jeff Brown

Dynamic languages bring a lot of interesting elements to the table for teams interested in doing Test Driven Development (TDD). Groovy lends itself very well to TDD and this session demonstrates many features of the language and its libraries that help teams build more testable systems and build better tests.

The value of Test Driven Development (TDD) has become widely accepted. The practice has extended beyond just XP teams. Good TDD practices yield high quality software and help teams maintain confidence in their software as complexity grows. The dynamic nature of Groovy makes TDD easy and fun. Groovy may be used to unit test not only Groovy code but other code as well. Testing Java code with Groovy is a snap. Learn to use the power of Groovy to test your systems.



Grails - Agile Web 2.0 The Easy Way

close
Jeff Brown

By Jeff Brown

Grails is a full stack MVC framework for building web applications for the Java platform. Grails makes web application development both fun and easy. This session covers all of the fundamentals of building web applications with Grails.

Businesses need rich web applications and developers want to be able to build those applications without the pain that usually comes along with doing so. Grails addresses these needs very well. Grails demolishes many of the pain points that Java developers have almost (not quite) become numb to after years of suffering. This session covers all of the fundamentals:

Introduction To Grails

Domain Objects

Controllers

GSPs

Custom TagLibs

GORM



Advanced Web Development With Grails

close
Jeff Brown

By Jeff Brown

Grails makes web application development both fun and easy. This session dives beyond the basics to cover advanced details of Grails that bring the really exciting features to your applications.

Getting started building web applications for the Java platform is easy. Following that through to rich interactive applications that solve the business needs is more tricky. Grails goes the whole way to address pain points not only for simple applications but of real enterprise applications with real demands. This session steps through many of the advanced features of Grails that help get your applications through that last 20% that teams often struggle with.

Prerequisite: Grails - Agile Web 2.0 The Easy Way



Groovy And Your Build

close
Jeff Brown

By Jeff Brown

There are numerous roles that Groovy may play in your build process to greatly simplify the management of the build while bringing more capabilities. This session will detail a lot of the things that Groovy can do to improve your build and lessen the amount of effort you spend on your build.

Of all the places that Groovy may help your application, the build is one that is often overlooked but there are really fantastic reasons that the build is a great place for Groovy to be. The build isn't part of your deliverable application so introducing new technology there is much easier than it might be in other areas. Introduce Groovy into your build and let your team develop their Groovy expertise there. That is a great way to discover and take advantage of the great power that Groovy has to offer. After teams appreciate that power they are in a great position to start taking advantage of that power in the application itself.

This session will details many ways that Groovy can hel

Prerequisite: A Thorough Introduction To Groovy



Test Driven Design

close
Neal Ford

By Neal Ford

Most developers think that "TDD" stands for Test-driven Development. But it really should stand for "Test-driven Design". Rigorously using TDD makes your code much better in multiple ways.

This session demonstrates how stringent TDD improves the structure of your code. I discuss TDD as a technique for vetting consumer calls, using mock objects to understand complex interactions between collaborators, and some discussions of improved code metrics yielded by TDD. This session shows that TDD is much more than testing: it fundamentally makes your code better at multiple levels.



Evolutionary SOA

close
Neal Ford

By Neal Ford

This session demonstrates that "Agility" and "SOA" complement each other quite well. Just because SOA is buzz-word compliant doesn't mean that you should throw good practices out the window. This session demonstrates how you can apply the principles of agility to building highly complex distributed enterprises.

Managers and ivory tower architects seem to think that all the rules that apply to "normal" software don't apply to SOA. Ironically, they matter even more. Agility and SOA are closely aligned because SOA is about building complex distributed systems and Agility is about effectively building complex software. This session unveils the pillars of successful SOA and how to achieve them in a testable, iterative fashion. It discussing testing strategies, how to make your architecture more robust and maintainable, and how to design an evolutionary architecture.



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: TDDStatic AnalysisGood Citizenshipgetters and setters ConstructorsStatic StateYAGNIOccam and His RazorQuestion AuthorityDSLsJavaBean Specification SLAPNew Langua



Keynote: Ancient Philosophers & Blowhard Jamborees

close
Neal Ford

By Neal Ford

It turns out that ancient philosophers knew a lot about software -- did you know that Plato defined object-oriented programming? This keynote applies old lessons to new problems and old problems to new lessons. It describes why SOA is so hard, and why people in your company make bone-headed decisions. What other keynote includes Rube Goldberg, Aristotle, Dave Thomas, and Chindia?

Plato, Aristotle, Occam, Rube Goldberg, Dave Thomas, and Demeter...with pictures!



Productive Programmer: Acceleration & Automation

close
Neal Ford

By Neal Ford

Developers from the 1980s would be shocked at how inefficiently developers use their computers because of the advent of graphical operating systems. This talk describes how to reclaim productivity afforded by intelligent use of command lines and other ways of accelerating your interaction with the computer and bending computers to do your bidding. Stop working so hard for your computer!

In The Productive Programmer, I identify 4 principles of productivity: this talk goes into great detail on 2 of those principles. It 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 ways to speed up development by taking command of your computer. This includes keyboard shortcuts (including ways to learn them and make better use of them) in both IntelliJ and Eclipse. Automation refers to making the computer do more work for you. This talk includes tons of examples, all culled from real-world projects. Note: This is a companion talk



Productive Programmer: Canonicality & Focus

close
Neal Ford

By Neal Ford

Getting work done in modern office environments is a daunting task. This session tackles 2 of the things that drag down developer productivity: lack of focus and creeping repetition.

In The Productive Programmer, I identify 4 principles of productivity: this talk goes into great detail on 2 of those principles. This session defines the principles of Canonicality and Focus, 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. I show examples of creating DRY documentation, O/R mapping, database schemas, and development environments. Focus describes how you can utilize your environment (both physic



"Design Patterns" in Dynamic Languages

close
Neal Ford

By Neal Ford

The Gang of Four book should have been entitled "Palliatives for Statically Typed Languages", because the recipes it provides are cumbersome solutions to the problems it poses. Using powerful languages makes the solutions in the GoF book look hopelessly complicated. This session shows how to solve the same problems concisely, elegantly, and with far fewer lines of code using the facilities of dynamic languages.

The Gang of Four book was actually 2 books: a nomenclature describing common software problems and a recipe book for solutions. The vocabulary they defined is still useful. The recipes are a disaster! Dynamic languages (like Groovy and Ruby) have powerful meta-programming facilities far beyond statically typed languages. It turns out that many of the structural design patterns in the Gang of Four book and beyond are much easier to solve with meta-programming. This session compares and contrasts the "traditional" approach of design patterns with a more nuanced meta-programming approach. Using language features creates cleaner abstractions with fewer lines of code and little or no additional s



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 originsCalling Java from RubyCalling Ruby from JavaLimitations and pitfallsExample usageRails on JavaTestingDynamic programmingThe



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 t



Building DSLs in Static and Dynamic Languages

close
Neal Ford

By Neal Ford

This session discusses building Domain Specific Languages and DSL-style code in Java, Groovy, and Ruby. It discusses the different types of DSLs, details on how to implement them in Java, Groovy, and Ruby, and example problem domains where DSLs make sense.

You've heard all the hype for the past couple of years: Domain Specific Languages (DSLs) are going to take over the world. This session demystifies this topic in 2 ways: by providing concrete definitions for styles and applicability of DSLs and showing how to implement these different styles. I build up definitions for the different types of DSLs in static (Java) and dynamic (Groovy and Ruby) languages. Then, I discuss building DSLs as internal (i.e., built on top of an underlying language) and external (built using a preprocessor or grammar), with examples of each. Throughout this session, I discuss the applicability of this style of development and show targeted examples. I discuss fluent



Code Metrics & Analysis for Agile Projects

close
Neal Ford

By Neal Ford

What does code + methodology have to do with one another? Everything! Agile projects focus on delivering working code, and tools exist to allow you to verify some quality metrics for your code. This session is a survey of tools and metrics that allow you to determine the quality of your code and strategies to "wire it" into your agile project.

Agile projects focus on delivering code. The responsibility for the quality of that code lies with developers. Yet most developers have a poor sense of how to gauge the quality of code, both during development and forensically. This talk lives on the boundary between what is important in agile projects and ways to verify code quality. It is both a survey of tools and metrics and strategies for proactively applying these techniques to ongoing projects. I talk about the Hawthorne effect, analysis tools (both byte and source code), useful metrics, tools for generating metrics, and how to analyze raw data into actionable tasks.

Session Topics:The Hawthorne EffectHow Agility and Metrics Feed Eac



Agile Project Management (With Just a Bit About Mingle)

close
Neal Ford

By Neal Ford

You can read books about Agile projects, but you must consult real-world experience to really understand the dynamics of agile project management. This session discusses agile management topics including estimation, project tracking, and useful metrics (and how to obtain them). And just a little about Mingle, the agile project tracking tool from ThoughtWorks.

OK, sure, you can read the XP Explained book. Now what? Agile project management in the real world requires understanding of not just the practices but why they work. This talk delves into several topics relevant to agile project management, including estimation, project tracking, accurate project metrics (and the practices that make them possible). This talk is designed to describe some of the nuances required to handle real agile projects, along with a demonstration of some of the artifacts ThoughtWorks uses to track projects (the most elaborate spreadsheet you've ever seen!). And, towards the end, I show how our experience has culminated into Mingle, the agile project tracking tool from T



SOA Unplugged

close
Mark Richards

By Mark Richards

Awareness about Service Oriented Architecture (SOA) has grown significantly in the past several years. Unfortunately, along with that growth has come a significant amount of confusion about what SOA really is. SOA has become such a ubiquitous buzzword that it now has many faces and means different things to different people. CIO's, managers, vendors, business users, architects, and developers all see SOA differently which creates a sea of confusion about what is and isn't SOA. In this highly interactive and thought provoking session we will look beyond the hype and marketure of SOA and explore SOA from an architecture and development point of view - in other words, SOA as an architecture pattern. During this session we will look at SOA use cases, services, integration, implementation, guiding architecture principles of SOA, and attempt to answer the following question: What is and isn't SOA?

Agenda

- SOA? Someone help me, please!

- What is and isn?t SOA?

- SOA Architecture Pattern Elements and Principles

- What All This About an ESB?

- SOA Challenges

- Post Discussion

- Summary



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



Enterprise Messaging Using JMS (Part 1)

close
Mark Richards

By Mark Richards

The chances are good that at some point in your career you will need to use messaging to pass information between applications, subsystems, or external systems, particularly with service-oriented architecture on the rise. The Java Messaging Service (JMS) allows Java applications to implement messaging using a standard API, thereby removing the dependency on any particular messaging provider. In Part 1 of this session we will take a look at some of the basics of messaging, including sending and receiving messages, message types, and request/reply messaging. I will begin the session by going over the basics of messaging and the JMS API. Then, through interactive coding using OpenJMS I will demonstrate how to connect to JMS providers, send messages, receive messages, and use message properties. Please note that this is a two part session.

Agenda:

JMS Basics

- Messaging Models Overview

- JMS Message Structure

- Primary JMS Interfaces

- JMS Providers

- Internal vs. External Destinations

Practical JMS

- Obtaining a JMS Connection

- Sending a Message to a Queue

- Receiving a Message from a Queue

- Using Message Properties

- Implementing Request/Reply Messaging

- Message Correlation



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 EE Command Pattern Architecture

close
Mark Richards

By Mark Richards

Tired of dealing with EJBs but cannot use other frameworks like Spring? How would you like to replace all of your remote Stateless Session Beans with POJOs and still access them remotely within Java EE? By using the Java EE Command Pattern we can write EJBs as POJOs and solve many of the issues facing EJB, including testability, configuration complexity, and performance, and still remain within the boundaries of the Java EE container. The Java EE Command Pattern is a simple pattern that can significantly reduce the complexity of large-scale Java EE enterprise applications. In this session we will explore the numerous issues facing a typical EJB architecture and learn how the use of the Java EE Command Pattern can solve these issues. We will walk through the different design alternatives and see how the command pattern is implemented in both EJB3 and in Spring. Through interactive coding examples you will learn what components make up the Command Pattern framework and what simple coding changes are required to convert a complex remote EJB-based application to a much simpler remote POJO-based application.

Agenda

- Issues with J2EE

- Java EE Command Pattern Introduction

- Java EE Command Pattern Core Components

- The Command Pattern Framework Implementation (EJB)

- The Command Pattern Framework Implementation (Spring/RMI)

- Applying the Command Pattern to a Typical EJB Application



Transaction Design Patterns

close
Mark Richards

By Mark Richards

Most web-based applications rely solely on the database to manage transactions, thereby freeing the developer from having to worry about transaction management. While this works in some circumstances, there are times when the use of transactions is vital to the integrity and operations of an application and its corresponding data. In this session I will demonstrate through real-world coding examples why transactions are such a critical part of the application development process. I will review the basics of both programmatic and declarative transactions, then introduce three transaction design patterns and explain when they should be applied, how to use them, and what problems they solve. By the end of this session you will see that by using transaction design patterns you can build an effective transaction management strategy for your application with very little effort.

Agenda:

Why Transactions Are Necessary

Programmatic Transaction Management (EJB, Spring)

Declarative Transaction Management (EJB, Spring)

Transaction Design Patterns Overview

Client Owner Transaction Design Pattern

Domain Service Owner Transaction Design Pattern

Server Delegate Owner Transaction Design Pattern

Summary



REST : Information-Driven Architectures for the 21st Century

close
Brian Sletten

By Brian Sletten

There is a shift going on in the Enterprise. While still used and useful, the promises of the SOAP/WSDL/UDDI Service-Oriented Architecture (SOA) stack have failed to live up to their promise. A new vision of linked information is enveloping online and Enterprise users. The REST architectural style is squarely behind this thinking as a way of achieving low-cost, flexible integration, increased data security, greater scalability and long-term migration strategies.

If you have dismissed REST as a toy or are unfamiliar with it, you owe it to yourself to see what is so interesting about this way of doing things.

There is tremendous interest in REpresentational State Transfer (REST) as an architectural style for building scalable, flexible, information-driven architectures in the Enterprise. The success of the Web has caught our attention in the face of increased complexity and many failures with more traditional Web Services technologies. The problem is that it is difficult to sell a way to do things. Managers do not want to feel like they are innovating in the middleware space. They want to understand why they should deviate from the blue prints laid down by the industry leaders. They want to understand when they should use REST, when they should use SOAP and when they might fallback to regular old



REST - Live!

close
Brian Sletten

By Brian Sletten

You've read the articles, the books, the Ph.D. thesis and all of the meta-commentary about building RESTful APIs, but you're still not sure where to begin.

This is an interactive session and has almost no slides. You should come prepared to discuss ideas and maybe pair program with me and everyone else in the room. Bring your ideas for open source projects that we might want to expose through a resource-oriented model. Bring your concerns about your domains that you are convinced don't fit this model.

This is not an introduction to REST. If you do not know anything about REST, please come to the "Give it a REST" talk if that is offered as well. If not, we can have a quick review, but this session is more for people who want to talk about how the ideas apply.



RESTlet for the Weary

close
Brian Sletten

By Brian Sletten

If you have started to take a look at REST as way of exposing web services or managing information spaces, you may be frustrated by the support offered by legacy containers. There is no direct support for REST concepts in the J2EE specs (yet). XML-based configurations are so 1990's. Come learn about Restlets, a little API that has caught the attention of many in the RESTafarian community.

The Restlet API was created by a guy who wanted object-level support for RESTful concepts, but didn't want to make the move to an advanced resource-oriented environment like NetKernel. He wanted his REST and conventional environments too. He also wanted a path to more modern containers that aren't tied to a blocking I/O model like the Servlet spec is.

This talk will include a brief review of REST and its primary concepts and will then provide an introduction to the Restlet API and how it supports these ideas. It will then focus on standing up a REST-oriented infrastructure using the Restlet API and a variety of other open source tools to support a publish/find/bind infrastructure without to

Prerequisite: REST (unless you are very comfortable with REST)



Know your Java?

close
Venkat Subramaniam

By Venkat Subramaniam

Java has been around for well over a decade now. It started out with the goal of being simple. Over the years, its picked up quite a bit of features and along comes complexity. In this presentation we will take a look at some tricky features of Java, those that can trip you over, and also look at some ways to improve your Java code.

Java features

Set of tricks

Tips to improve your Java code



Caring about your Code Quality

close
Venkat Subramaniam

By Venkat Subramaniam

We all have seen our share of bad code. We certainly have come across some good code as well. What are the characteristics of good code? How can we identify those? What practices can promote us to write and maintain more of those good quality code. This presentation will focus on this topic that has a major impact on our ability to be agile and succeed.

Characteristics of quality code

Metrics to measure quality

Ways to identify and build quality



Design Patterns in Java and Groovy

close
Venkat Subramaniam

By Venkat Subramaniam

You're most likely familiar with the Gang-of-four design patterns and how to implement them in Java. However, you wouldn't want to implement those patterns in a similar way in Groovy. Furthermore, there are a number of other useful patterns that you can apply in Java and Groovy. In this presentation we'll look at two things: How to use patterns in Groovy and beyond Gang-of-four patterns in Groovy and Java.

Patterns overview

Implementing common patterns in Groovy

Beyond Gang-of-four patterns in Java and Groovy

Lots of examples



FP on JVM

close
Venkat Subramaniam

By Venkat Subramaniam

Functional Programming Languages (FPLs) have been around for a long time. A lot of features that we get excited about in dynamic languages are common place in FPLs. FPLs are gaining importance due to various changes in our industry. What's exciting is that you can use them on the JVM. In this presentation we will dig into the details of what makes FPLs so interesting and look at ways to use them on the JVM?in your Java projects.

What's Functional Programming?

Why is Functional Programming suddenly important?

Features of Functional Programming

Functional Programming Languages

JVM and FPLs

Examples of Functional Programming features

Examples of mixing Java and FPLs



DSL in Groovy

close
Venkat Subramaniam

By Venkat Subramaniam

DSL or Domain Specific Languages focus on a domain or problem at hand. They're expressive, but their restricted scope keeps them simple and small from the user point of view. However, designing them is not easy. In this presentation we will explore the features of Groovy and show how they can be used to create DSLs.

What's DSL?

Characteristics of DSLs

Types of DSLs

Designing DSLs

Groovy features that enable DSLs

Examples of DSLs in Groovy

Creating DSLs in Groovy



Spring Dynamic Modules for OSGi Service Platforms

close
Venkat Subramaniam

By Venkat Subramaniam

OSGi is a specification that helps with versioning Java modules at runtime. Spring helps with dependency injection of Java components and beans. Spring has embraced OSGi and allows you to integrate different OSGi implementations into your Spring applications. In this presentation we will look at the rational for mixing Spring and OSGi and look at code examples of the same.

What's OSGi?

OSGi features

Spring integration with OSGi

Examples of using OSGi in Spring



Acceptance Testing Application Behavior

close
Venkat Subramaniam

By Venkat Subramaniam

How do you ensure your applications meet the expectations of your key customers? In this session we will explore using the FIT tool and Behavior Driven Design tools to do exactly this.

Unit Testing helps you, the programmer, verify your application meets and continues to meet your expectations. But how do you ensure that your application meets and continues to meet the real expectations, those of your domain experts and key customers? We will take a look at two distinct approaches for customer acceptance testing. We will take a look at using FIT for testing behavior and at Behavior Driven Design tools and techniques. Both these approaches can helps us create what is called executable documentation and to stay sane in the world of changing requirements and evolutionary design.



Internationalization and Localization in Java

close
David Bock

By David Bock

Internationalization and Localization in Java is easy, right? Everyone knows you just store your strings in some resource bundles, set the locale, wave your hands a little bit, and your application is good-to-go. Right? Maybe not... Java provides some great utilities to get started, but leaves you needing more when it comes to things like screen layout, cultural sensitivities, semantic differences in translation, use of color and iconography, and other issues.

This presenter spent 9 years developing applications for the U.S. State Department that have been deployed in dozens of countries and languages. While some aspects of internationalization and localization are trivial, there are plenty of issues that are not. If you have an application that you expect to localize into other locales, there will be information here that is invaluable to you. This talk is entertaining for the war-stories alone! No other no-fluff presentation will feature pictures of the presenter waiting in line behind a herd of sheep to cross a pontoon bridge into Bosnia.



Maintaining Project Integrity with JDepend, Macker, PMD, Maven, and other open source tools

close
David Bock

By David Bock

How many times have you started a new project only to find that several months into it, you have a big ball of code you have to plod through to try to get anything done? How many times have you been the ?new guy? on an established project where it seems like the code grew more like weeds and brambles than a well-tended garden? With a few good structural guidelines and several tools to help analyze the code, we can keep our project from turning into that big ball of mud, and we can salvage a project that is already headed down that path.

This talk will talk about everything from build processes, teamwork, and project structure through versioning, release plans, upgrde strategies, package dependencies, and more. Using real-world scenarios from two projects with 12-15 people working together over a 5-year time span, this presentation will offer advice based on multiple successful deliveries of real software.



Intermediate Maven

close
David Bock

By David Bock

Maven is a build tool that does a lot, demos well, and leaves the build maintainers managing what seems like unbridled complexity. It doesn't have to be that way - Maven is driven by some strong 'build process methodology', and that complexity can become manageable by wrapping your head around it. Furthermore, you can migrate to Maven 'piecemeal', by mapping your existing ant build to the Maven Lifecycle and calling your existing Ant tasks - you can decide to sip the Maven kool-aid.

Ideally, a build tool should be so simple and approachable that it fades into the project background and allows anyone to maintain it. Unfortunately, Maven's power comes at the expense of this ideal - Maven's philosophy is more like "the build process is so important that the people maintaining it should be steeped in the ways of Maven". This talk will give you the exposure you need without elevating The Maven Way to a religion.

In this talk we will cover:

Internals of the Maven POM

Integrating Maven with Eclipse

The Maven Build Lifecycle, and hooking your own goals into it

Calling Ant tasks from Maven

Extending your build with existing Maven Plugins

Maven subprojects and the SuperPOM

Writing your own Maven Plugins



Surviving Middle Management

close
David Bock

By David Bock

Most good developers eventually have the opportunity to be managers. Whether they call you the "project manager", "Technical Lead", "Lead Developer", or some other classic middle-management title, you become the 'goto' guy between management and developers. You're the guy who is expected to keep the project in-line, track a schedule, and occasionally answer the question "How's it going?", and perhaps still contribute at a technical level. So how do you do that?

So what do you do next? How do you plan what needs to be developed? How do you know if you are 'on schedule' or heading off-track? Using good ideas from a bunch of successful projects (but no methodology in particular), you will learn the basics of good project planning, execution, and tracking.

While this talk as management methodology agnostic, many of the ideas are tracable directly back to concepts from XP, SCRUM, and even RUP and CMMi. Whether you are following a management methodology or not, the ideas in this talk will be applicable to technical managers.



Simplifying Enterprise Applications with Spring, Part 1

close
Mark Fisher

By Mark Fisher

Developing enterprise applications isn't easy. You not only have to worry about constantly evolving business logic, but also need to address infrastructure concerns ranging from transaction management and security to manageability and integration with diverse external applications. Spring, the most popular lightweight enterprise application framework, comes to the rescue by simplifying the common needs of enterprise applications. This session (part 1 of 2) presents the core concepts of the Spring Framework.

In this session we discuss the motivations behind the Spring approach to creating enterprise applications. We cover the core ideas such as POJOs, dependency injection, container configuration, testing, and aspect-oriented programming. We also show how all of these concepts work together using a simple application. By the end of this session, you will have a clear idea of what Spring is and what it can do for you.



Simplifying Enterprise Applications with Spring, Part 2

close
Mark Fisher

By Mark Fisher

This session (part 2 of 2) will cover advanced concepts in the Spring framework. While the core concepts in the first session will get you started with Spring, the advanced concepts in this session will help you be more effective at developing Spring-based applications.

In this session, you will learn how to use Spring effectively across a wide range of technical areas such as persistence, transactions, web applications, remoting, manageability, and messaging. By the end of this session, you will be ready to start using Spring to build enterprise applications - or if you have already started using Spring, you should be able to do so more effectively.



Configuring Spring with Annotations

close
Mark Fisher

By Mark Fisher

In this session, we will take a deep-dive into annotation-based dependency injection with Spring 2.5. You will learn how to combine annotation and XML formats, how to customize component scanning, and how to leverage Java 6 annotations within a Spring application. Since there is no "one size fits all" solution to application configuration, we will wrap up the discussion with general guidelines to consider when employing this approach.

Although XML is the most widely used format for Spring configuration, other options do exist including properties files, Spring's Java Configuration, and even Groovy builders. Spring 2.5 adds to this mix with support for Java's @Resource annotation and Spring's @Autowired annotation. Spring 2.5 also supports classpath scanning for Spring components. This session will provide a comprehensive overview of these new Spring 2.5 features for annotation-based configuration.



Enterprise Security with Spring

close
Mark Fisher

By Mark Fisher

Spring Security (formerly known as 'Acegi') enables self-contained, consistent, and extensible solutions for securing your applications. Version 2.0 provides major enhancements including a domain-specific XML namespace, convention-based defaulting, and annotation support. This provides a significantly simpler experience for developers while still supporting the same degree of flexibility.

Spring Security's interceptor-based approach is non-invasive even when extended to accommodate domain-specific requirements. The two main security processes (authentication and authorization) are decoupled in order to provide flexibility across a wide variety of providers and strategies. This presentation will include an overview of Spring Security's pluggable authentication process and how it accommodates a wide range of possibilities including Database, LDAP, Single Sign On, and even an in-memory option for development and testing. We will then proceed to cover authorization where you will see its consistent approach for securing web requests and method invocations. Throughout the session,



Enterprise Integration with Spring, Part 1

close
Mark Fisher

By Mark Fisher

The first part of this two-part session will focus on the essentials of Enterprise Integration with Spring. The discussion will cover the enterprise integration support libraries in the Spring Framework core within the context of well-established design principles such as loose coupling and separation of concerns.

The presentation is driven by examples that progressively extend an application with various integration capabilities such as remoting, messaging, scheduling, and management. Attendees will leave with a clear understanding of Spring's core integration support and an appreciation for the benefits of using Spring's dependency injection, templates, and proxies. After this session, you will be fully prepared to explore Spring Integration, a new addition to the Spring portfolio, in Part 2.



Enterprise Integration with Spring, Part 2

close
Mark Fisher

By Mark Fisher

The second part of this two-part session will introduce Spring Integration, a new addition to the Spring portfolio. We will begin with a high-level overview of Enterprise Integration Patterns as catalogued in the highly influential book of the same name. We will then embark on a demo-driven exploration of Spring Integration to see how it enables the development of applications based on those patterns.

Patterns we will discuss include Message Channel, Channel Adapter, Message Endpoint, Content-Based Router, Message Translator, and more. We will also take an in-depth look at the APIs so that you will understand how to provide extensions while maintaining the separation of concerns that is essential for producing maintainable, testable code.

Prerequisite: Enterprise Integration with Spring, Part 1



Developing Web Services Quickly using GroovyWS

close
Mark Johnson

By Mark Johnson

This session will explore GroovyWS as a tool to quickly produce and or consume a web service. Web Service testing becomes much easier without the need to purchase expense testing tools using the GroovyWS framework.

In this session we will take some code examples to demonstrate the creation of a web service and its consumption using GroovyWS. Also, using GroovyWS and other utilities the session will demonstrate how to dynamically test web services.



Getting Started with BPEL

close
Mark Johnson

By Mark Johnson

With all of these web services becoming available there is an increasing need for tools to pull together multiple web services into one composite service. BPEL is an up and coming approach to orchestrating a workflow consisting of Web Service calls.

This session will go beyond the vendor specific graphical workflow design tools to introduce the BPEL language constructs. Using real BPEL code examples applied to a couple of problem domains we will introduce concepts which can get you started developing SOA Workflow applications.



Promoted to Technical Lead - Now what do I do?

close
Mark Johnson

By Mark Johnson

When you think about technical leadership positions do you empathize with Peter Pan? "..I won't grow up, (I won't grow up) I don't want to wear a tie. (I don't want to wear a tie) And a serious expression (And a serious expression) In the middle of July. (In the middle of July) And if it means I must prepare To shoulder burdens with a worried air

Fear not..Development is fun for sure...but technical leadership has many more interesting challenges to keep you learning and challenged. Technical Leadership positions are not just about telling people what do! The role also includes; sharing your technical experiences with others, learning new technologies from your team members, working with stakeholders to help ensure that the right product is developed.

During this session we will discuss many aspects of technical leadership including; "setting your team members up for success", effective communication, controlling scope, keeping your stakeholders on your side, as well how to get it "Done".



Software Development Risk Analysis techniques

close
Mark Johnson

By Mark Johnson

Once you leave academic "hello world" projects, software development is full of unknowns which result in the high rate of project failure we see too often in industry. Reasons for a project failure will vary based on the stakeholder interviewed. This session will provide a software development risk framework and examples you can apply in your projects to reduce or at least soften the impact of failure.

The Software Development Risk Analysis techniques presentation examines several tools taken from the Six Sigma world to identify and manage risks with the objective to avoid failures or at least soften the impact of failure. Because software development is a team exercise this presentation is targeted towards everyone from Software Development managers to hands on developers. During the presentation we will apply risk management techniques to several sample (and typical) software development project problem areas.



10 Principles for Software Estimation : It Does not have to be that hard!

close
Mark Johnson

By Mark Johnson

As developers we dread when management requests a project estimate. Typically, you do not have the opportunity to understand all the requirements, the team composition is unknown, and you have been given until tomorrow end of day to produce an estimate. Several months later everyone is yelling at you about the software estimation errors encountered during the project.

This presentation will cover some simple techniques for creating order of magnitude estimates. In addition, leveraging the cone of uncertainty the presentation will also cover techniques for managing management expectations.



Requirements Driven Design and Development (RDDD)

close
Mark Johnson

By Mark Johnson

Validate that requirements are not missed during the design and development process by creating Requirements document test fixtures to clarify and validate the requirements between the end users, business analysts, architects, and developers early in the project.

The requirements test fixtures are then available throughout the project to validate that the implemented product is the same as documented requirements. Using RDDD can significantly reduce software development projects project duration, improve communication between all stakeholders, improve delivered quality, and customer satisfaction.



Guerilla Unit Testing Part 1: TestNG

close
Howard Lewis Ship

By Howard Lewis Ship

Part one (of two) covers the TestNG unit testing framework, and shows how it integrates with Selenium (for integration testing).

In part one of this two part session, we'll discuss the basics of unit testing and show how to use TestNG. We'll discuss how to use the tool, organize tests, and collect results, as well as integrate with IDEs, Ant and Maven. Lastly, we'll see advanced uses of TestNG combined with Selenium to automate integration testing within a test suite.



Guerilla Unit Testing Part 2: The Weird and Wonderful EasyMock

close
Howard Lewis Ship

By Howard Lewis Ship

In part two (of two) we go in depth on EasyMock, the weird and wonderful tool for creating mock objects on the fly. We'll do a good bit of live coding as we examine how to use, tame and extend this powerful tool.

Unit testing with only gets you so far; even when you've refactored your code and hidden all your implementations behinds interfaces you are still stuck with the problem of testing the individual pieces. If you've hit this point and despaired, know that there are tools to help ... including the weird and wonderful EasyMock. We'll discuss unit testing in general, and how EasyMock is used to to generate mock objects, allowing you test each class in isolation. We'll be doing some live coding to show you step-by-step how to build up a unit test, interpret EasyMock's baffling error messages, and set yourself up for easy reuse of testing code.



Introduction to Tapestry 5

close
Howard Lewis Ship

By Howard Lewis Ship

Tapestry 5 is a complete rewrite of Tapestry from the ground up. It takes everything good about Tapestry and cranks the volume up to eleven, while removing the frustrating parts of using Tapestry. This session takes the wraps off this new and innovative technology, showing off important new features such as live class reloading (the ability to change your Java classes and continue using the application without interruption or redeployment), the simplified coding model, and the total lack of XML. This session is of interest to those already using Tapestry 4, and those new to Tapestry and ready to jump on the bandwagon.

Tapestry 5 really does take everything great about Tapestry and crank it up, all with the goal of making your job as a web developer easier. Being able to change your classes at will within a running application is just the tip of the iceberg; Tapestry 5 is designed to break down the barriers to developer productivity by simplifying every aspect of creating a web application.

Tapestry 4's base classes and abstract methods are all gone, replaced with pure POJOs and a handful of annotations. All the XML configuration of Tapestry has been removed as well. Tapestry 5 practices convention over configuration with a vengeance, introducing smart defaults and intelligent logic to let Tapestry do



Pragmatic Patterns with Tapestry 5 IoC

close
Howard Lewis Ship

By Howard Lewis Ship

Everyone likes the Gang of Four design patterns, but it's not always clear just how to make use of them in your day to day coding efforts. Hidden inside Tapestry 5 is an Inversion of Control (IoC) container that is structured around several common patterns (Chain of Command, Strategy, Decorator and Filter Chain will be covered). This isn't academic navel-gazing ... this is about leveraging the common patterns so that you can write code you can easily test, and about creating frameworks and toolkits that can be easily extended.

We'll see how Tapestry uses these patterns, and go from there into how you can apply the same techniques to your own projects, resulting in better, cleaner, more testable code.

This session also serves as an introduction to the Tapestry 5 IoC container.



Exploring the JavaServer Faces Ecosystem

close
Kito Mann

By Kito Mann

This session examines the ecosystem of products built on JavaServer Faces.

We start with a discussion of why JSF is significant and explain how it lays the foundation for a range of new products. We then look at the IDE offerings from major industry players, such as Sun, IBM, and Oracle. Next, we examine the products from smaller vendors and open source organizations, such as component suites and additional toolkits and frameworks, examining the specific features and benefits that these products provide. Finally, we look at other potential product opportunities and examine ways to get involved.

Prerequisite: Basic familiarity with web application development in Java.



Architecting JavaServer Faces Applications

close
Kito Mann

By Kito Mann

Over the past few years, a lot of time has been spent explaining what JSF is, and how different pieces of it work. However, little attention has been given to the process of architecting applications. This makes JSF architecture seem like a black art, since there are so many possible approaches to the application's architecture.

This session looks at different techniques for structuring JavaServer Faces (JSF) applications, and examines the consequences of each technique. In addition, we will examine extension points within JSF, and how they can be leveraged to provide features such as security, alternate templating technology, and access to external resources. The session ends with some additional tips and best practices.

Prerequisite: Experience with JavaServer Faces.



Simplyfing JavaServer Faces Component Development

close
Kito Mann

By Kito Mann

The benefits of using JavaServer Faces UI components to rapidly construct complex, interactive user interfaces have become quite clear over the past couple of years. However, the standard process for developing these UI components is currently quite tedious. Fortunately, there are better solutions available.

This presentation examines techniques for easing the process of developing components with techniques such as annotations, convention over configuration, and templating. We'll examine solutions based on JSP tag files, Facelets, and Apache Shale. In addition, we will discuss how JSF 2 will simplify the process.



Introduction to JBoss Seam

close
Kito Mann

By Kito Mann

JBoss Seam is a popular open-source application framework for Java Platform, Enterprise Edition (Java EE) 5.0. For web application developers, a significant benefit of Seam is that it greatly enhances JavaServer Faces technology. This session explains key Seam features such as tight integration with EJB3, Hibernate and JPA integration, conversations, RESTful web pages, and so on.

This presentation introduces Seam web features from the perspective of a developer on the JavaServer Faces platform. It uses a lot of code examples and demonstrates live applications. It also discusses RAD tools for getting a Seam JavaServer Faces technology-based project started. Developers attending this presentation will leave with a basic understanding of exactly what Seam is, what problems it solves, and how to get started.

Prerequisite: Basic understanding of Java web application development. Familiarity with Dependency Injection/Inversion of Control, JSF, and JPA/Hibernate persistence is a plus.



10 Things Every Software Architect Should Know

close
Richard Monson-Haefel

By Richard Monson-Haefel

An effective software architect understands that every application is different and requires unique choices regarding programming language, middleware, integration, data access, user interface design, etc. Richard Monson-Haefel has distilled knowledge from his own experience and from personal interviews with the World's best software architects to define 10 principles every software architect should know in order to be effective.

Developers aspiring to become software architects and experienced software architects a like will walk out of this session better prepared and more confident in their decisions as software architects.



Enterprise JavaBeans 3.0

close
Richard Monson-Haefel

By Richard Monson-Haefel

Richard Monson-Haefel, author "Enterprise JavaBeans 3.0" (O?Reilly), and a member of the EJB 2.1 and 3.0 expert groups that defined the specification, provides a no non-sense deep dive into how EJB 3.0 works, how best to develop EJB 3.0 applications, and when and where EJB 3.0 is appropriate.

EJB 3.0 seems complex and to be honest it is, but after this session you'll be able to start mastering EJB 3.0 with confidence and have a solid understanding of its strengths and weaknesses.



Understanding Open Source Licensing

close
Richard Monson-Haefel

By Richard Monson-Haefel

What does GPL, LGPL, MIT, Apache licenses, copy left, and dual licensing mean? Richard Monson-Haefel explains both the legal and technical implications of the major open source licenses in plain English. He explains when and how you can use open source in the enterprise and in the development of software products and how to protect your organization from abusing open source licensing.

You may walk into this session confused about open source licensing, but you'll walk out crystal clear on how open source licenses work and the difference among them.



Developing Rich Internet Applications

close
Richard Monson-Haefel

By Richard Monson-Haefel

With literally hundreds of RIA products (e.g., Adobe Flash, Nexaweb, Backbase) and open source Ajax projects (e.g. Dojo, GWT, Prototype) to choose from. Picking the right RIA technology for the job requires months of research. Richard Monson-Haefel has been researching and writing about RIA alternatives for two years and has already done the research so you don't have to.

This session will explain the differences between RIA alternatives and provide a framework for selecting the best product or open source project for your application. The choices for RIA technologies seem mind boggling, but after this session you'll know the market and be able to choose the right solution easily.



Credit Card Software Development: Recognizing and Repaying Technical Debt

close
Jared Richardson

By Jared Richardson

Technical debt has long been recognized in technical circles for years, but convincing your manager to budget time to repay "technical debt" has always been problematic. Let's couch the term technical debt concept in language more familiar to our managers: credit card debt.

Like credit card debt, technical debt accumulates slowly over time, and usually takes just as long to pay off. The interest slowly builds up until you're no longer able to pay off the principle: your entire development cycle is devoted to just "paying the interest". We'll examine common types of technical debt and strategies to effectively communicating the problems, and their solutions, to your managers.



10 Tips for Getting Your Project Back on Track

close
Jared Richardson

By Jared Richardson

Software projects fail over and over for many of the same reasons. We'll look at some of the more avoidable problems and some solid ways to fix them, or avoid them in the first place.

We'll talk about discovering what went wrong (and what went right!) with your last project, solving code integration issues, resolving lingering quality problems, establishing automated test suites, reining in soaring project requirements and more.



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.



Restoring Agility: Getting Your Team Back on Track

close
Jared Richardson

By Jared Richardson

An agile team is first and foremost "a team". When that gets lost in the rush to get a product out the door, the people suffer as well as the products. It's bad for the company, but even worse for the team members. We'll learn how to defuse some of the more common problems you'll run into on dysfunctional teams.

Restoring trust and providing visibility is hard once you've been burned. It's not always possible, but we'll examine concrete steps you can take to start rebuilding your trust and your team.



Techniques 2009

close
Jared Richardson

By Jared Richardson

There are a number of great techniques you can use across technologies and projects. Come hear some of my favorite ways to move "beyond" and contribute a few of your own. We'll discuss topics ranging from glue languages to ditching your IDE to building your brain.

In this session we'll discuss:

- Move beyond tools

- Glue languages

- Inbox Zero

- Learning to learn

- Not being a cog anymore

- Macro Object Orientation

- Clean code

- Looking smarter than you are

- Open source tool stacks

- Tighter feedback loops

- Scripted deployments

- Scripting databases

- Virutalization

And more...



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.