About the Session Schedule
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.
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 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 | ||||
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 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:15 PM | LUNCH | ||||
| 1:15 - 2:45 PM |
|
|
|
|
|
| 2:45 - 3:00 PM | BREAK | ||||
| 3:00 - 4:30 PM |
|
|
|
|
|
| 4:30 - 5:30 PM | EXPERT PANEL DISCUSSION | ||||
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 8:00 - 9:00 AM | BREAKFAST | ||||
| 9:00 - 10:30 AM |
|
|
|
|
tbd |
| 10:30 - 11:00 AM | BREAK | ||||
| 11:00 - 12:30 PM |
|
|
|
|
tbd |
| 12:30 - 1:15 PM | LUNCH | ||||
| 1:15 - 2:00 PM | BIRDS OF A FEATHER SESSIONS | ||||
| 2:00 - 3:30 PM |
|
|
|
|
tbd |
| 3:30 - 3:45 PM | BREAK | ||||
| 3:45 - 5:15 PM |
|
|
|
tbd |
|
By Bruce Tate
Agile programming is a collection of core principles and techniques that allow software developers to create lighter, more responsive applications, and to have fun doing it. Many established organizations are either openly or sub-conciously hostile to many of the principles of Agile development.
We'll explore the intersection of these new practices and old-world sensibilities, relying on real-world case studies to illustrate some of the compromises that are necessary to bridge the gap. In addition to technical and process aspects, we'll also spend some time talking about the business aspects, such as how Agile development affects contracts.
By Bruce Tate
O/RM (Object/Relational Mapping) seeks to eliminate repetitive or tedious work enabling the CRUD (create, read, update, delete) that underlies most applications. Hibernate is a popular, open-source O/RM tool that uses reflection (instead of code generation, like EJB, or bytecode injection, like JDO) to manage your persistence layer.
This session will introduce you to Hibernate. After an overview of common usage scenarios, including web and enterprise applications, we'll examine the basics of getting Hibernate running. We'll cover the mapping file format and syntax, including common relational mapping structures. Then, we'll examine the Hibernate API for interacting with the framework. Finally, we'll cover the common architectural decisions you'll have to make as you include this (or any other) O/RM framework.
By Bruce Tate
In this session, we'll review the new features of Spring 2.0. If you've been using Spring 1.x, you'll want to hear about the improvements.
This material comes directly from Interface21. The SpringFramework version 2.0 brings tremendous maturity to one of the most successful Java projects of our time. In this session, you'll see
- Radical improvements in the simplicity of context definitions
- Much better AspectJ integration
- Unified user interface strategies, and the continued emergence of WebFlow.
By Bruce Tate
This session will help a Java developer choose a persistence framework. After the session, you will
• Understand the core strengths and weaknesses of the main persistence frameworks in the Java space
• Understand where marketing influences can impact persistence
• Know what’s going on behind the scenes to impact the persistence pictures
• Answer questions about persistence frameworks that might not be mainstream
This free-form session is intended to help attendees choose or validate a persistence framework. In it, the instructor will take questions from the audience, and tailor the session to the questions asked. Bruce will focus on three persistence frameworks: EJB, JDO and Hibernate. He’ll talk about the evolution of each of the frameworks. He’ll talk about the fundamental design philosophies of each, and what makes each unique and strong.
But understanding technical strengths is not enough in the area of persistence. To make the best possible choice, a developer or architect must also understand the politics of persistence, and the marketing pressures that lead to the success or failure of each framework. The proposed common standard across JDO and EJB will get special consideration.
This format has been very popular among nofluffjuststuff attendees. It’s highly tailored to each audience, but still flows with good structure. When the session is over, you’ll have a better understanding of the major persistence frameworks in the Java space, and what makes each valuable. You’ll also understand how much of a role market share and technology play in the success or failure of a persistence framework.
By Bruce Tate
The state of the art is progressing rapidly, and dynamic languages are driving the revolution. Find out about these topics that will be central to programming. We'll discuss continuation servers, metaprogramming frameworks and functional langauges.
Seaside provides a much richer web development experience than you can find in Java today. Learn how continuations can radically improve your web development experience, and learn what Java frameworks are doing about it.
The programming world is abuzz over the Rails framework, but how many of the ideas are exclusive to Rails? We'll look at Active Record, and discover the fundamental innovations that let it happen. What improvements might be made by Java persistence frameworks, and where does Active Record come up short?
Concurrent programming will come to a head with the introduction of multiprocessor systems. We'll discover just how broken conventional langauges are. Also, see how functional languages solve this problem.
By Dave Thomas
Are you frustrated by experts who can't tell you what to do, or by junior team members who refuse to see the big picture? How can you best develop careers: both yours and those of your teammates and managers? How can we learn to apply experience more effectively, and why do the many approaches designed to tame complexity actually end up increasing it?
Dave Thomas, of The Pragmatic Programmers, describes the solutions to these and other problems as he turns the Pragmatic Spotlight (and a good dose of twisted humor) on formal learning models, the Nursing profession, and streamlining sheep.
By Dave Thomas
Ruby recently enjoyed its tenth birthday. Instead of cake and candles, the community celebrated by releasing a wave of new libraries and frameworks that make Ruby programming even easier. This talk features some of the best of these, as we explore Ruby.
We'll spend about half the session getting to know Ruby: the syntax, type system, blocks, iterators, and so on. Then we'll dive in and develop some real-world code using web services, RSS, and databases. If you want to come to the Rails talk, and you're not that familiar with Ruby, this talk is a good starting point.
By Dave Thomas
The Ruby on Rails framework has exploded onto the scene over the last few months. Propelled by some genuine benefits, and fueled by a whole lot of controversy, Rails seems here to stay. So, is it a Java killer? (No.) Is it a great way to develop certain classes of web application? (Yes.) Does it really deliver the 10-fold increase in developer productivity that some have claimed? (It depends...)
If you can't help thinking that there must be an easier way of developing web projects, come and join us as we construct an MVC-based Ruby on Rails application using the very latest libraries and tools. You'll get a taste of Ruby, and also a feel for some of the power and productivity gains offered by this remarkable framework. You'll need a grounding in Ruby to get the most from this talk; if you're not already a Ruby developer you might want to attend the Facets of Ruby talk before coming to this one.
By Dave Thomas
Ajax is becoming a requirement for new applications: it creates richer
user experiences and more dynamic applications. However, doing Ajax by
hand is difficult and error prone. The good news is that if you use
Rails, you don't have to do Ajax the hard way.
Rails has built in helpers that support Ajax development,
and comes packaged with the powerful prototype.js and script.aculo.us
libraries.
Come see how Ajax can be made to work with your Rails applications as
we built a very dynamic ToDo list, and see how Ajax can be made robust
with a simple calculator.
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.
By David Geary
In 2005, JSF hit its stride, as evidenced from overwhelming support from both vendors and the open-source community. JSF 1.0 had plenty of holes, but open-source projects have arisen to address those needs. This session takes a look at three of those projects: Tomahawk (MyFaces component library) FaceletsSeam
MyFaces is an open-source implementation of the JSF spec. In addition, MyFaces developers got a little carried away and also developed a useful set of custom components that you can use in your own applications, regardless of whether you use MyFaces as your JSF implementation. Those components are now packaged separately from MyFaces under the name Tomahawk.
Facelets is an open-source project from java.net that lets you implement views with Tapestry-like HTML pages. That technique is a powerful feature that lets graphic designers and software developers work separately in parallel.
Seam is a framework from JBoss that provides a component model that unifies the EJB and JSF component models. Seam makes great use of annotations to meld EJBs and JSF components in a seamless fashion (thus the name).
Lots is happening in the JSF space. Come to this talk and learn about these three exciting open-source projects.
By David Geary
JavaServer Faces is a well designed user interface framework, but it lacks a number of features you might otherwise expect out of the box; for example, JSF does not explicitly provide support for client-side validation.
So, from the folks that brought you Struts, comes Shale, a collection of useful enhancements to JSF. A top-level Apache Software Foundation project, Shale adds some really cool features to vanilla JSF, including:
Web flow: script dialog flow
Remote Method Calls: easily call JavaBean methods from JavaScript
Tapestry-like views: code views in pure HTML
Use Apache Commons Validator validators on the client or server, or both
JSF testing framework: mocks for easy JSF testing
There's a lot of cool stuff in Shale that makes JSF a much more compelling proposition. Come see what it's all about.
This is a code-intensive, fast-paced look at Apache Shale. Forty-plus slides and five demos makes for an action packed session that illustrates the cool features that Shale provides.
By David Geary
User interfaces are usually the most turbulent aspect of an application during development. Constant tinkering with the UI means constant changes to your code, so as a UI developer, you want to minimize the scope and effects of those code changes.
Open-source Java provides two powerful software packages that help you manage UI complexity: Tiles and Sitemesh. Tiles composes webpages from discrete regions of your user interface known as tiles. A tile contains a JSP page for layout and one or more JSP pages for content. Sitemesh decorates webpages with decorators that can be associated with URL patterns. Once you set up your decorators, you can decorate pages that match a decorator's URL pattern.
Come see how to use Tiles and Sitemesh with a guided tour from the inventor of Tiles, who has recently become a Sitemesh believer.
By Howard Lewis Ship
An introduction to the Apache Tapestry web application framework, which will explain the concepts and features of the framework with some simple applications. We'll discsuss Tapestry forms, request cycle, component object model. The use of several important components, including BeanForm and Table will be highlighted, along with meta-programming using the Trails framework.
Tapestry is a powerful open-source Java web application framework that stands apart from most other technologies used for creating web applications ? it is based on highly reusable components, which are assembled to form complete pages. This session will get you started with Tapestry, showing how to build a simple form-based application. Along the way, we'll see how Tapestry simplifies your job: We'll see how Tapestry HTML templates are easier to create and maintain than JavaServer pages (JSPs). We'll see how Tapestry's built in error reporting lets you find and correct errors with startling speed. We'll see how Tapestry takes over responsibility for building and interpreting application URLs, eliminating large amounts of boring, error-prone, manual coding. Most importantly, we'll see how Tapestry bridges from the stateless world of HTTP and servlets into a more natural, more productive world of actual object oriented engineering ? allowing you to build applications in terms of objects with methods and properties (a true revolution if you are used to traditional servlets).
We'll also take a peek into more advanced aspects of Tapestry, such as its input validation subsystem that provides server- and client-side validation, as well as more advanced Tapestry components such as Table (a powerful data grid), and the Trails meta-framework that creates complete applications without almost no coding. Once you've learned a little bit about Tapestry, you might find it hard to go back to your old approach!
By Howard Lewis Ship
In Tapestry, components are not an add-on; in fact, anything but! Tapestry components are integral to the entire framework ? if something dynamic is going on in a page, there's a component involved.
When building Tapestry applications, a constant problem solving approach is to create new components. Tapestry makes creating components very, very easy. In this session, we'll see how to create simple output-only components, and how to create components with their own templates. We'll also see how to create components that can have interactions with the user independent of the containing page. Tapestry is designed so that the components just drop in and work, and we'll touch on some advanced services included in Tapestry, such as JavaScript generation.
By Howard Lewis Ship
You've heard about unit testing but were daunted when it came time to put the pedal to the metal. That's because JUnit is just one tool and there's others you need to learn about, including the wonderful and wierd EasyMock and the easy and powerful TestNG.
Unit testing with JUnit only gets you so far; even when you've refactored your code and hidden all your implementations behinds interfaces you are still stuck with the problem of testing the individual pieces. If you've hit this point and despaired, know that there are tools to help ... including the wierd and wonderful EasyMock. We'll discuss unit testing in general, and how EasyMock is used to to generate mock objects, allowing you test each class in isolation. We'll also leave JUnit behind and investigate using TestNG, a modern and improved test framework. We'll then learn how to tame EasyMock's awkward API with some modest refactoring and naming conventions.
By Jared Richardson
a.. Do you spend more time fighting your tools than writing code?
b.. Do you avoid merging your code with your teammates because of “Integration Hell”?
c.. Do the same bugs keep sneaking back into your product?
d.. Do your builds depend on the roll of the dice?
A good set of infrastructure tools can go a long way toward smoothing out these and other problems. Come see how to make your toolset work seamlessly in the background so you can Just Work. We'll cover source code management (SCM), build scripts, automated test harnesses, automatic builds, feature tracking and issue tracking.
As part of the session, we'll set up Subversion, create a project, and then add code for the SCM section ... just to obliterate the "it takes too much time to set up and use" argument. For build scripts, we'll add an Ant script. Let's throw in a few JUnits to demonstrate test automation, and then I'll put it all together in CruiseControl. The live demo will include breaking the build, then breaking the JUnit test, and then finally fixing it and seeing it all work.
For this first session, we'll look at Subversion, Ant, and start the Cruise Control discussion.
By Jared Richardson
This talk is a continuation of Part One of the Tools talk. During Part Two we'll cover Continuous Integration, automated testing, bug tracking, and feature tracking.
We'll set up CruiseControl and walk through it's functionality, then look at JUnit and how it fits into CruiseControl and the Continuous Intregration idea. Finally, we'll talk about tracking features and bugs.
If you don't make Part One you can still attend and benefit.
By Jared Richardson
Are your product designs hit or miss? Do you have trouble building a loosely coupled system? Is your code incestuous? Refactoring not an option with your code base? Tracer Bullets help keep your project out of the fire.
Tracer Bullet Development:
* helps you create great software
* lends itself to an iterative cycle
* can be used for demos early and often
* is easily refactored
* allows your teams to work in parallel
* makes a very testable system
Tracer Bullets can coexist with nearly any other development methodology. Come see how easy it is!
By Jared Richardson
Throughout our software careers we learn habits from our coworkers, from books we've read, and occasionally, from conferences we attend. Much of our competence comes from the tips and tricks we pick up as we go.
In this session, learn five of the techniques I've borrowed along the way. We'll discuss The List, code reviews, code change notifications, daily meetings, and tech leads. These techniques are often abused, but when used properly they can make a huge difference in how you develop software. Take this opportunity to add these practices to your toolkit.
By Justin Gehtland
The Spring framework is one of the fastest growing open source frameworks. New job postings are gaining rapidly, and many customers are adopting Spring instead of heavier alternatives. In this session, we’ll introduce Spring. You’ll see how Spring can give you much of the power of EJB, without the complexity or pain.
Spring uses concepts like dependency injection and aspect oriented programming to ease standard enterprise development. Spring developers write plain, ordinary Java objects (POJOs), instead of sophisticated components. In this session, you’ll see a basic Spring application. You’ll also see some details about some of the enterprise integration strategies, including:
• Spring AOP
• Transactions
• Persistence
• Model/view/controller
When the session is over, you won’t be an expert, but you should have a much clearer understanding of what Spring does, what it doesn’t do, and why it’s growing so rapidly.
This session, for the Spring beginner, helps you:
• Understand dependency injection and inversion of control
• Know the meaning of lightweight containers and Spring
• Understand the basic pieces of Spring
• See core Spring modules in action, including Persistence, AOP, transactions.
Attendees need not know anything about Spring. This session does talk about integration with core J2EE frameworks like JDBC and transactions.
By Justin Gehtland
Dependency Injection (DI) is the cornerstone of Spring. The core concept is quite simple, but (surprise!) actual practice can become complex. To take full advantage of Spring DI, you need to understand not only the basics on configuration, but also the container lifecycle model and the various hooks provided by the framework.
Topics will include
The difference between DI and Continuous Integration
Setter Injection
Constructor Injection
Factory Injection
Bean lifecycle
Method Injection
Using the ApplicationContext
Custom PropertyEditors
By Justin Gehtland
Hibernate is easy to get started with, but can sometimes be hard to make efficient or secure. In fact, the default settings for Hibernate createapplications that will run slowly, cause unwanted round trips to the database, and may be more restrictive and/or permissive from a security standpointthan you would otherwise want.
This session will show advanced techniques for tuning performance, including:
• advanced collection mapping strategies
• lazy loading
• cascading update management
• lifecycle management
• Hibernate's interceptor layer
In addition, we'll examine the security considerations when using Hibernate. Often, single-credential data access isn't enough for sensitive data. We'll
walk through using per-user credentials for data access, logging security information about and through Hibernate, and accessing data sources through secure application servers.
By Justin Gehtland
Web applications have traditionally been a sort of Faustian bargain, yielding the high-quality user experience that desktop applications can deliver in exchange for incredibly easy deployment and lower support costs.
One of the arguments against creating rich HTML/JavaScript has been how difficult they can be to write and maintain. You will see how to adapt modern Java web frameworks such as JavaServer Faces and Tapestry to ease both the creation and maintenance of these types of applications.
With Ajax we can get a lot of the best of both worlds. Now our web applications can be powerful, usable, an easily deployed!
Web applications have traditionally been a sort of Faustian bargain, yielding the high-quality user experience that desktop applications can deliver in exchange for incredibly easy deployment and lower support costs (i.e., no client software to install, upgrade, and test on every conceivable desktop configuration).
It turns out that these qualities need not be mutually exclusive. As several recent high-profile web applications such as Google's GMail have shown, modern browsers (e.g., Internet Explorer 6, Mozilla/Firefox, and Safari) are capable of rendering web applications with highly dynamic and compelling user interfaces -- fetching data from a server without page refreshes, animating and manipulating page contents on-the-fly, and all without resorting to third-party plug-ins like Flash. The line between a ""web"" application and a ""desktop"" application is blurring.
Let's blur it some more. Another major limitation of web applications is the lack of ability to function in a disconnected (i.e., off-line) mode. It turns out that this too is quite possible with the right architecture -- a web application can continue to function in a modern browser even in the absence of an Internet connection. And when the connection is re-established, data collected while in off-line mode can be uploaded to a server.
Developers seeking practical, real-world advice for creating next-generation, rich web applications won't come away from this presentation disappointed.
By Justin Gehtland
This presentation covers JavaScript from the perspective of an Ajax programmer. We assume that you may be using an Ajax toolkit, but still need to be able to read, modify, and test the JavaScript code in your application. You will learn the common idioms of JavaScript by looking at working code from the Ajax toolkits themselves.
All Ajax programmers need to know JavaScript. Toolkits will do some of the work for you, but your own JavaScript will differentiate your applications from others. A reading knowledge of JavaScript is also necessary when selecting an Ajax framework, and for testing and debugging applications.
We'll go straight to the interesting parts of JavaScript programming:
* Prototype-based inheritance
* Functional style
* Dynamic evaluation
* In-browser testing
We'll demonstrate these concepts using popular Ajax frameworks such as Dojo, Prototype, script.aculo.us.
By Justin Gehtland
Spring offers developers a simpler, more robust method for configuring applications. These benefits extend to security through the ACEGI framework. ACEGI makes the otherwise daunting task of securing your application logical and straightforward. More importantly, through its support for single sign-on provision through Yale's CAS system and its ability to provide instance-level authorization, Spring extends the common security model of most J2EE apps beyond what they are traditionally capable of.
In this session, we'll explore:
• configuring ACEGI to authorize against an in-memory user list, a database, and a JAAS login module
• page level authorization
• method level authorization
• instance level authorization
• forcing HTTPS connections to secured sites
• impersonation using the RunAsManager
By Justin Gehtland
The Java platform is built from the ground up with security in mind. This talk will introduce the security features of the J2SE, building quickly from the basic classes to realistic examples. You will learn the core APIs: SecurityManager, AccessController, Permissions and Policy JAAS Subjects, Principals,
and LoginModules
You will then see how to invoke these APIs in real application scenarios. You will learn how to:
• Partition your applications to safely invoke downloaded code
• Read and write Java policy files
• Extend the architecture with custom permissions
By Matthew Porter
In November 2005, WebWork and Struts developers announced a merger between the two framework to build Struts Action Framework 2.0. The resulting product will be built upon the foundation of WebWork 2.2 with a slew of new features, including a migration layer for Struts Classic. This session introduces the audience to this revolutionary framework and teaches some new concepts to those already using WebWork.
This session serves as a detailed, low-level introduction to WebWork/Struts 2.0 utilizing the QuickStart proptotyping system that allows one to build web apps without the standard code-compile-app server restart cycle. It covers the core features, including Action, Interceptors, the OGNL (Object Graph Navigation Language) expression language, and the built-in validation framework. Beyond this, more advanced features such as per-class and per-property type conversion rules, i18n localization, and the template system are covered. The audience will walk away with the knowledge to begin building WW/Struts 2.0 applications today and migrating the Struts Classic applications.
By Matthew Porter
From it's early pre-release, WebWork 2 (the core of Struts 2.0) has included Inversion of Control. This implementation, based upon interfaces, served the WebWork community well due to its simplicity; however, it lacked a number of features. Beginning in version 2.2 and continuing with Struts 2.0, the internal IoC container has been deprecated and replaced with the more powerful Spring IoC.
This session will detail how to use the WW/Struts 2.0 built-in integration with Spring, as well as when not to use it in favor of other integration methods.
By Neal Ford
This session delivers 10 techniques for improving your code, whether you are freshly graduated or a grizzled veteran.
Even the most competent programmer falls into habits and coding ruts. This session delivers 10 techniques for improving your code, whether you are freshly graduated or a grizzled veteran. It is derived from many sources, including other languages (Smalltalk, Lisp, Java, and others), and techniques and idioms we have developed teaching developers. It also consolidates information from books that delve into the craft of writing good software. The goal is to create code that is easier to read, maintain, debug, and enhance.
Key Session Points:
By Neal Ford
This session discusses techniques and tools for debugging enterprise applications (without using System.out.println()!)
It's an interesting dilemma – we have the best tools for software development ever, yet developers are still debugging enterprise applications using ystem.out.println()! This session discusses techniques and tools for debugging enterprise applications. It shows how to perform remote debugging through all the major IDEs, either on the same machine or across a network. It also shows how to debug using the command-line jdb debugger (the only one guaranteed to always be available).This session shows how to debug web, EJB, and lightweight enterprise applications. It discusses class loaders, interactive enterprise debugging with Groovy, and how to automate repetitive tasks using JWebUnit and Selenium, making the computer do work for you instead of vice versa (how many times do you have to walk multiple pages through a web application to get to the point where you can debug it?). This session shows you how to automate these and other common debugging tasks. The goal is to make hunting and eliminating bugs in complex applications much easier.
Key Session Points:
• Setting up remote debugging in IDE's
o Eclipse
o IntelliJ
• Effective remote debugging
• When it's all you've got: jdb and enterprise applications
• Forensic debugging using loggers
• Debugging web applications
o Inspector
o Bookmarklets
• Debugging EJB
• Debugging in lightweight frameworks
• Interactive Debugging with Groovy
• Automating debugging tasks
o JWebUnit
o Selenium
By Neal Ford
Is Service Oriented Architecture the next wave of distributed computing or just the same old crap in a shiny new package? This session provides an overview of what most people agree is the definition of SOA. I talk about SOA, ESB, CORBA, your MOM, and a bunch of other acronyms.
This session is a pragmatic look at SOA from a developer perspective, including such (never talked about) topics like tranports, granularity, versioning services, transformations, and whether you should be doing this or not. I show lots of slides with diagrams and talk about how to evolve towards an SOA. SOA can work if you ignore the hype and focus on the real meat: building loosely coupled message-based applications. This session discusses just that.
By Neal Ford
This session talks about how to actually get XP done in the real world (and what to tell your boss).
Extreme programming sounds a little too ?ESPN2? for most managers, but there is a lot of sound engineering behind its principles. My employer, ThoughtWorks, has been extremely successful using the full XP stack and we have developed lots of experience with it. This session talks about how to do XP in the real world. XP is all about feedback loops, so I discuss how to replace the radical sounding ones with more palatable ones. I talk about the parts of XP that are absolutely vital (unit testing, collective ownership, continuous integration, etc) and the ones that you can introduce a little more slowly (pair programming, only a 40 hour work week). This session focuses on the practicality of XP and how you can adopt it at your organization. I also talk about political battles with managers, other departments, and barriers that pop up anytime you try to introduce change in a large enterprise. Discussion is encouraged (required) in this session.
Key Session Points:
XP and Feedback Loops
A pragmatic look at the XP practices
The planning game
Small releases
Metaphor
Simple design
Testing
Refactoring
Pair programming
Collective ownership
Continuous integration
40-hour week
On-site customer
Coding standards
XP in the real world
By Neal Ford
This session describes the use and workings of Selenium, the open source web user interface testing tool.
Selenium is one of the most powerful functional testing frameworks to come from the open source world in a long time. This session covers all aspects of Selenium, starting from its origins as an internal user-acceptance testing tool through testing Ajax applications. This session covers Selenium functionality, syntax of the test scripts (both HTML and the scripting language), keywords, testing techniques, recording tests, creating extensions, and testing Ajax applications. Selenium is the premiere testing tool for Ajax, so I show several examples of the power of Selenium combined with Ajax.
Key Session Points
By Neal Ford
This session shows you how to become a more productive programmer every day by using tools that you didn't know you already had.
<grizzled-programmer>
Why, in my day, we didn't have any fancy Gooey tools -- we did everything from the command line and we liked it. And, we got a lot more done than all you point-and-click monkeys
<grizzled-programmer>
Have you ever noticed that some old-school developers can run rings around you at the keyboard? Have you ever seen a 2 week problem become a 2 hour solution because someone knew a better way to solve it? This session is about all the command line and other tools that are extremely powerful yet widely neglected in today's graphical environments. This session shows you how to take advantage of those tools whether you run Windows, *Nix, or Mac. It focuses on specific recipes to make your job easier. I'll show you how to get around your computer in a hurry (no more clicking around in trees), how to find anything fast, how to manage projects and artifacts from the command line, how to automate the repetative tasks you find yourself doing every single day, how to stop repeating yourself, and how to stop repeating yourself. This session is guaranteed to improve your developer productivity by an order of magnitude.
Key Session Points
By Neal Ford
This session shows how to use Java as the building block for domain-specific languages. It discusses the next revolution in programming: language-oriented programming and the nascent tools that support it.
If you look at the way advanced programmers in highly dynamic languages (like Lisp, Smalltalk, Ruby, etc.) work, they tend to build domain specific languages on top of their low-level language. The language syntax itself becomes building blocks for languages that are highly specific to their problem domain. It’s not as easy to apply this technique to a static language (like Java), but it is possible. This session shows how to use Java as the building block for domain-specific languages. It discusses internal and external DSLs, with pros and cons for each. This session progresses from creating an internal DSL using Java syntactic elements as keywords through using compiler-building tools to create your own external DSL arriving ultimately at the new tools that allow you to build, edit, and deploy external DSL (language workbenches). This session covers the theory and practice of building DSL's and why this is an important step in the evolution of programming paradigm. It shows tools that are available now to build DSL's and discusses tools on the horizon that will make this much easier.
Key Session Points:
1. Why Dynamic languages?
2. Building domain languages
3. Language-oriented Programming
a. Internal DSLs
b. External DSLs
4. Internal DSL
a. Characteristics
b. Advantages
c. Disadvantages
5. External DSL
a. Characteristics
b. Advantages
c. Disadvantages
6. Case Study: Building your own language
a. Building the parser
b. Building the lexer
c. Abstract Syntax Trees
7. Parsing other languages
a. Parsing Java
b. Parsing HTML, JavaScript, and others
8. Language Workbenches
a. JetBrains MPS in Action
By Ramnivas Laddad
Ever wondered if you can automate testing of your web application, but couldn't produce a satisfactory solution? If so, this is the session for you! Attend this session to understand the alternatives you have for unit and functional testing of web applications.
Testing a web application is a complex task. You must not only ensure that each unit is working as expected, but also ensure that your application works correctly on all target browsers and operating systems. The sad fact is that not all browsers behave in the expected, standards-compliant manner. Performing all tests manually is not only cumbersome, but also error-prone and expensive. This necessitates automated testing of the application inside all relevant browsers. With the increasing use of Javascript and AJAX, automated functional testing is becoming even more important.
This presentation will show strategies for testing web applications. It will cover both unit testing as well as functional testing. For unit testing, it will discuss the mock object approach. Since unit testing is necessary, but not sufficient, the presentation will discuss tools available for functional testing. It will also study a specific tool -- Selenium -- that simplifies functional testing. During this session, we will do live coding to solidify the concepts learned.
By Ramnivas Laddad
A lot is happening in the field of Aspect-oriented programming (AOP). AspectJ and AspectWerkz, the two leading AOP implementations, have merged, bringing in their respective strengths. The merged version, AspectJ 5, adds many new features aimed at simplifying writing and deploying aspects. The new features include an annotation-based and XML-based syntax to define aspects, support for new Java 5 concepts, and load-time weaving. The tools support for AOP continues to improve, as well. Further, the most popular IOC framework, Spring, enables integrating aspects written in AspectJ. There is also serious discussion and preliminary work going on to support AOP right into the VM itself. All in all, there is a lot to learn about the changes in the exciting field of AOP. This session is designed to help you get up to date with all these changes.
This session provides a guided tour of the new things in the AOP world. It explains new features in AspectJ along with the practical considerations in utilizing each of them. The presentation explores the fundamental synergy between AOP and metadata to understand right (and wrong) utilization of metadata-based crosscutting. Load-time weaving (LTW) enables adding aspects to your existing applications deployed in any application server with a minimal effort. The presentation shows how to utilize LTW to improve your productivity considerably, even if you don't yet subscribe to the AOP philosophy and don't want to use AOP in production. The presentation also demos the latest AspectJ Development Tool (AJDT) in Eclipse (that has improved a lot) to make Java developers feel home when developing with aspects. The presentation includes many demos to reinforce the concepts learned, as well as give a feel for what it would be like to apply aspects written using new features.
This session is particularly targeted at developers with good familiarity with AOP concepts and the AspectJ language. It is recommended to attend the “Introduction to Aspect-oriented programming with AspectJ” session or read articles and/or books that introduce AOP and AspectJ to obtain the prerequisite.
By Ramnivas Laddad
Support for aspect-oriented programming is an important part of the Spring framework. It is the AOP support that allows keeping implementation of functionality such as transaction management and security out of your POJOs. While many developers only use aspects provided with Spring, once you understand how it all works, you can make a better use of those aspects, extend them, and write brand new aspects.
This session focuses on Spring AOP implementation. We cover topics such as Advice, Pointcuts, Advisors, proxy configuration, proxy factory bean, the autoproxy mechanisms, and the introduction mechanism. We will also examine many aspects shipped with the framework itself. While Spring’s AOP solution is sufficient in a typical enterprise application, there are situations where we need more full-fledged AOP support. Therefore, we will discuss using AspectJ with Spring and how to leverage the dependency injection mechanism with AspectJ aspects.
This session is targeted for enterprise application developers who want to gain in-depth understanding of Spring's AOP feature. After attending this session you will gain a solid understanding of Spring AOP, standard aspects shipped with the framework itself, and how to write new aspects. Some familiarity with the Spring framework, gained by attending other Spring talks or reading about Spring, is recommended.
By Ramnivas Laddad
J2EE has become the main new platform for enterprise application deployment. Good performance is an important business requirement. Supporting this requirement needs application profiling during the development phases and performance monitoring after application deployment. Come to this session to understand challenges and choices in monitoring J2EE applications.
Performance monitoring solutions must work under constraints imposed by the environment. Further, they must balance conflicting requirements such as overhead vs. richness of information. All of these need careful understanding of both requirements and solutions as well as the costs of any tradeoff decisions.
This session presents various tools and techniques available for monitoring J2EE applications. We will consider requirements of performance monitoring solutions in different scenarios. We will also discuss underlying enabling technologies such as Java Virtual Machine Profiling Interface (JVMPI), Java Virtual Machine Tool Interface (JVMTI), JFluid, JMX, design patterns, and aspect-oriented programming (AOP). During the session, we will demonstrate many of the tools and technologies discussed.
By Ramnivas Laddad
Enterprise application development is a gold mine for applications of AOP. There are many crosscutting concerns found in a typical enterprise application, ranging from well-known security and transaction management to application- and technology-specific concerns. Using AOP leads to implementations that are easy to understand and easy to change.
This session shows how to address common problems faced by typical enterprise applications, with a focus on web applications using AOP. It will present examples of applying aspects to persistence, business, and web layer. It will show how to apply aspects synergistically with technologies such as Hibernate, JAAS, JMX and Spring. Many of the examples include reusable portions enabling them to be readily used in your own application.
This session is targeted at developers with familiarity with AOP and enterprise applications. It is recommended to attend the “Introduction to AOP with AspectJ” session or read articles and/or books that introduce AOP and AspectJ prior to attending this session.