Great Lakes Software Symposium
September 16 - 18, 2005 - Chicago, IL
View the event details here ».
Session Schedule
We are committed to hype-free technical training for developers, architects, and technical managers. We offer over 55 sessions in the span of one weekend. Featuring leading industry experts, who share their practical and real-world experiences; we offer intensive speaker interaction time during sessions and breaks.
About Sessions
Our sessions are designed to cover the latest in trends, best practices, and latest developments in Java application development. Each session lasts 90 minutes unless otherwise noted.
Friday - September 16
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1:00 - 1:15 PM | WELCOME | ||||
| 1:15 - 2:45 PM |
Good, Bad and Ugly of Java GenericsVenkat Subramaniam |
Performance Monitoring in J2EE ApplicationsRamnivas Laddad |
Advanced Enterprise Debugging TechniquesNeal Ford |
tbd |
tbd |
| 2:45 - 3:15 PM | BREAK | ||||
| 3:15 - 4:45 PM |
Herding Racehorses and Racing SheepDave Thomas |
Spring IntroJustin Gehtland |
Introduction to Aspect-oriented Programming with AspectJRamnivas Laddad |
Felix: A bag of Tricks for Java Server FacesDavid Geary |
Test First DevelopmentVenkat Subramaniam |
| 4:45 - 5:00 PM | BREAK | ||||
| 5:00 - 6:30 PM |
Writing Secure Web Services (with Java and Axis)Justin Gehtland |
Shale: Turbo-charge your JSF AppsDavid Geary |
Ruby for Java ProgrammersDave Thomas |
Introduction to Aspect-oriented Programming with AspectJRamnivas Laddad |
tbd |
| 6:30 - 7:30 PM | DINNER | ||||
| 7:30 - 8:30 PM | Keynote: Dave Thomas (Art in Programming) | ||||
Saturday - September 17
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 8:00 - 9:00 AM | BREAKFAST | ||||
| 9:00 - 10:30 AM |
Killer Web UIsDavid Geary |
Ruby on RailsDave Thomas |
Prudent OO DesignVenkat Subramaniam |
Introduction to HibernateJustin Gehtland |
Aspect-oriented Refactoring: Taking Refactoring to a New LevelRamnivas Laddad |
| 10:30 - 11:00 AM | BREAK | ||||
| 11:00 - 12:30 PM |
Programming with Mock objectsVenkat Subramaniam |
Creating Polished Swing ApplicationsScott Delap |
SOA: Next Wave of Enterprise Development or Return of the Son of CORBA?Neal Ford |
Advanced HibernateJustin Gehtland |
tbd |
| 12:30 - 1:15 PM | LUNCH | ||||
| 1:15 - 2:15 PM | EXPERT PANEL | ||||
| 2:15 - 3:45 PM |
Regular Expressions in JavaNeal Ford |
5 Minutes Forms with JGoodies Binding and ValidationScott Delap |
Spring Security with ACEGIJustin Gehtland |
tbd |
tbd |
| 3:45 - 4:00 PM | BREAK | ||||
| 4:00 - 5:30 PM |
Java MetadataJason Hunter |
Java Collections Power TechniquesGlenn Vanderburg |
Pragmatic Extreme ProgrammingNeal Ford |
The Fallacies of Enterprise SystemsTed Neward |
tbd |
Sunday - September 18
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 8:00 - 9:00 AM | BREAKFAST | ||||
| 9:00 - 10:30 AM |
Extreme Web CachingJason Hunter |
Under the Hood of Java Memory ManagementGlenn Vanderburg |
SWT FundamentalsScott Delap |
Testing the Web TierScott Davis |
tbd |
| 10:30 - 11:00 AM | BREAK | ||||
| 11:00 - 12:30 PM |
Runtime Code Generation for Java and BeyondGlenn Vanderburg |
New Features in Java 5Jason Hunter |
Effective Enterprise Java: SecurityTed Neward |
Real World Web MappingScott Davis |
tbd |
| 12:30 - 1:15 PM | LUNCH | ||||
| 1:15 - 2:00 PM | BIRDS OF A FEATHER SESSIONS | ||||
| 2:00 - 3:30 PM |
JavaScript Exposed: There's a Real Programming Language in There! (Part 1)Glenn Vanderburg |
An Introduction to XQueryJason Hunter |
Guerrilla Web TechniquesScott Davis |
Language Oriented Programming Part 1: TheoryNeal Ford |
tbd |
| 3:30 - 3:45 PM | BREAK | ||||
| 3:45 - 5:15 PM |
Language Oriented Programming Part 2: PracticeNeal Ford |
Open Source from the InsideJason Hunter |
Pair Programming for the Single ProgrammerScott Davis |
Seaside: A Radical Web FrameworkGlenn Vanderburg |
tbd |
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
Regular expressions should be an integral part of every developer?s toolbox, but most don?t realize what an important topic it is. Regular expressions have existed for decades, but many developers don't understand how to take full advantage of this powerful mechanism, either through command line tools and editors or in their development.
This session shows how to fully exploit regular expressions. It begins with the basic premise of how regular expressions work, then shows how to take advantage of the RegEx library built into the Java platform. This session shows how to use wildcards, escape characters, meta-tags, character class operators, look-aheads/look-behinds, and how to use the greedy operators effectively. It covers regular expressions from the beginning through to advanced usage, both in Java and in tools that support regular expressions. This session is packed with real examples of regular expressions (including a game show with no fabulous prizes).
Key Session Points:
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 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.
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
By Neal Ford
This session builds on the theory presented in part 1 and shows how to use the new breed of tools, Language Workbenches, to build your own domain languages.
This session builds on the theory presented in part 1 and shows how to build domain specific languages by hand and how to use the new breed of tools, Language Workbenches, to build your own domain languages. This session uses Antlr and JetBrains' new Meta Programming System, which allows you to generate schemas, editors, and generators for domain specific languages. This session is an in-depth demonstration of how to create domain specific languages that have their own syntax, editors, and code generation.
Key Session Points: 1. Our Target Languages 2. Building Schemas 3. Building Editors 4. Building Generators 5. What does the future hold?
By Ted Neward
There's a set of fallacies that every enterprise developer has fallen for at some point in their enterprise development lives, and unless they've come to realize it early enough, all cause big trouble and painful learning experiences in the long run.
In this talk, we'll go over the Enterprise Fallacies, discuss why they're so insidious and easy to fall into, and how developers can go about making sure they avoid them in the future. Discussions will be relative to both .NET and Java, as well as the emerging Web services stack, as the Fallacies know no technical boundaries.
By Ted Neward
Security's become a hot topic among enterprise developers in recent years, but to many developers, security is still the white elephant in the middle of the room. Discussions about security usually begin with, "Uh, we'll worry about that later", or, "Start with two really large prime numbers.....". Security isn't as hard as developers make it out to be, but it is something that developers need to face and recognize.
In this talk, we'll extract the 10 Items on Security from Effective Enterprise Java and talk about them, giving developers the basic heads-up they need to have when building enterprise systems in Java.
By Venkat Subramaniam
Java introduced Generics in the 1.5 version (Java 5). What are the capabilities of Generics? How do you use it? Are there some gotchas in using it? In this example driven presentation, we will start at the basics of generics and look at its capabilities. We will then look at some of the under the hood details on generics implementation. We will then delve into the details of some of the changes to Java libraries to accommodate generics. Finally we will take a look at some restrictions and pitfalls that we need to be familiar with when it comes to practical and prudent use of generics.
Topics: • Need for Generics • Generics in Java • Bounded Parameters • Wildcard • Restrictions • Generics Implementation • Effect of Erasure • Java libraries changes • Pitfalls and pragmatics
Benefits: • Know your generics • See how to create your own generics • Understand issues with converting to genetics • Learn the limitations • Attain the wisdom • Decide if this if for your project
By Venkat Subramaniam
Do you know that unit testing is more of an act of design than verification? What are its benefits? How do we write effective tests? How does unit testing relate to evolutionary design? How does it help you with refactoring? When should you write your tests? What are the types of tests you could write? These are some of the questions that you would ask if you are interested in Unit Testing. What is a better way to learn than practicing it? In this session the attendees will participate in designing and developing a small yet full application. Instead of PowerPoint slides, you will learn from example. The code you help develop will be available for free download on the speaker's web site.
Topics: • Design ideas • Types of Tests • Identifying tasks • Fulfilling tasks • Order of tests • Handling success and failure • Layering of system • Test cases and Test Suite • Using JUnit • Quality of tests • Where to run and how often?
Benefits: • Learn how to write unit tests • Realize its benefits • See how it affects your design • See how you can develop robust system • It will change the way you write code
By Venkat Subramaniam
Is your code object-oriented? Developing with objects involves more than using languages like Java, C#, C++ or Smalltalk for that matter. From time to time, the OO paradigm stumps even expert developers. Agile programming becomes a mere act of hack if we code without knowing the OO principles. What are these principles – the ones that influence your design? In this presentation the speaker will present some of the challenges that are fundamental in nature. Then he will present OO Design principles and good practices for prudent development of OO code.
Topics: • Metrics of design • Good design vs. bad design • Perils of design • Principles for OO Design • Examples that illustrate the principles
Benefits: • Learn principles that lead to better design • Learn fundamentals that will change the way you will code • Gain insight into the design tools needed for agile development • Helps improve the quality of your system • Better your design skills
By Venkat Subramaniam
You are convinced that Test Driven Development is good for you and your project. You realize the benefits it has to offer. What's holding you back? All the code and components that your code so heavily depends on is most likely making you wonder if TDD is really for you. We will start out by looking at dependency and dependency inversion. Then we will discuss how mock objects can help separate our code from its dependencies.
In this presentation, we will take an examples oriented approach to utilizing mock objects. We will first hand toss a mock and see how our code benefits from it. Then we will take a look at using frameworks that can assist with the creation of mocks.
By Scott Davis
Hopefully your test plan involves more than, "Well, it compiled..." JUnit is fast becoming a required part of the modern Java developer's toolkit. Unit testing your Java classes is a great start, but your test plan shouldn't stop there.
This talk will introduce several additional testing tools for the web developer -- HttpUnit, Canoo WebTest, and JMeter. These tools allow you to test a live website with no changes to the production code. Even better, you can test sites that have been implemented in technologies other than Java.
You will see code examples and live demos of these tools in action. We'll talk about the differences between unit testing, functional testing, and performance/load testing. Come get "test infected" -- you'll never look at the development process the same way.
By Scott Davis
In this presentation, we'll explore the top four mapping sites and show you how to take advantage of their free services. MapQuest, Yahoo Maps, Google Maps, and MSN Virtual Earth all bring slightly different capabilities to the table. These sites allow you to create your own interactive maps with minimum effort and no previous mapping experience. They take care of hosting the mapping data and making it easy to manipulate -- all you have to do is bring a little bit of know-how to the party.
Thanks largely to Google, web mapping is experiencing a renaissance. Google's mission statement is, "... to organize the world's information and make it universally accessible and useful". They aren't specifically talking about web mapping, but the sentiment certainly applies. If you have data that naturally has a geographic element (a customer list with addresses, sales reports by regions, even a collection of favorite restaurants), today's websites make it easier than ever to display them on a map.
Even if you aren't specifically interested in creating your own maps, this presentation gives real-world examples of many industry hot-button topics -- SOAP vs. RESTful web services, JavaScript and AJAX, and a clear distinction between first generation web technology (Web 1.0) and what the pundits are calling "Web 2.0".
By Scott Davis
Frameworks? We don't need no stinkin' web frameworks. OK, so maybe that's overstating the case. Web frameworks do plenty of good things, but sometimes they can also be golden handcuffs. Too many web developers fall into the trap of thinking, "If it can't be done by my web framework, then it simply can't be done."
This presentation focuses on the cool things that you can accomplish by stepping out of your web framework and getting closer to the underlying technology. We'll take a detailed look at what really goes on during the request/response cycle, and how new techniques like AJAX allow you to break the mold. We'll look at the clever things you can do with MIME types, User-Agents, and HTTP Headers in general.
Old technologies like CSS, DOM, and JavaScript are experiencing a renaissance under the guise of new names like DHTML and AJAX. Google Maps and GMail are literally redefining our expectations of how rich a web application can be by using these technologies to their fullest potential. Come see what makes these sites tick, and how you can utilize the same techniques in your own site.
By Scott Davis
The full title of this talk is, "The Sound of One Hand Clapping, or How to Pair Program with a Single Programmer -- Scaling XP to Small Projects." Everyone talks about using J2EE for massive projects, but what about the lone wolf developer? Can they still apply the lessons learned from agile development methodologies to their everyday work?
XP is an ideal methodology for dealing with small business owners and entrepreneurs. Often times small projects suffer from the complete lack of good programming practices because heavy-weight methodologies don't scale down well. Heavy-weight methodologies can also be intimidating to the non-computer professional. XP scales well to small projects and allows the domain experts to participate in good programming practices (sometimes for the very first time).
By Scott Delap
Too often, Swing applications are slow, ugly, and hard-to-maintain. It turns out that it doesn't have to be this way. Swing can be used to create highly-responsive, beautiful applications that are very maintainable. If this isn't consistent with your own experience, don't feel bad; its not very obvious how to make Swing sing.
In this session, I explore three topics that lead to much better Swing applications:
- Proper Swing threading
- High-quality third-party Swing look-and-feels
- Good practices for coding Swing applications
In the threading portion of the session, I explain Swing's event handling architecture and its implications for Swing applications. Understanding this topic is crucial to creating highly-responsive Swing apps. I demonstrate how to use this knowledge in the form of many live-coded examples, and I show how frameworks like SwingWorker and FoxTrot can make this easier. Java's default look-and-feel, Metal, is awful (and in my opinion, the "Ocean" theme in JDK 5.0 doesn't do enough to improve it); you should stop using it immediately. But creating good-looking applications is sadly more than slapping in a look-and-feel; you must also take care to understand the principles behind attractive layouts. I spend the second part of this session exploring how to make your Swing applications look great through a combination of third-party look-and-feels and layout techniques.
By Scott Delap
Application developers often spend hours on the simple tasks of laying out a form, wiring components to objects, and validating the data entered. This is time that could be much better spend on the business problems your application is trying to solve. This session will show how to leverage open source libraries to take the work out of the form building process.
First you will be introduced to the JGoodies Binding and Validation libraries. Then you will see how a basic form builder built on top of these technologies can reduce the form building process from hours to minutes.
By Scott Delap
The Eclipse project's SWT GUI toolkit provides one of the only viable alternatives to Swing for creating so-called rich client applications in Java. Whereas Swing paints its own widgets and has distinguished itself with a complex (and often obtuse) API, SWT relies on the host operating system for widget rendering and sports a simple, clean API. If your goal is to create a Java application that "looks" like a normal Windows application (or OS X, or Linux), SWT will revolutionize your world. In this session, I introduce SWT from the ground up.
I start at a high-level, but quickly move into the details of SWT's API. By the presentation's end, attendees will have a solid understanding of SWT.
By David Geary
Okay, so you know a little about JSF. You understand managed beans, action outcomes and how to attach standard JSF validators to components in a JSP page.
But there is a great deal of functionality that the average web application supports that JSF doesn't provide out of the box. For example, wouldn't you like to have JSF automatically place asteriks in front of labels for required fields? You are going to implement client-side validation, which JSF does not support out of the box, aren't you? Of course, you're going to test your application, right? And don't forget to trap unauthorized use of the back button.
How do you do all of that stuff in a JSF application? If those are the kinds of questions that keep you up at night, then this session is for you. We will explore the outer reaches of JSF development to illustrate how you can bend your next JSF application to your will.
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 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
Web Services are message-oriented. This means that any application intention (the need for security, for transactionality, for reliability, etc.) must be included in the message and not just assumed as external context. The WS-Security specifications are very advanced and currently being used in the wild to create robust, secure web services.
This session will examine these specifications, including:
• WS-Security
• WS-Policy - for sharing enforcement and encryption strategies
• WS-Privacy - for agreeing on privacy policy for service usage
• WS-Encryption - for encrypting or signing all or part of a message
• WS-Trust - for creating a single-sign-on solution
• WS-Federation - works with WS-Trust
These specifications, plus others like WS-Addressing and WS-Notification, provide a platform for communicating security intent across multiple network layers and many platforms. Of course, these specifications only define modifications to the messagapplication author. We will demonstate these capabilities using the Axis toolkit and the J2SDK.
By Justin Gehtland
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.
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 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
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 Jason Hunter
Java's new Metadata facility introduced in J2SE 5.0 defines a way to attach decorations to classes, fields, methods, and even packages that can be extracted by the compiler or runtime tools to provide advanced functionality. Think of metadata as an extended @deprecated flag, or think of XDoclet++. In this tutorial session you'll learn how Metadata fits in the Java platform (and how it compares to the C# platform). We'll cover how to use the metadata attributes provided in the core J2SE libraries and how to write your own. We'll also show a bit of what's coming in JSR-181, tasked to define standard metadata attributes for web services.
Attendees should be skilled Java programmers ready to see what's possible in the latest release and learn to make the most of it.
By Jason Hunter
Web Caching is very important for high traffic, high performance web site but few people know all the professional-level strategies. In this talk I'll share some of the tricks of the trade, including advanced tips from Yahoo's Mike Radwin.
We'll start with the basics: using client-side caches, conditional get, and proxies. Then we'll talk about more advanced features: how best to handle personalized content, setting up an image caching server, using a cookie-free domain for static content, and using randomization in URLs for accurate hit metering or sensitive content.
Attendees should have experience or interest in how the web works and in cajoling the web into doing their bidding.
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.
By Jason Hunter
XQuery is a new language from the W3C that lets you query and manipulate XML -- or anything that can be represented as XML, such as relational databases. As a Java developer -- especially a server-side Java developer -- XQuery is key to searching and manipulating large XML repositories or performing any XML-centric task.
This talk introduces XQuery. I'll explain the XQuery language; I'll show how to call XQuery from Java; and as the creator of JDOM, I'll also explain when to use XQuery instead of JDOM, and when to use both.
Attendees should have an interest or need in managing large sets of XML, but need not have any past experience with XQuery. After the session, attendees will be able to program XQuery and know which implementations to trust.
By Jason Hunter
Open source isn't about a license, it's about human interaction and individual motivation. I've seen open source from all sides. I've been an individual contributor and a project leader. I've worked on commercial and open source efforts, and have both helped commercial projects go open and designed ways for open projects to absorb commercial codebases. I've been on the front lines in the Apache/Sun negotiations on open source Java that ended on the JavaOne keynote stage with Scott McNealy. In this talk, I'd like to share my favorite stories in and around open source and the lessons they teach us.
What it was like to take the servlet engine Tomcat from a Sun internal project to an Apache open source project
How Jakarta changed Apache's character
How not to think about Apache
The pros and cons of leading the JDOM project
Why JDOM is not part of Apache
Why my latest coding work isn't open source
How companies can best utilize open source and open source ideas
The past, present, and future of open source Java
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
Aspect Oriented Programming (AOP) enables modularizing implementation of crosscutting concerns that abound in practice: logging, tracing, dynamic profiling, error handling, service-level agreement, policy enforcement, pooling, caching, concurrency control, security, transaction management, business rules, and so forth. Traditional implementation of these concerns requires you to fuse their implementation with the core concern of a module. With AOP, you can implement each of the concerns in a separate module called aspect. The result of such modular implementation is simplified design, improved understandability, improved quality, reduced time to market, and expedited response to system requirement changes. Come to this session and learn all about how AOP can help you simplify developing complex systems.
AspectJ (http://eclipse.org/aspectj) is the leading implementation of AOP for the Java programming language. AspectJ is a new language as well as its implementation. The output produced by the AspectJ compiler is compatible with the Java byte code specification. Further, AspectJ is well integrated with the most commonly used IDEs, which makes the Java developer more productive.
This session is targeted at the developer with no or little familiarity with AOP and AspectJ. It will introduce AOP’s concepts and the AspectJ programming language, along with many examples and live coding to solidify the concepts learned. After attending the session, you will have a clear idea about AOP's value and its practical applications.
By Ramnivas Laddad
Aspect Oriented Programming (AOP) enables modularizing implementation of crosscutting concerns that abound in practice: logging, tracing, dynamic profiling, error handling, service-level agreement, policy enforcement, pooling, caching, concurrency control, security, transaction management, business rules, and so forth. Traditional implementation of these concerns requires you to fuse their implementation with the core concern of a module. With AOP, you can implement each of the concerns in a separate module called aspect. The result of such modular implementation is simplified design, improved understandability, improved quality, reduced time to market, and expedited response to system requirement changes. Come to this session and learn all about how AOP can help you simplify developing complex systems.
AspectJ (http://eclipse.org/aspectj) is the leading implementation of AOP for the Java programming language. AspectJ is a new language as well as its implementation. The output produced by the AspectJ compiler is compatible with the Java byte code specification. Further, AspectJ is well integrated with the most commonly used IDEs, which makes the Java developer more productive.
This session is targeted at the developer with no or little familiarity with AOP and AspectJ. It will introduce AOP’s concepts and the AspectJ programming language, along with many examples and live coding to solidify the concepts learned. After attending the session, you will have a clear idea about AOP's value and its practical applications.
By Ramnivas Laddad
Refactoring allows reorganizing code while preserving the external behavior, while AOP facilitates modularizing crosscutting concerns in a system through use of a new unit of modularity called aspect. Aspect-oriented refactoring synergistically combines these two techniques to refactor crosscutting elements. Individually, refactoring and AOP both share the high-level goal of creating systems that are easier to understand and maintain without requiring huge upfront design effort. A combination of the two -- aspect-oriented refactoring -- helps in reorganizing code corresponding to crosscutting concerns to further improve modularization that is easy to understand, highly consistent, and simple to change.
Aspect-oriented refactoring provides means beyond conventional refactoring techniques. While steps in conventional refactoring modularize code to a certain point, the use of AOP squeezes out the code that cannot be further refactored. Aspect-oriented refactoring offers substantial improvement to the code in a variety of situations: exception handling policies, local contract enforcements, resource management and optimization schemes, concurrency control, worker object creation, and so forth.
This presentation will examine fundamentals of aspect-oriented refactoring, a few common patterns, and a few examples in J2EE space. The presentation features live coding to illustrate the ideas learned.
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 Glenn Vanderburg
The Java Collections framework is a cornerstone of Java development. It's been a part of J2SE for six years now. Every Java developer knows it—how to create Lists, Maps, and Sets, how to put things into them and take things out, and how to iterate over the contents. But there's a lot more to the collections framework than that -- and very few programmers really know how to exploit the power that's just under the surface.
The basics of the collections classes are so simple that many developers haven't even thought to look for the additional power that's there. And it's not just built-in capabilities, either. The design of the collections framework makes possible several powerful techniques and patterns that can magnify your productivity, as well as helping you build systems that are efficient and scalable.
It may seem strange to give a talk on a framework that every Java programmer already knows. But in every project I've worked on for the past six years, I've seen a lot of code that uses the collections poorly. More often than not, that code was written by skilled programmers with significant Java experience. In this talk, you'll learn how to use the collections well, exploiting their full power—the little-known capabilities, the extensibility features, and powerful patterns such as wrappers, adapters, and decorators. We'll also cover some new features that slipped into Java 1.5, plus a few especially useful third-party collection implementations.
By Glenn Vanderburg
Most of the time, Java's automatic memory management works really well—it's one of the things that makes programming in Java a pleasant and productive experience, and it's nice that we don't have to worry about managing memory manually. However, although it's usually nice to ignore memory management, occasionally we have to pay close attention. Sometimes we need to take control of certain aspects of memory management. Sometimes Java programs do exhibit memory leaks, or unacceptably long garbage collection pauses, or very poor overall performance. But because Java's memory management is supposed to be "fully automatic," it can be difficult to find out what's really going on inside the VM.
Java memory management is just like most labor-saving simplifications: it works well most of the time, but for the weird edge cases when it doesn't work quite right, it can be a nightmare. This talk opens the hood, examining the inner workings of Java's memory system, including allocation and garbage collection. We'll look at how to control the memory system and interact with it, what's costly and what's not, how to tune the garbage collector and when to switch to a different GC algorithm, and other topics.
By Glenn Vanderburg
Every now and then, it's really helpful to be able to generate a new Java class at runtime. Some problems just can't be solved any other way. It's one of those troublesome tasks: it's fairly tricky to do, and you only need to do it occasionally—but when you need it, you really need it (and usually you need it yesterday). So you have to start essentially from scratch, learning about how to do it on the fly, under pressure.
This talk is designed to help. You may not face this problem for a while, so there's no point focusing on the arcane details that you'll soon forget. Instead, I'll give you what you'll need to quickly come back up to speed when the time comes. You will see some real bytecode generation, but more importantly we'll discuss the types of problems where runtime code generation can save the day, the variety of tools and techniques that are available, and a step-by-step approach to getting the job done. Finally, for those who may be working with more dynamic languages, I'll show how powerful runtime code generation can be when it's easy. We'll start simply, but before we're done we'll be pretty deep into the bag of tricks. Come along, and be ready for the next time you need more than what's in your JAR file.
By Glenn Vanderburg
With the sudden importance of Ajax, it's time to take JavaScript seriously. That means learning it the right way: looking at the fundamentals of the language and surveying its strengths and weaknesses, instead of just copying other people's poorly written examples.
JavaScript got a bum rap. It's almost universally derided among serious programmers for being a toy language, or for its strange characteristics, or bugs, or slowness, or because it's only good for adding useless window dressing to web pages.
But JavaScript is actually a very nice little language which is popping up everywhere these days (not just in Ajax apps). Sure, JavaScript is quirky, but its problems are mostly due to history, association, and misunderstanding. Especially misunderstanding. Let's face it: most developers learned JavaScript by looking at examples in web pages they found online, and few of those examples are paragons of JavaScript style. Other developers learned JavaScript from books, but the typical JavaScript book ignores the fundamentals of the language, instead focusing on examples and the fastest ways to do fancy web page tricks.
In this talk, we'll go back to the basics that most JavaScript resources omit. We'll talk about JavaScript as a language, learning its fundamental concepts and the simple rules that underlie the sometimes bewildering behavior.
By Glenn Vanderburg
We've been writing web applications now for 10 years, and they're still no fun. They're awkward and clumsy to write. Internally, they're overly complicated (which almost invariably means that they're buggy). Meanwhile, they're usually too primitive externally. To put it another way: the web programming model is so cumbersome for programmers that the users pay—through reduced features, clumsy interaction, bugs, and poor performance. There's a better way. I know -- who needs another web framework? But Seaside makes even Rails look primitive.
Seaside represents a new generation of web frameworks. Using it, web development is simple. A little code goes a long way. The code is simple and clear. There are powerful development tools that magnify your productivity. You can focus on making your web application good rather than having to strive with all your might just to make it work. It might not be perfect for your situation—it's written in Smalltalk, for one thing, which presents a barrier to adoption in many organizations. And it's not quite as scalable as more traditional web frameworks. But for most applications, it would drastically reduce the development effort while also increasing the usefulness and robustness of the application.
Sound too good to be true? Yeah, I thought so too. But it is true. In this talk, we'll see an extended demo of Seaside, and all the things that make it special. We'll discuss how it works, as well as its limitations. Finally, we'll look at other frameworks that are trying to bring the same ideas and techniques to other languages. Whether you try Seaside or not, a better way of developing web applications is in your future, and Seaside is showing the way.
