Gateway Software Symposium

March 16 - 18, 2007



Event Details

Location

St. Louis Marriott West
660 Maryville Centre Drive
St. Louis, MO 63141
View Map

NOTE: You are viewing details about a past event. We will be back in St. Louis March 16 - 18, 2007. You may view the event details here ».

Session Schedule

About the Session Schedule
Download Agenda PDF We are committed to hype-free technical training for software architects, programmers, developers, and technical managers. This year's symposium places increased emphasis on the role of XML, J2EE, Web Services, Agile Methodologies, and Open Source. We offer over 50 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 16


  1 2 3 4 5 6
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: No, I Won't Tell You Which Web Framework to Use: or The Truth (with Jokes) by Scott Davis

Saturday - March 17


  1 2 3 4 5 6
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 - 3:00 PM
3:00 - 3:15 PM BREAK
3:15 - 4:45 PM
4:45 - 5:30 PM BIRDS OF A FEATHER SESSIONS

Java NIO

close

Brian Pontarelli By Brian Pontarelli
The Java NIO packages that were added in JDK 1.4 and these packages allow Java applications to perform true non-blocking IO operations. This presentation will cover the basics of the standard IO packages, which date back to the beginning of Java, and some of the shortcomings they have. This will be followed by coverage of the newer NIO packages and how they address these issues.

The NIO packages aren't simple to use and have a few dangerous pitfalls that many encounter when they first start using NIO. These pitfalls will be covered as well as solutions to each.

Bullet Proof Builds

close

Brian Pontarelli By Brian Pontarelli
Learn how to create software builds that will stand the test of time and make the world a better place - okay perhaps just your development environment a better place. Builds are usually the tedious work that we all leave to the last minute or sometimes throw together as we build an application. But in most applications, builds contain complex logic and many dependencies, just as the application does. This presentation covers how to make a manageable and enjoyable build system using Apache Ant and a new Ant framework that is part of the JCatapult platform called JCatapult-Ant.

Most companies use the Apache Ant build system either for technical or political reasons. Many developers often wish they could use Maven 1 or 2 because of the plugin structure, dependency management and standardization it provides to applications. Ant sometimes gets a bad rap because it isn't the most simple tool to extend and build files often become large and unmanageable. Plus, Ant extensions are not simple to test and Ant lacks any concept of versioning. Even with all these problems, Ant can still be a great build environment and when used correctly can make creating builds a pleasure.

This presentation covers these topics:

- JCatapult's Ant framework
- Setting up a project
- Adding plugins
- Ant plugins - the what, how and why
- Plugin versioning
- Writing a new plugin
- Using Groovy inside plugins

If you are using Ant for your builds, but want a better solution that includes reusable plugins, dependency management and much more, this presentation will show you how to use JCatapult-Ant to accomplish just that. However, if you aren't able to use JCatapult-Ant, but still want to understand how to create better builds using Apache Ant, this presentation will show you the methodology behind JCatapult-Ant's plugins and allow you to create your own custom plugin system.

Attendees must have a good working knowledge of the Ant build system in order to understand the material in this talk. No other knowledge is required.

SOA Topologies

close

Brian Pontarelli By Brian Pontarelli
This talk will cover many of the different types of SOA topologies from EJBs and WebServices all the way to message queues and tuple spaces. SOA has many different meanings but it never dictates a single implementation and this talk covers many of the most common implementations of a service oriented architecture.

During the course of this talk we'll cover EJBs, JMS and general message queues, Jini, JavaSpaces, WebServices and ESBs. We'll discuss the pros and cons of each topology and what makes each a better or worse solution for various problems. We'll also cover the fundamentals of network computing and why it is important to understand that SOA is distributed and the impact distribution has on the selection and implementation of the topology of an application.

Attendees should walk away with a more broad understanding of SOA and the numerous ways of implementing this architecture. They should also understand how to go about selecting the correct topology or mix of topologies to meet the needs of their applications.

Give it a REST

close

Brian Sletten By Brian Sletten
As developers, we sometimes get to make choices about the technologies we use, sometimes not. We base these decisions on personal experiences, recommendations from others and a general sense of where the industry is going.

Web Services have been all the rage for several years now. We have been told time and again that we should be building systems around them; as an industry, we've never been more confused. Perhaps it is time to Give it a REST.

Part of the problem with the conventional Web Services technology stack is that it is more complex than it needs to be for small to medium-sized systems. All of the examples show how simple it all is, but how often do we really need to check the temperature or get a stock quotation? Real systems that are built out of these technologies are rapidly spiraling toward incomprehensibility, unmaintainability and (shocker) insecurity!

SOAP has a place, but so does REST, a simpler architectural style for invoking services in a language- and platform- independent way. This talk will motivate REST, explain how it fits in to other Enterprise and Web technologies and help give you some ammo for suggesting that your organization give it a REST too.

We will look at getting started with the Restlet API, using conventional containers and advanced environments like NetKernel to build scalable REST-oriented systems.

This talk should be accessible to everyone but is probably intermediate level.

Resource-Oriented Computing w/ NetKernel : Software for the 21st Century

close

Brian Sletten By Brian Sletten
Imagine the simplicity of REST married to the power of Unix pipes with the benefits of a loosely-coupled, logically-layered architecture. If that is hard to imagine, it may because the architectures available to you today are convoluted accretions of mismatched technologies, languages, abstractions and data models.

NetKernel is a disruptive technology that changes the game. It has been quietly gaining mind share in the past several years; people who are exposed to it don't want to go back to the tired and blue conventions of J2EE and .NET. Not only does it make building the kinds of systems you are building today easier, it does it more efficiently, with less code and a far more scalable runway to allow you to take advantage of the emerging multi-core, multi-CPU hardware that is coming our way.

Come see how this open source / commercial product can change the way you think about building software.

NetKernel makes the things you are doing now easier, but also makes new types of systems possible.

A wise man once said, "XML is like lye. It is very useful, but humans shouldn't touch it." If you've had to incorporate XML into your project by hand, you have probably been burned by getting too close. NetKernel turns this wisdom on its head and encourages you to use XML like the liquid data stream you want it to be.

But, XML is only part of the story. Resource-oriented computing is a generalized and revolutionary approach to modern, flexible systems. There is less code to write, but it is more fun to do. Orchestration of existing services and data sources is faster, easier and more encompassing than with more conventional technologies.

This talk will help explain what NetKernel is (app server? pipeline tool? embedded SOA?) and, through a comprehensive set of examples, give you a glimpse at a deeper software reality than you might have thought possible.

Disclaimer: There will be no blue pills given to you to make you forget what you have seen. Come with an open mind.

Abusing Maven For Fun and Profit : (Near) Zero-Admin Deployments

close

Brian Sletten By Brian Sletten
Ok, I can't promise you profit, but hopefully you'll have fun. Maven 2 introduces a number of new features (including that performance feature) that make it a swell project management tool for development.

Come hear about how we can abuse Maven to manage distributed deployment scenarios before the Modules JSR is done.

This talk will introduce Maven 2 and what it has to offer as a team-oriented development and project management tool. Then we will take a strange turn and discuss how the MavenEmbedder API can be used as a lightweight, low-admin deployment mechanism for self-updating, distributed Java installations.

This is a very example-driven talk. We'll look at lots of code but you'll be able to walk away with a fresh take on how to roll out a new versions of entire applications, bug fixes, security patches or new features with very little effort.

Applied AOP

close

Brian Sletten By Brian Sletten
Most people new to Aspect-Oriented Programming (AOP) are fed up with separation of concerns zealots explaining how great their techniques are at dealing with... logging. Ok, you get it. Logging is a cross-cutting concern that can be appropriately modularized. What else does AOP have to offer? A lot, it turns out. This talk will give an introduction to the motivations of AOP as well as a series of concrete examples drawn from enterprise and client side Java. Come learn how AspectJ-flavored AOP can begin to benefit you immediately either in development or production environments. Learn how to enforce architectural policies, find Swing threading issues, reduce the invasiveness of the Observer design pattern or even improve the reusability of your domain models. Now that Spring 2.0 provides support for AspectJ, the time has never been better to learn about these new (but backwards compatible) ways of thinking about building software.

Attendees will learn about
The history and reasons behind AOP
Development-oriented aspects that can be useful, but compiled out of
production code
Production-oriented aspects that can simplify development and ease the
burden of future changes
Basic AspectJ usage and jargon
How to use AspectJ with Spring

Rating: Intermediate
Category: Architecture/Languages, Client Side Java, Server Side Java
Prerequisites: Basic Java. Some level of AOP understanding is helpful, but not required. The pace of the introduction will depend on the average level of exposure the audience has previously had to AOP.

JavaServer Faces: A Whirlwind Tour

close

David Geary By David Geary
In April 2005, annual growth rates for jobs in JavaServer Faces, Struts, and Ruby on Rails were all at about 0%. Today, Struts' growth rate still hovers around 0%, but JSF and Rails have taken off. At the end of 2007, both JSF and Rails were growing at a rate of between 400-500% annually (according to indeed.com).

JSF has passed the adoption tipping point, and is now the Java-based framework of choice, as is evidenced by its ecosystem. From vendors such as MyEclipse and RedHat to open source projects such as Seam, Facelets, and Ajax4JSF, JSF is where the action is.

Come see why JSF is so popular. In this code- and demo-intensive session, I'll show you the fundamentals of JSF.

This session is taught by a member of the JSF Expert Group for JSF 1.0 and 2.0., and co-author of the best-selling book on JSF: Core JavaServer Faces. David will take you through a whirlwind introduction to JSF including what JSF is, how it was developed, and how you can best take advantage of the technology. Here is a list of topics:

Components, managed beans, value expressions, and static navigation
i18n, CSS, and actions
The Faces Context and Faces messages
The JSF Event Model
Using JavaScript with JSF

This introduction to JSF also contains 5 live-code demos, where David will develop a simple, but robust application during the course of the session.

Prerequisite: Some knowledge of Java-based web applications, such as Struts, is a plus, but is not required. If you have a significant experience with JSF, you probably already know most of what's covered in this session.


Killer JavaScript Frameworks: Prototype, Scriptaculous, and Rico

close

David Geary By David Geary
An introduction to the popular Prototype JavaScript framework, and two frameworks built on top of Prototype: Scriptaculous and Rico.

Web2.0 is all about rich, interactive user interfaces (UIs), and these three frameworks provide the capabilities that you need to develop those UIs.

Prototype (prototype.conio.net) is a low-level JavaScript framework that adds significant features to JavaScript that make it easier for you to use the language and to incorporate Ajax calls in your applications.

Scriptaculous is a framework (script.aculo.us) built on top of Prototype that adds some pizazz to Prototype with features such as a wide array of special effects, animation, and drag and drop.

Rico is another framework (openrico.org) built on top of Prototype that, among other things, provides something known as behaviours, where you adorn plain-vanilla HTML with seemingly magical behaviours.

Come to this session and learn how to harness the power of these three frameworks.

Ajaxian Faces

close

David Geary By David Geary
JavaServer Faces is a perfect platform for implementing Web 2.0 interfaces with Ajax. This session explores how you can use these two potent technologies--JSF and Ajax--together to create applications that look and behave like desktop applications but run in the browser.

JavaServer Faces, with a mature component model and flexible lifecyle, is a perfect platform for implementing Web 2.0 user interfaces with Ajax. This session explores using JSF and Ajax to create applications that act like desktop applications but run in a browser.

We'll start with a quick look at implementing basic Ajax in a JSF application. Then, once your bloodthirst has been slaked, we'll dive deeper into Ajaxian Faces dynamics with a form completion demo that requires its implementor to understand two simple, but vital facts about JSF.

If you're savvy, you probably use client-side validation to augment your server side validation logic, which parenthetically, is no no-brainer in either of the leading web application frameworks, JSF or Rails. But anyway, client-side validation is old school. All the cool developers nowadays use Ajax to implement realtime validation, where you sneak a trip to the server as an unwary user types into your input fields. But to accomplish that, we'll have to dive even deeper into JSF, with concerns such as accessing view state and accounting for client-side state saving.

All of this Ajax development is great fun, but most of it is best relegated to components and frameworks, which are the topics that will wrap up our session. We'll see how to keep your JavaScript separate from your JSF components and how to pass JSP tag attributes all the way through to JavaScript. Finally, we'll take a look at Ajax4jsf, a JSF component library with a tag library that blends Ajax into JSF in a natural, intuitive way without having to write JavaScript.

As web developers, we've been handcuffed long enough by the shackles of Web 1.0 development. Come to this session and see the brave new world of Web 2.0 development with one of the hottest web application frameworks.

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

close

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

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

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

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

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

close

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

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

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

The Google Web Toolkit, Part One

close

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

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

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

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

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

The Google Web Toolkit, Part Two

close

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

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

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.

Shippers Unite!

close

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

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

Build Teams, Not Products

close

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

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

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.

New Features in Java 5

close

Jason Hunter By Jason Hunter
The new Java 5 release introduces a number of significant Java language enhancements: generics, typesafe enums, autoboxing, an enhanced "for" loop, a static import facility, and a general-purpose metadata facility. This talk gives an overview of the changes and helps you understand what all the funny new syntax means.

The main new language topics covered:

* Generics, also called "parameterized types", which let you specify the type of objects used in a collection, among many other things.

* Autoboxing, that lets you implicitly convert from primitives to reference types, and vice-versa.

* An Enhanced For Loop, that lets you iterate over arrays or collections with half the code as before.

* Typesafe Enums, to create object-oriented, extensible enumerated values.

* Static Imports, to put into scope static methods and fields.

* Varargs, that allows methods to accept an arbitrary number of parameters.

* A Metadata Facility, allowing decoration to classes and methods for later tool consumption. Covered in more depth in the "Java Metadata" talk.

* Random new Library Features, like the ability to control external process launching, output formatting, and input scanning.

This talk describes the proposed changes and shows how they work together to improve the Java language. We also take breaks to see how closely Java matches the C# designs!

Attendees are assumed to be competent Java programmers.

XQuery By Example: Building an Email Archive System

close

Jason Hunter By Jason Hunter
The classic searchable email archive system is cluged together -- a frankenstein monster combining a relational database with a search engine, with Java just barely able to keep the two together. In this talk we'll demonstrate how email is more content than data, how it's better encoded in XML rather than relational tables, and how Java can convert emails to XML and drive an XQuery backend to produce a simpler and more scalable email archive system.

Attendees should be familiar with XML and have an interest in text search and back-end architecture design.

What's New in Java 6

close

Jason Hunter By Jason Hunter
The Java 6 (Mustang) release should make your life easier, for a change. It doesn't alter the core language like Java 5 did. It doesn't pack in so many sub-JSRs that you'll be overwhelmed by the amount you have to learn. Instead Java 6 adds several handy things that honestly should have been added before. Among the improvements we'll cover in this fast-paced class:

* A new Console class
* A real Compiler API
* A GIF writer
* Pluggable Locale data
* Access to disk partition size data
* Array reallocation
* Low-level floating point functions
* Reflective access to parameter names
* Access to network interface details
* Pluggable annotation processing
* Improved class file format
* Streaming XML with StAX
* A new Scripting interface


With Sun developing Java 6 in public, you can not only learn about these changes but provide feedback as well.

Web Publishing 2.0

close

Jason Hunter By Jason Hunter
If we're moving toward Web 2.0, what does that mean for online publishing? In this talk I'll answer that question. Based on my experience as Principal Technologist at Mark Logic working with dozens of the largest online publishers, I'll present a vision for how the Web 2.0 concepts like personalization, collective intelligence, the long tail, and the importance of "owning the data" can and should reshape the face of online publishing -- and how XML, XQuery, and XML-aware text search act as the key enablers. I'll also introduce new Web Publishing 2.0 concepts like "Sweat the content" and "Give answers not links".

(Not content to be a windbag, I'll use practical examples and demos to help get the points across.)

Forgotten Web Algorithms

close

Jason Hunter By Jason Hunter
In this talk I'll explain -- without any needless math or boring proofs -- several fun algorithms of interest to back-end web programmers. Each algorithm was selected because it's really practical, really interesting, or both. The algorithms aren't always the same but can include: public key cryptography, credit card checksum validation, TCP Slow Start, two's complement, priority queues, the XOR swap, and the Google MapReduce function for massively distributed calculation.

Attendees need only come with a curiosity about the algorithms that go into the programs we use every day.

Introduction To Agile Web Development With Grails

close

Jeff Brown By Jeff Brown
Grails brings the powerful "coding by convention" paradigm to Groovy and Java. Grails is not just another flavor in the pool of web development frameworks for Java. Grails leverages the powerful dynamic features of Groovy while taking advantage of best of breed technologies like Hibernate, Spring, Sitemesh and Quartz to make web application development both fun and easy.

This session will demonstrate how easy it is to get a simple application up and running with almost no effort and then evolve that application by adding features to really show off the power of the Grails
framework. Topics include:

- Grails Quick Start
- The Grails Command Line Tools
- GORM and Hibernate
- Groovy Server Pages (GSP)
- Spring Integration
- Unit Testing
- Functional Testing

Advanced Techniques With Grails

close

Jeff Brown By Jeff Brown
Grails represents technology that offers great flexibility and power without the complexity introduced by other Java web application frameworks. Custom tag libraries are a snap. GSP Templates provide a simple mechanism for reusing UI elements. Sitemesh is integrated to help provide a consistent presentation across the entire application. Grails provides simple mechanisms for leveraging the power of Ajax.

This session will cover all of these topics to demonstrate how powerful the Grails framework is and show how little effort it takes to build not just a simple toy application but also to build real enterprise web apps.

Java Memory, Performance and the Garbage Collector

close

Ken Sipe By Ken Sipe
You are using Java, whew!!! No need to worry about memory, the garbage collector will handle that. Those who have had a memory issue in Java are not so naive any more. Often memory utilization and heap sizes are an after thought and are not recognized until the application is in production, often caused by application uptime, production request volume or production sets of data. When the OutOfMemory Error occurs, often the science of development seems to brake down and knobs are turned. First the (-mx) maximum heap space gets adjusted... More is better right. The next OutOfMemory, heads start scratching, code reviews start in earnest, and Google gets several new hits. Did you know that it is possible to get an OutOfMemory error without running out of heap space?



This talk will walk through the underlying details of memory management in the JVM with a focus on VM flags available to help configure the VM. However we can't configure the VM without a detailed understanding of what is going on inside the VM. We'll focus on tools available for analyzing the memory in a running VM. Two actual client case examples will be presented. We'll discuss the differences between the two cases and why the end configurations were quite different.

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

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

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

Ruby Plays Well With Others

close

Mark Volkmann By Mark Volkmann
Developing applications entirely in Ruby isn't always practical. It may be desirable to utilize existing code written in other languages. Also, implementing some functionality in Ruby may not yield sufficient performance. When these situations arise, Ruby can invoke code written in Java or C.

The easiest way to invoke Java code from Ruby is to use JRuby (http://jruby.codehaus.org/). JRuby is maturing rapidly now that Sun is financing much of its development.

C code can be invoked from Ruby by using wrapper code that is generated using SWIG (http://www.swig.org/) or written manually.



This talk will provide and overview of JRuby. It will also cover the details of writing C wrapper code manually, which provides the greatest flexibility and performance.

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

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


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

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. This talk illustrates 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

Agile Requirements with User Stories

close