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 | |
|---|---|---|---|
| 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 - VENKAT SUBRAMANIAM | ||
| 1 | 2 | 3 | |
|---|---|---|---|
| 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 SESSION | ||
| 1 | 2 | 3 | |
|---|---|---|---|
| 8:00 - 9:00 AM | BREAKFAST | ||
| 9:00 - 10:30 AM |
|
|
|
| 10:30 - 11:00 AM | MORNING BREAK | ||
| 11:00 - 12:30 PM |
|
|
|
| 12:30 - 1:15 PM | LUNCH | ||
| 1:15 - 2:15 PM | EXPERT PANEL DISCUSSION | ||
| 2:15 - 3:45 PM |
|
||
| 3:45 - 4:00 PM | BREAK | ||
| 4:00 - 5:30 PM |
|
|
|
By Brian Sletten
You're a good Java programmer. You understand the JDK libraries and how to use them. The problem is that many fundamental APIs don't take the bigger performance picture in mind. Garbage collection can end up killing your app if you aren't careful. Concurrency problems and contention can keep your well-intentioned software from leveraging modern hardware architecture that support multi-core and multi-cpu systems.
Who knew that simply using the standard library code the way it was designed was opening you up for performance problems in your apps?
Don't worry, Javolution has your back.
Javolution is a small (300K) API designed to bring many of the benefits of the Real-Time Java Specification (RTJS) to J2SE, J2ME, GCJ and CLDC through deliberate design decisions.
It includes re-implementations of the java.util, java.lang, java.text, java.io and java.xml to demonstrate time-deterministic behavior. It also includes a framework for testing its own performance, supporting parallel computing, communicating with C/C++ applications and a real-time object to XML marshalling framework.
Come see how you can get some of the time-determinism and concurrency benefits in either your client or server side applications. This is a fairly deep talk and is largely a decomposition of an API that changes the runtime characteristics of the VM's runtime performance with only the tools offered by the language and the VM.
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.
By Brian Sletten
If you have started to take a look at REST as way of exposing web services or managing information spaces, you may be frustrated by the support offered by legacy containers. There is no direct support for REST concepts in the J2EE specs (yet). XML-based configurations are so 1990's. Come learn about Restlets, a little API that has caught the attention of many in the RESTafarian community.
The Restlet API was created by a guy who wanted object-level support for RESTful concepts, but didn't want to make the move to an advanced resource-oriented environment like NetKernel. He wanted his REST and conventional environments too. He also wanted a path to more modern containers that aren't tied to a blocking I/O model like the Servlet spec is.
This talk will include a brief review of REST and its primary concepts and will then provide an introduction to the Restlet API and how it supports these ideas. It will then focus on standing up a REST-oriented infrastructure using the Restlet API and a variety of other open source tools to support a publish/find/bind infrastructure without touching SOAP/WSDL/ or UDDI.
This talk will not try to convince you about using REST. If you aren't familiar with the concepts or want convincing, please come to the "Give it A REST" talk first.
Prerequisite: Give it a REST (unless you are very comfortable with REST)
By Brian Sletten
How well do you understand the dynamics of your applications? In our systems, we detect when simple things happen. Customers log in, people buy things, a stock is sold at a particular price, inventory shifts locations... all of these events mean little things, but what about the larger picture? Complex events are particular patterns of simpler events that suggest something deeper is happening. Do you know how you'd discover these bigger picture occurrences? Come hear how the Esper open source software represents a new class of complex event processing (CEP) frameworks that can be added to even high volume, high transaction systems.
Trying to write software to track event occurrence is difficult to do correctly and almost impossible to do efficiently. The problem is that the higher volume and performance our systems get, the harder it becomes and the more important it is to highlight interesting or unexpected activity that isn't represented simply by a log entry.
Complex Event Processing (CEP) and Event Stream Processing (ESP) systems are emerging as a new strategy for processing and detecting complex sequences of more rudimentary events that could have bigger implications to your production systems. While commercial software is starting to add this behavior, Esper represents one of the most accessible and widely-used frameworks for adding CEP/ESP capabilities to Java applications.
By Brian Sletten
Just as the world is feeling comfortable with the Web, Tim Berners-Lee et al inform us that what we have seen so far is just the beginning. His original plans at CERN were larger and grander. The Semantic Web is a vision of machine-processable documents and metadata to improve search, knowledge discovery and data integration and management. The only problem is that there is no such thing. There is no Semantic Web, just the Web we have that is increasingly semantics-enabled.
Forget the hype. Come learn how the technologies of this vision are being used today on the Web and in the Enterprise by more people than you might think.
Attendees will learn:
The history and motivations behind the Semantic Web vision
An honest assessment of where we are and what is likely to unfold
The technology stack involved (including RDF, RDFS, SKOS and OWL)
Tools built around this stack
Introduction to how they can help you today
By Jared Richardson
Software projects fail over and over for many of the same reasons. We'll look at some of the more avoidable problems and some solid ways to fix them, or avoid them in the first place.
We'll talk about discovering what went wrong (and what went right!) with your last project, solving code integration issues, resolving lingering quality problems, establishing automated test suites, reining in soaring project requirements and more.
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.
By Jared Richardson
There are a number of great techniques you can use across technologies and projects. Come hear some of my favorites and contribute a few of your own. We'll discuss topics from DRY to creating a zone defense for your product.
In this session we'll discuss:
-grassroots process improvement
-DRY code: why and how
-establish a zone defense for your code
-tracer bullets
-test automation
-lunch and learn
-the home server
-leaving your comfort zone for fun and profit
By Jared Richardson
Technical debt has long been recognized in technical circles for years, but convincing your manager to budget time to repay "technical debt" has always been problematic. Let's couch the term technical debt concept in language more familiar to our managers: credit card debt.
Like credit card debt, technical debt accumulates slowly over time, and usually takes just as long to pay off. The interest slowly builds up until you're no longer able to pay off the principle: your entire development cycle is devoted to just "paying the interest". We'll examine common types of technical debt and strategies to effectively communicating the problems, and their solutions, to your managers.
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.
By Jeff Brown
Groovy is an agile dynamic language for the Java platform. The language and its libraries bring many things to the table to ease the process of building applications for the Java platform. This session provides a detailed run through Groovy with lots of code samples to drive home the power of the language.
Dynamic languages provide a lot of power and flexibility compared to statically typed languages. Groovy brings that power and flexibility to the Java platform in a way that is totally compatible with all of your existing Java code, tools and infrastructure. This session covers all of the fundamentals of Groovy and gives developers a whole lot of practical information they need to get started with the language.
By Jeff Brown
Grails is a full stack MVC framework for building web applications for the Java platform. Grails makes web application development both fun and easy. This session covers all of the fundamentals of building web applications with Grails.
Businesses need rich web applications and developers want to be able to build those applications without the pain that usually comes along with doing so. Grails addresses these needs very well. Grails demolishes many of the pain points that Java developers have almost (not quite) become numb to after years of suffering. This session covers all of the fundamentals:
- Introduction To Grails
- Domain Objects
- Controllers
- GSPs
- Custom TagLibs
- GORM
By Jeff Brown
Grails makes web application development both fun and easy. This session dives beyond the basics to cover advanced details of Grails that bring the really exciting features to your applications.
Getting started building web applications for the Java platform is easy. Following that through to rich interactive applications that solve the business needs is more tricky. Grails goes the whole way to address pain points not only for simple applications but of real enterprise applications with real demands. This session steps through many of the advanced features of Grails that help get your applications through that last 20% that teams often struggle with.
Prerequisite: Grails - Agile Web 2.0 The Easy Way
By Jeff Brown
Dynamic languages bring a lot of interesting elements to the table for teams interested in doing Test Driven Development (TDD). Groovy lends itself very well to TDD and this session demonstrates many features of the language and its libraries that help teams build more testable systems and build better tests.
The value of Test Driven Development (TDD) has become widely accepted. The practice has extended beyond just XP teams. Good TDD practices yield high quality software and help teams maintain confidence in their software as complexity grows. The dynamic nature of Groovy makes TDD easy and fun. Groovy may be used to unit test not only Groovy code but other code as well. Testing Java code with Groovy is a snap. Learn to use the power of Groovy to test your systems.
By Jeff Brown
Metaprogramming is a key component in building truly dynamic and flexible applications with Groovy. Groovy's metaprogramming capabilities bring great new possibilities to the table that would be very difficult or just plain impossible to write with Java alone. This session will demystify a lot of the magic that seems to be going on inside of a Groovy application.
When Java developers are first introduced to Groovy one of the first things they notice is how much easier things are in Groovy compared to Java. Boilerplate code typically generated by your IDE all melts away to nothing in a Groovy bean. Creating XML is a snap, not a tangled mess. File I/O is a breeze. Those developer productivity gains are an important part of the story. However, in addition to making easy the things you are used to doing the hard way Groovy brings whole new capabilities to the party that Java developers don't even think about because you can't do those things with Java. Many of those capabilities are made possible because of the powerful metaprogramming capabilities of the language. Learning the metaprogramming capabilities of the language takes developers the rest of the way to fully taking advantage of the power of Groovy. The metaprogramming capabilities offered by the language provide everything that an application development team needs to build systems that are far more capable than their all Java counterparts.
Prerequisite: A Thorough Introduction To Groovy
By John Carnell
Waste is an insidious beast that drains the productivity of development teams and the organizations they work in. Many organizations are now realizing that by turning their gaze inward they can streamline their overall development processes, deliver higher quality products faster and save significant amounts of money.
In this talk we will look at the "Lean" techniques first developed by companies like Toyota and how they can be applied to common software development practices. We will walk through such concepts as identifying the different types of waste you might encounter in a software development effort, using Value Stream Mapping (VSM) to help measure the impact of that waste and different techniques you can use to eliminate that waste.
By John Carnell
One of the holy grails of an enterprise architecture team is to provide a light-weight development framework that can be used to quickly build first-to-market applications while still providing a migration path for these applications to a more robust corporate enterprise stack. (e.g. J2EE).
This talk will look at how you can leverage Grails, Groovy and Spring to build applications that can start small and grow to integrate with your enterprise systems.
One of the holy grails of an enterprise architecture team is to provide a light-weight development framework that can be used to quickly build first-to-market applications while still providing a migration path for these applications to a more robust corporate enterprise stack. (e.g. J2EE).
Until recently, this type of development stack has been unattainable. However, with the explosion of development frameworks like Ruby on Rails and Grails this type of flexibility is within reach of any development organization.
This talk will look at how you can leverage Grails, Groovy and Spring to build applications that can start small and grow to integrate with your enterprise systems. Some of the topics covered include: key design patterns that should be leveraged to enable flexibility in Grails, how to use Spring within Grails to provide a layer of abstraction to move to a full J2EE stack and using Web Services (SOAP and REST) to provide easy access to corporate data sources.
By John Carnell
Groovy is an extremely powerful and dynamic scripting language that can allow development teams to build extreme flexibility into their applications. However, leveraging this flexibility in Groovy requires developers to break many of the paradigms they have built over the years surrounding such things as object-oriented design and programming with static languages.
This talk will start with the basics by first showing Java developers how to script enable their applications using Groovy. The talk topics will then progress into more intermediate subjects like how to use functional programming techniques to build flexibility in your code. We will specifically be looking at how the prudent use of things like closures can eliminate some of the more common design patterns like the Template Method and Visitor patterns.
Finally, we will explore the ins and outs of the Groovy Meta-Object Programming (MOP) model.
By Mark Richards
The chances are good that at some point in your career you will need to use messaging to pass information between applications, subsystems, or external systems, particularly with service-oriented architecture on the rise. The Java Messaging Service (JMS) allows Java applications to implement messaging using a standard API, thereby removing the dependency on any particular messaging provider. In Part 1 of this session we will take a look at some of the basics of messaging, including sending and receiving messages, message types, and request/reply messaging. I will begin the session by going over the basics of messaging and the JMS API. Then, through interactive coding using OpenJMS I will demonstrate how to connect to JMS providers, send messages, receive messages, and use message properties. Please note that this is a two part session.
Agenda:
JMS Basics
- Messaging Models Overview
- JMS Message Structure
- Primary JMS Interfaces
- JMS Providers
- Internal vs. External Destinations
Practical JMS
- Obtaining a JMS Connection
- Sending a Message to a Queue
- Receiving a Message from a Queue
- Using Message Properties
- Implementing Request/Reply Messaging
- Message Correlation
By Mark Richards
In Part 1 of the JMS session I covered messaging models, messaging basics, the JMS API, and point-to-point messaging. In this interactive code-intensive session I will cover some additional JMS topics such as browsing queues, load balancing, publishing and subscribing to messages within the pub/sub model, durable and non-durable subscribers, message selectors, and message filtering. I will also discuss and demonstrate message prioritization, persistent and non-persistent messages, and finally message expiration (expiry). Note that this is Part 2 of a two-part JMS session.
Agenda:
- Browsing Messages
- Load Balancing
- Publish and Subscribe Model
- Durable Subscribers
- Message Selectors and Filtering
- Persistent and Non-Persistent Messages
- Message Priority and Expiration (Expiry)
Prerequisite: Enterprise Messaging With JMS (Part 1) or some knowledge of JMS
By Mark Richards
Awareness about Service Oriented Architecture (SOA) has grown significantly in the past several years. Unfortunately, along with that growth has come a significant amount of confusion about what SOA really is. SOA has become such a ubiquitous buzzword that it now has many faces and means different things to different people. CIO's, managers, vendors, business users, architects, and developers all see SOA differently which creates a sea of confusion about what is and isn't SOA. In this highly interactive and thought provoking session we will look beyond the hype and marketure of SOA and explore SOA from an architecture and development point of view - in other words, SOA as an architecture pattern. During this session we will look at SOA use cases, services, integration, implementation, guiding architecture principles of SOA, and attempt to answer the following question: What is and isn't SOA?
Agenda
- SOA? Someone help me, please!
- What is and isn?t SOA?
- SOA Architecture Pattern Elements and Principles
- What All This About an ESB?
- SOA Challenges
- Post Discussion
- Summary
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
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
By Mark Richards
Most web-based applications rely solely on the database to manage transactions, thereby freeing the developer from having to worry about transaction management. While this works in some circumstances, there are times when the use of transactions is vital to the integrity and operations of an application and its corresponding data. In this session I will demonstrate through real-world coding examples why transactions are such a critical part of the application development process. I will review the basics of both programmatic and declarative transactions, then introduce three transaction design patterns and explain when they should be applied, how to use them, and what problems they solve. By the end of this session you will see that by using transaction design patterns you can build an effective transaction management strategy for your application with very little effort.
Agenda:
- Why Transactions Are Necessary
- Programmatic Transaction Management (EJB, Spring)
- Declarative Transaction Management (EJB, Spring)
- Transaction Design Patterns Overview
- Client Owner Transaction Design Pattern
- Domain Service Owner Transaction Design Pattern
- Server Delegate Owner Transaction Design Pattern
- Summary
By Venkat Subramaniam
Java has been around for well over a decade now. It started out with the goal of being simple.
Over the years, its picked up quite a bit of features and along comes complexity. In this presentation
we will take a look at some tricky features of Java, those that can trip you over, and also look at some
ways to improve your Java code.
Java features
Set of tricks
Tips to improve your Java code
By Venkat Subramaniam
The first item in the Agile Manifesto reads that we must prefer "people and interaction over process and tools."
Given a choice between average people with superior tools and superior people with average tools, you are likely
to achieve greater success with the latter. However, it is important to be continuous and not be episodic?so you
want to get continuous feedback about the state, health, and quality of your code and application. Tools can
help us a great deal to realize this and make us productive.
In this presentation we will take a look at
tools (and their relevance and value) that can help smoothly execute your projects.
By Venkat Subramaniam
Unit Testing is easy if the object you're testing has no dependencies. In reality, however, objects have dependencies,
often making it difficult, if not impossible, to automate tests. Mock objects can help deal with these dependencies
and allow you to automate your tests.
In this presentation you'll learn what mocks are, the difference between mocks
and stubs, how to hand toss mock objects, how to approach testing with deeper dependencies, and also how to use tools and framework that can help you with mocking.
By Venkat Subramaniam
A good design is critical for success with agile development.
That does not mean a big up-front design. The design has to
be evolutionary. However, the design you evolve must be
extensible and maintainable. After all, you can't be agile
if your design sucks.
In this presentation, we will address
what evolutionary design is, and will delve into principles
and practices that can help realize an effective evolutionary design.
By Venkat Subramaniam
We all have seen our share of bad code. We certainly have come across some good code as well.
What are the characteristics of good code? How can we identify those? What practices can promote
us to write and maintain more of those good quality code. This presentation will focus on this
topic that has a major impact on our ability to be agile and succeed.
Characteristics of quality code
Metrics to measure quality
Ways to identify and build quality
By Venkat Subramaniam
DSL or Domain Specific Languages focus on a domain or problem at hand. They're expressive, but their
restricted scope keeps them simple and small from the user point of view. However, designing them is not easy.
In this presentation we will explore the features of Groovy and show how they can be used to create DSLs.
What's DSL?
Characteristics of DSLs
Types of DSLs
Designing DSLs
Groovy features that enable DSLs
Examples of DSLs in Groovy
Creating DSLs in Groovy
By Venkat Subramaniam
You're most likely familiar with the Gang-of-four design patterns and how to implement them in Java. However, you wouldn't want to implement those patterns in a similar way in Groovy. Furthermore, there are a number of other useful patterns that you can apply in Java and Groovy. In this presentation we'll look at two things: How to use patterns in Groovy and beyond Gang-of-four patterns in Groovy and Java.
Patterns overview
Implementing common patterns in Groovy
Beyond Gang-of-four patterns in Java and Groovy
Lots of examples
By Venkat Subramaniam
Functional Programming Languages (FPLs) have been around for a long time. A lot of features that we get excited about
in dynamic languages are common place in FPLs. FPLs are gaining importance due to various changes in our industry. What's exciting is that you can use them on the JVM. In this presentation we will dig into the details of what makes FPLs so interesting and look at ways to use them on the JVM?in your Java projects.
What's Functional Programming?
Why is Functional Programming suddenly important?
Features of Functional Programming
Functional Programming Languages
JVM and FPLs
Examples of Functional Programming features
Examples of mixing Java and FPLs
By Venkat Subramaniam
Groovy's dynamic capabilities makes it an attractive language for Meta Programming.
There are several facilities to intercept method calls to do AOP kind of operations.
You can also inject methods dynamically. You can also easily perform method synthesis as well.
In this presentation we will take a look at techniques that make Groovy pretty Hip for MOP.
Exploring MOP
Understanding Groovy's method handling mechanism
Accessing methods and properties dynamically
Method interception
Method injection
Method synthesis
Method delegation
Applying MOP to real world projects