New England Software Symposium

March 9 - 11, 2007 - Boston, MA


Sheraton Ferncroft
50 Ferncroft Road
Danvers, MA   01923
Map »

NOTE: You are viewing details about a past event. We will be back in BostonSeptember 13 - 15, 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 - March 9


  North Shore B&C North Shore A Newburyport Gloucester Ipswich
12:00 - 1:00 PM REGISTRATION
1:00 - 1:15 PM WELCOME
1:15 - 2:45 PM

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

Venkat Subramaniam
2:45 - 3:15 PM BREAK
3:15 - 4:45 PM

Annotation Hammer

Venkat Subramaniam
4:45 - 5:00 PM BREAK
5:00 - 6:30 PM

Project jMaki - Enabling Web 2.0 Application Developers

Greg Murray

Regular Expressions in Java

Neal Ford

The Enterprise Service Bus: Do We Really Need It?

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

Saturday - March 10


  North Shore B&C North Shore A Newburyport Gloucester Ipswich
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM

Java Performance Myths

Brian Goetz

Spring 2.0: New and Noteworthy

Mark Fisher

Debugging and Testing the Web Tier

Neal Ford

Distributed Teams: Remote Agility

Jared Richardson
10:30 - 11:00 AM BREAK
11:00 - 12:30 PM

Build Teams, Not Products

Jared Richardson
12:30 - 1:30 PM LUNCH
1:30 - 3:00 PM

Structuring concurrent applications in JDK 5.0

Brian Goetz

Continuous Integration with Cruise Control

Jared Richardson
3:00 - 3:15 PM BREAK
3:15 - 4:45 PM

Productive Programmer: Automation and Canonicality

Neal Ford

Spring MVC Essentials

Mark Fisher

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

Ted Neward
4:45 - 5:30 PM BIRDS OF A FEATHER SESSIONS

Sunday - March 11


  North Shore B&C North Shore A Newburyport Gloucester Ipswich
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM

Intro to Java Persistence API (JPA)

Mark Richards

Squashing bugs with FindBugs

Brian Goetz
10:30 - 11:00 AM BREAK
11:00 - 12:30 PM

The Busy Java Developer's Guide to ClassLoaders

Ted Neward

Drooling with Groovy and Rules

Venkat Subramaniam
12:30 - 1:15 PM LUNCH
1:15 - 2:15 PM BIRDS OF A FEATHER SESSIONS
2:15 - 3:45 PM

The Busy Java Developer's Guide to Java Platform Security

Ted Neward

EJB3 Core Specification (JSR-220)

Mark Richards

AJAX Performance and Scalability

Ron Bodkin

Continuous Integration

Paul Duvall
3:45 - 4:00 PM BREAK
4:00 - 5:30 PM

The Busy Java Developer's Guide to Debugging

Ted Neward

Java Persistence: Approaching the Silver Bullet

Mark Richards

Glassbox: Open Source Monitoring and Troubleshooting

Ron Bodkin

Spring 2.0: New and Noteworthy

close
Mark Fisher

By Mark Fisher

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.



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, we will walk through a sample application that demonstrates Spring Security's core features.



Spring MVC Essentials

close
Mark Fisher

By Mark Fisher

Spring MVC is a powerful and flexible framework for building web applications. Its interface-based API promotes loose coupling, yet it also offers many convenient base classes for common functionality. Whether you use the base classes or roll your own, you will discover numerous strategies and extension points. This flexibility will be greatly appreciated once you are up to speed, but newcomers often wonder where to begin.

This session will introduce the core components in a breadth-first fashion focusing on the essentials. We will then build a simple Spring MVC-based webapp from scratch including implementation, testing, configuration, and deployment. Along the way you will see how to bootstrap a Spring-managed service layer, configure request handlers, render views, provide some validation logic, and even configure data-binding for a file-upload. We will round off the discussion with some best-practice guidelines and a quick "what next?" overview of some of the most important extension points.



Message Driven POJOs with Spring

close
Mark Fisher

By Mark Fisher

Spring 2.0 introduced support for Message-Driven POJOs meaning that it is now possible to receive JMS messages asynchronously and delegate the handling of those messages to simple objects even within a lightweight application running outside of any application server. If your POJO has a return value, it will automatically be sent to a response destination.

After a quick overview of Spring's JMS support, we will build a Message-Driven POJO sample application from the ground up. This will include sending a Message as a request and receiving a reply across separate JVMs. You will learn how to configure the Message-Driven POJO without writing a single line of messaging code. You will also learn how to configure the pool of concurrent consumers and integrate with Spring's transaction management. We will use the JMS namespace available as of Spring 2.5, and we will even explore the possibility of delegating to a Groovy-scripted object.



The Role of Spring in an ESB

close
Mark Fisher

By Mark Fisher

An Enterprise Service Bus (ESB) brings flow-related functionality such as message routing and transformation to a Service-Oriented Architecture. An ESB also provides a layer of abstraction with endpoints for various protocols and transports. These features promote decoupling of integration logic from business functions, flexibility in the transport layer, and pluggability of POJO services.

While ESB is a vast topic, this session will offer a glimpse of a few technologies (scheduling, messaging, and remoting) within the context of an ESB. The content will be heavily example-based with a good deal of code and configuration. The emphasis will be on Spring's enabling role for implementing POJO-based solutions that achieve flexibility in the face of the constantly changing requirements of enterprise integration.



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



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



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



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



    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>
    


    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 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 Busy Java Developer's Guide to Java Platform Security

    close
    Ted Neward

    By Ted Neward

    Permissions, policy, SecurityExceptions, oh my! The Java platform is a rich and powerful platform, complete with a rich and powerful security mechanism, but sometimes understanding it and how it works can be daunting and intimidating, and leave developers with the basic impression that it's mysterious and dark and incomprehensible. Nothing could be further from the truth, and in this presentation, we'll take a pragmatic, code-first look at the Java security platform, including Permissions, the SecurityManager and its successor, AccessController, the Policy class and policy file syntax, JAAS, and more.

    For an intermediate-level audience.



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



    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.



    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



    Groovy for Java Programmers

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Object-oriented scripting languages, or agile dynamic languages, as some like to call those, are gaining programmers' attention. Groovy bring this excitement to the Java platform with its ability to generate byte code. You can use Groovy instead of Java for some parts of your application. By learning it, you can switch between the languages where you consider fit.

    In this session we will learn what Groovy is. We will take an example driven approach to look at interesting features. We will see how a piece of code you would write in Java can be written, elegantly, using Groovy. In addition to the current features, we will also discuss the state of the language and tools.



    Agile Web Development with Grails

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Agile development is all about developing code and seeking feedback from your users to make sure you're developing what's relevant. When they suggest changes, those must be affordable and reliable. Grails, along with its facility to develop test driven, is a killer combination for rapidly developing web applications. In this ZePo (Zero PowerPoint) presentation, we will take a test driven approach to developing a small but fully functional web application in Grails. We will cover the fundamental features of Grails along with utilizing other capabilities like Ajax. At the end of this presentation, you not only be confident, but eager to roll your own web application using Grails.

    In this session you will learn * How to create web application using Grails * Take a Test Driven Approach to developing the application * Understand Grails Conventions * Learn how to use the code generators and how to manually create domain models, controllers, and view * AJAX your application * Integrate with database



    Spring into Groovy

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    What do you get when you mix an agile, object-oriented, dynamic language with a lightweight, flexible, and extensible framework? You get a Groovier Spring. Spring allows you to develop using Groovy as much as Java. Groovy brings some neat concepts to the Java Platform that is hard to realize directly through the Java language. Using these capabilities can lead to elegant and easier Spring development.

    In this presentation we will cover topics including: Strengths of Groovy Using Groovy in Spring Configuration Bean Development Deployment How it fits in



    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.



    Using Aspects to Work with Annotations

    close
    Ron Bodkin

    By Ron Bodkin

    In this session, you will learn how to use Aspect-Oriented Programming (AOP) as a tool to avoid annotation hell by working effectively with Java 5 annotations (such as @Remote ). You will see simple and more advanced techniques to process custom annotations in a higher-level Java-like language, and how this compares to lower-level approaches like the Java Annotation Processing Tool. You will also see techniques for simplifying annotations, by providing application-specific default values and by deriving standard annotations used by frameworks like EJB 3, JAX-WS, and the Spring Framework from higher-level domain-specific annotations using AOP.

    The session includes a short refresher on AspectJ, Spring AOP, and JBoss AOP and what AOP does more generally as an introduction to how it is useful when working with annotations, even with Java 1.4. It also concludes with an analysis of where and how you can use annotations with and without AOP.



    Effective AOP

    close
    Ron Bodkin

    By Ron Bodkin

    Aspect-Oriented Programming (AOP) allows better application architectures by centralizing scattered and tangled code for prolems like security, error handling, testing, policy enforcement and feature variations across a product line. The recent releases of Spring 2.0 and AspectJ 5 illustrate the maturing options for Java projects.

    This session looks at how you can improve your development process and technology with aspects. You will learn the concepts of aspect-orientation, how it applies to enterprise systems, how to design with aspects, the architectural options for working with aspects, and strategies for effective team adoption. In this talk, I illustrate the concepts with practical examples of using AspectJ and Spring AOP to handle metering, feature variations, security, error handling and testing. Both Spring and AspectJ are freely available and open source.



    AJAX Performance and Scalability

    close
    Ron Bodkin

    By Ron Bodkin

    You know AJAX can improve Web application usability, but only if designed properly. How do you deploy and manage responsive rich client networked applications that scale? If you are using services from multiple sources, how can you identify bottlenecks?

    In this session, we look at the architectural changes implied by AJAX and other networked rich clients, with an overview of the major technologies and how they impact applications. You will learn about the key performance, scalability and reliability challenges as well as how to avoid them. We then review how noninvasive monitoring and JMX management data can be integrated to better understand and quickly resolve production problems. You will learn how to integrate low overhead effective monitoring without needing to "bake in" instrumentation up front. You will also learn how to troubleshoot problems in Java-based applications quickly, with illustrations of how these apply to common issues in AJAX applications.



    Glassbox: Open Source Monitoring and Troubleshooting

    close
    Ron Bodkin

    By Ron Bodkin

    In this session, you will learn how the Glassbox open source troubleshooting and monitoring agent supports low overhead monitoring and troubleshooting without needing to "bake in" instrumentation up front. Glassbox provides an easy to use AJAX interface, an automated installer, and concise summaries of common problems such as database failures, and slow operations caused by thread contention and excessive distributed calls. Glassbox also supports customization and detailed analysis for deeper investigation.

    Under the covers, Glassbox uses JMX and aspect-oriented programming to discover applications, track performance, and automatically diagnose common problems in Java applications. You will see how Glassbox can be extended easily with XML, AspectJ, and Spring AOP, providing a useful foundation for customized application monitoring. See also http://www.glassbox.com/ for more information.

    You will learn: Common failure scenarios for Java applications, Techniques to quickly diagnose problems, How to build custom Glassbox monitors to gather new data, How to plug in new operations and analysis concepts with Glassbox, How to use Glassbox to plug into existing systems monitoring infrastructures, A foundation to effectively incorporate Glassbox into solutions.



    Atom: From Blogging to Data Syndication

    close
    Scott Davis

    By Scott Davis

    You've probably read a blog or two, but have you ever looked at the underlying protocol that makes the blogosphere work? RSS kick-started the phenomenon, but Atom is the IETF specification that codifies it. Atom as a blogging dialect is interesting, but Atom as a data syndication format is something that is on the rise. Google recently deprecated its SOAP API and is aggressively moving towards Atom as its preferred way to interact with its services.

    In this talk we'll look at the fundamentals of Atom. We'll use the Java-based Rome library to create and consume Atom feeds. We'll look at how Atom allows you to programmatically interact with your Google Calendar. This isn't your grandfather's web services, that's for sure.



    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.



    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.



    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.



    Ajax development with the Yahoo! UI Library and Grails

    close
    Scott Davis

    By Scott Davis

    Yahoo! is a company that eats its own dog food. They open sourced the Ajax code that drives many of their own websites, including their eponymous homepage, Yahoo! Mail, and Yahoo! News. Come see first hand how the various pieces of the library work together as a seamless whole.

    We'll look at some of the everyday useful widgets like the onscreen JavaScript logger (which effectively brings Log4J-style logging to JavaScript) and the calendar components. We'll see how event handling is managed in a cross-brower fashion. We'll look at tabbed interfaces, multi-level menus, and panels and dialog boxes that end up making your website look more like a OS-level desktop than a traditional webpage.

    The YUI library is included with the Grails web framework. It certainly works in all of the major frameworks as well, but the easy bootstrapping of Grails combined with the power of YUI library makes for the quickest way to get started with a minimum of hassle. No previous Groovy or Grails experience is required, so come to learn a little about all of these. Any experience JEE developer will feel right at home since Grails uses Spring and Hibernate under the covers.



    Continuous Integration

    close
    Paul Duvall

    By Paul Duvall

    Increase feedback on your project by building your software with every change applied to your source code repository. The practice of Continuous Integration (CI) can be used to decrease the time between when a defect is introduced and when it is fixed.

    You will learn how to get the CruiseControl CI server and a source code management repository to work together in a CI system. From a working reference implementation in Java, you will learn the attributes that make up an effective development platform for CI. Learn how to use the CI system as the centerpiece to your software development activities to create automated code reviews, generate diagrams and documentation, and detect anomalies on a continual basis. Paul will use CruiseControl, Subversion, Ant, JUnit, and other tools that can help you implement a powerful CI system.



    Improving Code Quality Using Maven 2

    close
    Paul Duvall

    By Paul Duvall

    Learn how to use Maven 2 while using plugins that help analyze your code using measures such as cyclomatic complexity, code duplication, code coverage, coding standards and dependency analysis

    You'll learn how to use Maven 2 plugins to improve your code quality while building your software. Learn how to use and analyze the results of JDepend, CheckStyle, Cobertura, JavaNCSS and CPD to improve architectural dependencies, coding standards, code coverage, code complexity and code duplication.

    Live demonstrations using an example web application will be used to illustrate each of the measures and their application into the build and development processes.



    Java Performance Myths

    close
    Brian Goetz

    By Brian Goetz

    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.



    The Java Memory Model

    close
    Brian Goetz

    By Brian Goetz

    What's the worst thing that can happen when you fail to synchronize in a concurrent Java program? Its probably worse than you think -- modern shared-memory processors can do some pretty weird things when left to their own devices.

    Java was the first mainstream programming language to incorporate a formal, cross-platform memory model, which is what enabled the development of write-once, run-anywhere concurrent classes. It is the Java Memory model that defines the semantics of synchronized, volatile, and final.

    However, because the most commonly used processors (Intel and Sparc) offer stronger memory models than is required by the JMM, many developers frequently use synchronization and volatile incorrectly, but have been insulated from failure by the stronger memory guarantees offered by the processor architecture they happen to be deploying on. (The infamous "double checked locking" idiom is an example of this sort of error.)

    Understanding the Java Memory model is key to using the core concurrency primitives (synchronized and volatile) to develop thread-safe, efficient concurrent classes. We?ll cover what a memory model is (and why we should care), what synchronization really means, and what can really go wrong when we fail to synchronized correctly.



    Structuring concurrent applications in JDK 5.0

    close
    Brian Goetz

    By Brian Goetz

    JDK 5.0 is a huge step forward in developing concurrent Java classes and applications, providing a rich set of high-level concurrency building blocks.

    Prior to the release of JDK 5.0, the Java platform provided basic primitives for writing concurrent programs, but they were just that -- primitive -- and difficult to use properly. Building multithreaded applications on the Java platform's low-level concurrency primitives posed many traps for the unwary, and many developers were forced to reinvent the wheel by writing their own classes for thread pools, semaphores, and task schedulers.

    To help users create robust, scalable, and (most importantly) correct multithreaded applications, JDK 5.0 includes a rich set of high-level concurrency constructs, such as thread pools, semaphores, mutexes, barriers, and high-performance concurrent collection classes. Using these concurrency utilities will, in most cases, make your programs clearer, shorter, faster, easier to write, and more reliable. This session provides you with an overview of the new high-level concurrency utilities in the new java.util.concurrent package in JDK 5.0.



    Effective Concurrent Java

    close
    Brian Goetz

    By Brian Goetz

    The Java programming language has turned a generation of applications programmers into concurrent programmers through its direct support of multithreading. However, the Java concurrency primitives are just that: primitive. From them you can build many concurrency utilities, but doing so takes great care as concurrent programming poses many traps for the unwary.

    Based on the principles in the best-selling Java Concurrency in Practice, this talk focuses on design techniques that help you create correct and maintainable concurrent code.

    Presented in the style of Effective Java, this talk offers bite-sized items for effectively writing concurrent code, divided into three categories: writing thread-safe code, structuring concurrent applications, and improving scalability.

    Writing thread-safe code: - Encapsulate your data - Encapsulate any needed synchronization - Document thread-safety intent and implementation - Prefer immutable objects - Exploit effective immutability

    Rules for structuring concurrent applications - Think tasks, not threads - Build resource-management into your architecture - Decouple identification of work from execution

    Rules for improving scalability - Find and eliminate serialization



    Squashing bugs with FindBugs

    close
    Brian Goetz

    By Brian Goetz

    Does your program have bugs, despite unit tests, integration tests, and code reviews? You bet. Are you using static analysis as part of your QA process? If not, you're probably missing out on some bugs that can be caught before they bite your customers.

    The cost of finding a bug increases dramatically the longer it lurks without being discovered. Fortunately, today?s development tools (IDEs and compilers) can identify many potential bugs within a few seconds of their creation, resulting in higher quality code and more productive programmers. However, even the best programmers can create bugs that are very hard to spot if they make it through their first few minutes of their existence.

    Until recently, automated code analyzers have not been very useful for mainstream developers. Most code analysis packages focused either on stylistic issues (such as indenting and variable naming), or on formal correctness proofs (which require an investment in specification that few developers can afford to make.)

    FindBugs, an open-source tool developed by Bill Pugh and David Hovermeyer of the University of Maryland, has raised the bar for ease-of-use and effectiveness of automated code analysis for finding bugs. FindBugs has been able to find many serious bugs in production software, including Eclipse, JBoss, Apache Tomcat and Sun's JDK implementation, with an impressively low false-positive rate compared to other approaches.

    This session will explore how static code auditing tools work, how it is easy to write bug-detector plugins to find new bug patterns, presents some common bug patterns and fun "find the bug" puzzles, and shows how code auditing tools can easily identify them.

    Every developer will want to have these tools in their toolbox.



    Enterprise JavaScript

    close
    Greg Murray

    By Greg Murray

    The popularity of Ajax has given us many JavaScript toolkits over the past few years, each of which have their strengths and weaknesses. This talk will include a discussion of some of the more popular of these, such as Dojo, JQuery, Protoype, Spry, Script.aculo.us, and the Yahoo User Interface (YUI) library. In addition, the presentation will also discuss what you need to know about JavaScript to develop enterprise-grade applications, including topics such as emulating namespaces in JavaScript, object creation and inheritance using prototypes, associative arrays, closures, internationalization, and Ajax interaction techniques.

    This talk will include a discussion of various JavaScript toolkits available today which include Dojo, JQuery, Protoype, Spry, Script.aculo.us, and the Yahoo User Interface (YUI) library.



    Enterprise Ajax with Java

    close
    Greg Murray

    By Greg Murray

    Ajax and Java are the perfect combination for creating Web 2.0 applications. This session will many of the key issues that Java developers may experience when developing Ajax clients and services. Topics that we will cover various topics related to creating services for JavaScript centric clients including security, debugging, and working with JavaScript Object Notation (JSON). This session will conclude with a discussion of both Java-centric and JavaScript-centric approaches (i.e, light client-side logic versus heavy client-side logic) along with the tradeoffs to consider with both of these approaches.

    This session will conclude with a discussion of the Java and JavaScript centric along with the tradeoffs and benefits each approach.



    Project jMaki - Enabling Web 2.0 Application Developers

    close
    Greg Murray

    By Greg Murray

    Creating a breathtaking user interface requires that you and your team are skilled in JavaScript, Cascading Style Sheets (CSS), and Ajax interactions. This session will discuss how you can use Project jMaki (or just the ideas behind it) to create JavaScript-centric user interfaces that are developer and designer friendly. Project jMaki is an open-source client/server framework hosted on java.net that is focused on creating JavaScript-centric web applications. jMaki promotes a clean separation of JavaScript, CSS, and template code following the web design approach widely known as ?unobtrusive JavaScript?. This session will include a technical discussion of the architecture and features of jMaki including JavaScript toolkit interoperability, widget design, using layouts, wiring JavaScript functionality together, and service/data integration.

    This session will include a technical discussion of the architecture and features including JavaScript toolkit interoperability, widget design, using layouts, wiring JavaScript functionality together, and service/data integration . This session will focus creating JavaScript functionality that is both re-usable and designer friendly.



    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.



    Distributed Teams: Remote Agility

    close
    Jared Richardson

    By Jared Richardson

    How do you keep a team scattered across time zones in sync?

    It's difficult to keep a local team coordinated. When we add geographical distance to the equation, problems are immediately magnified. We'll talk about techniques that you can use to be sure everyone is sharing information and on the same page whether they're in the same office or in different time zones.



    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.