Central Florida Software Symposium
August 24 - 26, 2007 - Orlando, FL
Session Schedule
We are committed to hype-free technical training for developers, architects, and technical managers. We offer over 44 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 - August 24
| Hollywood 1 | Hollywood 2 | Silver Screen 1 | Silver Screen 2 | |
|---|---|---|---|---|
| 12:00 - 1:00 PM | REGISTRATION | |||
| 1:00 - 1:15 PM | WELCOME | |||
| 1:15 - 2:45 PM |
JavaServer Faces: A Whirlwind TourDavid Geary |
The Productive Programmer: Practice (10 Ways to Improve Your Code)Neal Ford |
Groovy: The Next Generation of JavaScott Davis |
The Busy Java Developer's Guide to AnnotationsTed Neward |
| 2:45 - 3:15 PM | BREAK | |||
| 3:15 - 4:45 PM |
Killer JavaScript Frameworks: Prototype, Scriptaculous, and RicoDavid Geary |
Implementing SOANeal Ford |
Groovy and Java: The Integration StoryScott Davis |
Java6: Exploring MustangTed Neward |
| 4:45 - 5:00 PM | BREAK | |||
| 5:00 - 6:30 PM |
Ajaxian FacesDavid Geary |
Agile Project Management (With Just a Bit About Mingle)Neal Ford |
Real World GrailsScott Davis |
The Busy Java Developer's Guide to Performance and ScalabilityTed Neward |
| 6:30 - 7:15 PM | DINNER | |||
| 7:15 - 8:00 PM | Keynote: KEYNOTE: No, I Won't Tell You Which Web Framework to Use: or The Truth (with Jokes) by Scott Davis | |||
Saturday - August 25
Sunday - August 26
| Hollywood 1 | Hollywood 2 | Silver Screen 1 | Silver Screen 2 | |
|---|---|---|---|---|
| 8:00 - 9:00 AM | BREAKFAST | |||
| 9:00 - 10:30 AM |
Making Architecture Work Through AgilityMark Richards |
Debugging and Testing the Web TierNeal Ford |
Ruby for Java programmersBruce Tate |
The Secrets of GORMScott Davis |
| 10:30 - 11:00 AM | BREAK | |||
| 11:00 - 12:30 PM |
Intro to Java Persistence API (JPA)Mark Richards |
Advanced SeleniumNeal Ford |
Rails for Java ProgrammersBruce Tate |
Enterprise Security with SpringMark Fisher |
| 12:30 - 1:15 PM | LUNCH | |||
| 1:15 - 2:15 PM | EXPERT PANEL DISCUSSION | |||
| 2:15 - 3:45 PM |
Advanced Java Persistence API (JPA)Mark Richards |
Building DSLs in Static and Dynamic LanguagesNeal Ford |
The Zen of RESTScott Davis |
The Busy Java Developer's Guide to Java Platform SecurityTed Neward |
| 3:45 - 4:00 PM | BREAK | |||
| 4:00 - 5:30 PM |
Java Persistence: Approaching the Silver BulletMark Richards |
Web2.0 and JavaMike Levin |
Mocking Web ServicesScott Davis |
The Busy Java Developer's Guide to Rules and Rules Engines Using JESSTed Neward |
By Neal Ford
No one writes perfect code: even the best developers fall into bad habits and traps. These topics from The Productive Programmer illustrate blind spots and helps you write better code.
It is too easy to get into a coding slump and not realize it. This talk revitalizes your relationship to code, forcing you to rethink some of the thing that you take for granted and showing new approaches to solving hard problems. It covers topics that range from improve the overall structure of your code to the way you write JavaBeans, with lots of examples. Everything in this talk may not be new to you, but I guarantee that you'll see some things that will make you reevaluate the way you think about your code.
Session Outline:
- TDD
- Static Analysis
- Good Citizenship
- getters and setters
- Constructors
- Static State
- YAGNI
- Occam and His Razor
- Question Authority
- DSLs
- JavaBean Specification
- SLAP
- New Languages
- Every Nuance
- Anti-objects
By Neal Ford
This talk avoids SOA hype and gets to the meat of the matter: how do you implement a Service-Oriented Architecture, what are the technological pitfalls, how do you test it, and what traps should you avoid. No marketecture: just implementation details.
No subject has been subject to more recent hype than Service-Oriented Architecture (I think it was because of a really good article in an in-flight magazine). For whatever the reason, the CxO has decided that we need one. It's up to you to implement it. This session is all about the technical considerations required to implement a service oriented architecture. It discusses technology choices, what is in (and out) of SOA's scope, how to implement transformations, routing, and other key services, how to version endpoints, and finally testing and debugging SOA. This session is marketecture free: it covers the details you need to implement this style of architecture.
Session Topics:
- What SOA means to those who must implement it
- Technology choices
- Routing
- The WS deathstar
- MOM
- Implementing transformations
- Versioning services
- Testing SOA
- Debugging SOA implementations
By Neal Ford
You can read books about Agile projects, but you must consult real-world experience to really understand the dynamics of agile project management. This session discusses agile management topics including estimation, project tracking, and useful metrics (and how to obtain them). And just a little about Mingle, the agile project tracking tool from ThoughtWorks.
OK, sure, you can read the XP Explained book. Now what? Agile project management in the real world requires understanding of not just the practices but why they work. This talk delves into several topics relevant to agile project management, including estimation, project tracking, accurate project metrics (and the practices that make them possible). This talk is designed to describe some of the nuances required to handle real agile projects, along with a demonstration of some of the artifacts ThoughtWorks uses to track projects (the most elaborate spreadsheet you've ever seen!). And, towards the end, I show how our experience has culminated into Mingle, the agile project tracking tool from ThoughtWorks with skinnable religion.
By Neal Ford
This session discusses how to use the Productive Programmer principles of acceleration, focus, and indirection to become a more productive programmer. This session describes these principles, but the primary focus of this session is demonstration of these principles with real-world examples.
In The Productive Programmer, David Bock and I identify 5 principles of productivity: this talk goes into great detail on 3 of those principles. The session defines the principles and describes their use, but the primary focus of this talk is on real-world examples of how you can use these principles to make yourself a more productive programmer. Acceleration covers keyboard shortcuts (including ways to make better use of them) in both IntelliJ and Eclipse. Focus describes how you can modify both the operating system and your code base to eliminate noise. Indirection shows how a simple concept can have profound effects, including how to share a common set of plugins across an entire Eclipse project. This talk includes tons of examples, all culled from real-world projects.
Session Topics:
- The Productive Programmer
- Acceleration defined
- Applying Acceleration
- Keyboard shortcuts
- Plug-ins
- Getting around in a hurry
- Launching stuff
- Focus defined
- Applying Focus
- Get out of the trees
- Searching several ways
- Code focus
- Avoiding the trash pile
- Indirection
- Applying Indirection
- links vs. shortcuts
- Sharing stuff
- Canonical plug-ins
- Environment isolation
Note: This is a companion talk to my other talk, Productive Programmer: Automation and Canonicality, but each talk is completely independent of the other -- they are not "Part 1" and "Part 2".
By Neal Ford
This session discusses how to use the Productive Programmer principles of automation and canonicality to become a more productive programmer. This session describes these principles, but the primary focus of this session is demonstration of these principles with real-world examples.
In The Productive Programmer, David Bock and I identify 5 principles of productivity: this talk goes into great detail on 2 of those principles. The session defines the principles and describes their use, but the primary focus of this talk is on real-world examples of how you can use these principles to make yourself a more productive programmer. Canonicality (the DRY principle from The Pragmatic Programmer) discourages repeating artifacts in projects. This talk shows effective ways to avoid this repetition. For example, I show how to reuse documentation via a Subversion hook that posts comments to a Wiki with an RSS feed. Automation refers to making the computer do more work for you. This talk includes tons of examples, all culled from real-world projects.
Session Topics:
- The Productive Programmer
- Automation defined
- Applying automation
- Scripting with...
- Win XP
- Bash
- Unix shell/cygwin
- Ruby
- Groovy
- Case Studies
- Canonicality defined
- Applying canonicality
- Hibernate and code generation
- Documentation Part 1
- Documentation Part 2
<cite>Note: This is a companion talk to my other talk, <b>Productive Programmer: Acceleration, Focus, and Indirection</b>, but each talk is completely independent of the other -- they are not "Part 1" and "Part 2".</cite>
By Neal Ford
As out applications have spilled from the server across the wire to the web tier, we increasingly must debug and test in the browser. This session covers debugging and testing tools for clients, JavaScript, and Ajax.
As the browser has become important again, our applications have spilled out of the server side to the web tier, and now we have to debug and test there. This session is all about debugging and testing the web tier. I discuss the tools Firebug, Venkman, the Developer's toolbar, and bookmarklets for debugging JavaScript, Ajax, and general browser behavior. Then, I discuss testing the web tier, first with unit testing via JsUnit, the user acceptance testing with Selenium and Sahi. This session is packed with examples and demonstrations, including real-world scenarios and pitfalls.
Session Topics:
- Debugging
- Firebug
- Venkman
- Developer's Toolbar
- Bookmarklets
- Testing
- JsUnit
- Selenium
- Sahi
By Neal Ford
This session discusses advanced Selenium techniques for testing web applications. It discusses techniques for both TestRunner and Remote Control Selenium, including data driven tests, creating branch points, testing Ajax applications, creating flexible tests, integration with continuous integration, and tons more.
By now, just about everyone has heard of Selenium, the revolutionary open source testing tool for web applications. This session takes Selenium to the next level, showing how to handle complex, real world scenarios in Selenium. It discusses Selenium setup for both TestRunner and Remote Control. Mostly, though, this session delves into specific techniques for testing real world kinds of behaviors in web applications. I discuss data driven tests, generated tests, decision points in tests, interactive Remote Control, integration with continuous integration, testing Ajax applications (including applications that only Selenium can test), and future directions. This session will turn up the volume on your testing to "11".
Session Topics:
- Generating random values
- Data-driven tests
- Remote control Selenium
- Setup
- Interactive mode
- Writing and running tests
- Decisions, decisions
- Test Reusability
- Integration with continuous integration
- Documenting tests
- Choosing the right mode for the job
- Extending Selenium
- Testing Ajax applications
- Testing data
- Testing dynamic user interface
- Specialized Selenium
- Future directions
By Neal Ford
This session discusses building Domain Specific Languages and DSL-style code in Java, Groovy, and Ruby. It discusses the different types of DSLs, details on how to implement them in Java, Groovy, and Ruby, and example problem domains where DSLs make sense.
You've heard all the hype for the past couple of years: Domain Specific Languages (DSLs) are going to take over the world. This session demystifies this topic in 2 ways: by providing concrete definitions for styles and applicability of DSLs and showing how to implement these different styles. I build up definitions for the different types of DSLs in static (Java) and dynamic (Groovy and Ruby) languages. Then, I discuss building DSLs as internal (i.e., built on top of an underlying language) and external (built using a preprocessor or grammar), with examples of each. Throughout this session, I discuss the applicability of this style of development and show targeted examples. I discuss fluent interfaces and techniques for building them, including problems. Incidentally, I show some cool language features of both Groovy and Ruby that make building DSLs easier in those languages.
Session Topics:
- Why DSLs
- Abstraction
- Internal vs. External DSLs
- Fluent Interfaces
- Building Blocks
- Internal DSLs
- In Java
- In Groovy
- In Ruby
- The Stopping Problem
- Best Practices and Applications
By Ted Neward
Want to get the soup-to-nuts story on Java annotations? In this presentation, we'll first talk about what annotations provide to the Java language. After setting ourselves a conceptual basis to operate from, we'll look at the language definition for Java annotations, from how to use them to how to define them. Finally, we'll take a look at the other side of annotations, consuming them at source-level (using "apt", the annotation processing tool), class-level (using a bytecode toolkit such as BCEL), and at runtime (using enhancements to the Reflection API made in Java5).
For an intermediate Java audience.
By Ted Neward
Mustang, the Java6 release, is out, and even if you're not looking to adopt the new platform right away, it's important to know what's there so you can start to plan for it. In this presentation, we'll go over the major new features of the Java6 platform, including the new integrated XML services capabilities (JAX-WS and JAXB), dynamic/scripting language support (javax.script), new JVM "attach" capabilities, new annotations supported by the javac compiler, and more.
For an audience comfortable with some prior Java experience, preferably familiar with Java5.
By Ted Neward
Wondering why your enterprise Java app just... sucks? Trying to figure out why you can't get more than 10 concurrent users online at the same time? Looking for ways to try and spot the slowdowns and ways to fix them?
In this talk, we'll look at the various things that can occur in an enterprise Java app (from the smallest web site to the largest multi-resource environment) to make your Java apps perform and scale less well than they should, and how you can work to correct them. We'll examine a variety of broad concepts to apply in architecture and design, and examine what factors make an enterprise application slow, then use a variety of tools to figure out how to remedy them.
By Ted Neward
Java's threading capabilities have been a part of the Java platform since its inception, yet for many Java developers, using Threads still remain a dark and mysterious art, and synchronization beyond the use of the "synchronized" keyword is almost unknown.
In this talk, we'll explore the Java "monitor" concept, and how a monitor isn't quite the same thing as a lock from other concurrency systems. We'll see how monitors can be used to perform signalling across threads, and then how the new java.util.concurrent API (introduced in Java 5) can be used to simplify the same sorts of tasks that used to require deep knowledge of the synchronized keyword. Finally, we'll answer that age-old question, "Why did the multithreaded chicken cross the road?"
Prerequisite: The Busy Java Developer's Guide to Concurrency (Part 1: Threads)
By Ted Neward
Java's threading capabilities took a serious turn for the better with the release of Java5, thanks to the incorporation of the java.util.concurrent packages, a set of pre-built components for thread pooling and execution, synchronization, and more.
In this presentation, we'll explore the Thread API, the Java threading model beneath it, and the enhancements made in Java5 to make it easier for Java code to walk and chew gum at the same time.
By Ted Neward
Permissions, policy, SecurityExceptions, oh my! The Java platform is a rich and powerful platform, complete with a rich and powerful security mechanism, but sometimes understanding it and how it works can be daunting and intimidating, and leave developers with the basic impression that it's mysterious and dark and incomprehensible. Nothing could be further from the truth, and in this presentation, we'll take a pragmatic, code-first look at the Java security platform, including Permissions, the SecurityManager and its successor, AccessController, the Policy class and policy file syntax, JAAS, and more.
For an intermediate-level audience.
By Ted Neward
If you've been keeping your ear to the ground, you may have heard some talk recently about "rules", "business rules" and "rules engines", but not necessarily any clear discussion on what they are, how to use or design them, or why they might be useful or important.
This presentation puts some concrete definition around what a "rule" is, how a "rule engine" like JESS (Java Expert System Shell) can enable your users to be more agile than they ever thought possible, where JSR-94 fits into both the J2EE and "lightweight" development environments, and how you can (finallY!) get out of the "infinite if-else game".
By Mark Richards
There has been a significant amount of buzz in the community and industry about the definition and role of an Enterprise Service Bus (ESB), particularly within the area of Service-Oriented Architecture (SOA). In this product-agnostic high energy session we will take a step back and consider whether we really need an ESB. Through real-world application and architecture scenarios we will see where an ESB would be helpful and where it would be overkill. We will take a look under the hood and find out just what an ESB is really doing, and take a quick look at JBI (JSR-208) and see the impact it has on the ESB worls. Then, using product-agnostic coding examples we will learn what an Enterprise Service Bus is supposed to do, then answer the question about whether the ESB is just a bunch of hype or if we really need it.
Agenda - Introduction - Handling Distributed Services Today - ESB Alternatives - Services - ESB Capabilities - Rolling Your Own: Possible Java Implementations - ESB Use Cases - JBI (JSR-208) - Summary and Q&A
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
As companies continue to change the way they do business, so must the IT systems that support the business. Changes due to regulatory requirements, competitive advantage, mergers, acquisitions, and industry trends require flexible IT systems to meet the demands of the business. Software Architects must therefore make their architectures more agile to meet the flexible demands of today's business. Through real-world examples and scenarios we will explore some of the challenges facing Software Architecture and discuss several concrete techniques for applying agility to both the architecture process and the technical architecture itself. We will also look at various architecture refactoring techniques, and discuss the pros and cons of each. By attending this session you will learn how to apply various agile techniques to improve your architectures and overcome some of the challenges facing software architecture in today's ever-changing market.
Agenda: - Introduction - Part One: Applying Agility to Architecture (Interactive) - Part Two: Agile Methodologies - FDD - Part Three: Agility and Architectural Refactoring
By Mark Richards
In addition to providing a simplified API, the new EJB3 specification (JSR-220) defines a standard ORM Java Persistence API (JPA) that is rapidly gaining in popularity. As you will see in this session, JPA bears a striking resemblance to popular ORM solutions like Hibernate and Toplink. In this session we will explore in detail the new Java Persistence API offered by JSR-220. We will start by discussing the overall design and architecture of the JPA and how the major components within JPA interact. We will then look at defining mapping objects (entities) and how to use the EntityManager to manage these entities. Through interactive coding examples we will investigate the pros and cons of detached entities and merging, how to map and use entity relationships (1-1, 1-N, N-1, and N-N), discuss Lazy Loading, and finally see how to use XML mappings rather than annotations. More advanced features of JPA will be covered in a separate session.
Agenda - Introduction - JPA Framework Overview - Defining and Mapping Entity Objects - Managing Entity Objects (EntityManager) - Detached Entities and Merging - Entity Relationships - Lazy Loading - Using XML Mappings - Summary
By Mark Richards
This session picks up where the Intro to JPA session left off and covers some of the more advanced topics in the Java Persistence API. Some of the topics covered in this session include switching persistence providers, versioning, compound keys, entity inheritance, and finally handling both simple and complex stored procedures. Some knowledge of JPA is recommended for this session as I will not be covering the basics of JPA (that is covered in a separate Intro to JPA session). Through a combination of slides and interactive coding I will demonstrate these advanced topics using both Hibernate and Toplink JPA.
Agenda - Introduction - Switching Providers - Versioning - Compound Keys - Entity Inheritance - Handling Stored Procedures - Summary and Discussion
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 Scott Davis
This is the year of the dynamic scripting language. Ruby (and Rails) has won the hearts and minds of many independent software developers. JavaScript is experiencing a renaissance thanks to the wild success of AJAX and websites like Google Maps. And Groovy (JSR-241) brings the same level of excitement and "scripting goodness" to the Java platform.
In this presentation, we take a very pragmatic "prove it in code" approach to learning Groovy. Since the syntax is (almost) identical to Java, we can dive right in from the very beginning, learning the "syntactic sugar" as we solve real world problems.
You'll learn how easy it is to install Groovy and get started working with it. You'll tackle file I/O, reading and creating text files. You'll create and parse XML and HTML. You'll interact with databases. You'll create Groovlets (servlets sprinkled with Groovy-dust). And finally, you'll get a brief introduction to Grails (hint: the 'G' is silent).
By Scott Davis
I'm attracted to Groovy because of its spirit of inclusiveness. Because it extends my platform of choice, not replaces it -- include a single JAR in your classpath and you are Groovy-enabled. Because it offers full bidirectional integration with Java. Because it offers a nearly flat learning curve for experienced Java developers. Come see how you can use Groovy to augment your existing Java codebase.
We'll look at calling Groovy from Java. We'll look at calling Java from Groovy. We'll look at compiling Groovy code, JARring it up, and deploying it alongside Java.
Groovy offers the same level of integration with Ant. We'll look at Ant tasks that allow you to include Groovy in your build process. Or maybe you'd prefer to use the Groovy AntBuilder and completely manage your build in code. The choice is yours. The important thing is Groovy works along side your familiar toolkit instead of forcing you to replace it.
By Scott Davis
Scott Davis is the Editor in Chief of aboutGroovy.com. The website, in addition to being, umm, about Groovy, is implemented in Grails. This talk shows you how to get started with Grails, but also talks about the experience of using it in a live, production web site.
Grails is a fully integrated, modern Java web development stack. In a single zip file, it includes a web server (Jetty), a database (HSQLDB), a build system (GANT, a Groovy/Ant hybrid), a logging framework (Log4J), and a unit testing framework (JUnit). It also includes mainstream libraries like Spring for dependency injection, Hibernate for Object/Relational mapping, Quartz for scheduling, and SiteMesh for page layout. For Ajax, Grails allows you to choose between three major included technology stacks: Prototype/script.aculo.us, the Yahoo UI library, and Dojo. Coupling the power of these mainstream libraries with the ease-of-use that Groovy offers, you have an unprecedented collection of technologies that will have you up and running in record time.
Grails maximizes the strengths of these familiar Java libraries while minimizing the XML jockeying it usually takes to get them all to play nicely with one another. It brings "Convention over Configuration" to Java. It uses Groovy as the language to glue the pieces together, which means that experienced JEE developers can learn Groovy in the context of libraries that they are already familiar with.
It is no exaggeration to say that you will have your first Grails application up and running in minutes. But Grails is more than about a quick start. In this talk, we'll look at ways to move beyond the default configurations. We'll deploy a Grails app to an external Tomcat instance instead of the included Jetty server. We'll move from the default HSQLDB database to MySQL. We'll include external JARs to bring new functionality to the mix.
By Scott Davis
"Which framework should I use?" is the question most often heard on the No Fluff, Just Stuff tour. It's well worth asking. Unfortunately, there is no simple answer. After years on the tour, most speakers have crafted a response that would make any Washington politician proud -- long on style, but essentially, "Well, it depends..."
In this humorous keynote, Scott Davis turns to unconventional sources for enlightenment. Could best-sellers like Blink, Freakonomics, The Tipping Point, The Paradox of Choice, and The Wisdom of Crowds finally solve the puzzle? In this "Da Vinci Code"-like romp through the conventional wisdom of the day, will the Holy Grail of web frameworks be revealed? Probably not, but possible side effects may include nausea, dry mouth, and insight into the eternal question of our industry.
By Scott Davis
Many demonstrations of new technology focus on the shiny turnkey features -- "Look at what this thing magically does for you out of the box!" While Grails has many gee-whiz scaffolding features, it is a framework first. A framework should "make easy things easy and hard things possible." (Apologies to the Perl community for co-opting their battle cry.) This talk focuses on the hard things that are possible with Grails, but require just a bit of glue code to implement.
Grails does a great job making 1:M relationships turnkey. Relating two tables is as simple as adding a line of code to each class. The web scaffolding generates combo-boxes automagically. M:M relationships, on the other hand, require a bit of elbow grease. We'll explore 1:M and M:M in Grails and how to best present them via the web interface.
We'll also look at things like how to best handle file uploads, how to manage user authentication, and even how to incorporate a Captcha into your forms. None of these are impossible, but each requires just a few additional strategic lines of code to handle.
By Scott Davis
GORM (the Grails Object/Relational Mapper) is one of the many high points of the Grails web framework. GORM is a thin Groovy wrapper over Hibernate, but that doesn't begin to capture excitement of what GORM brings to the party. Imagine being able to call book.save() and book.delete() on your Book class; calling Book.get(1) to retrieve your book from the database by primary key; using Book.list() to pull an ArrayList of Book objects into your application. Now imagine getting all of that functionality (and more) for free with each new class you define. No interfaces to implement. No abstract classes to extend. Persistence that is transparent, automatic, and simple to use: GORM.
Querying your data via GORM is a case study in the benefits of using a dynamic language. Queries like Book.findByAuthorAndTitle("Scott Davis", "Groovy Recipes") rule the day. For the really hard stuff, you can always get back to a more traditional SQL-based interface. We'll also explore Query-By-Example.
GORM allows you to model your objects in the database in a variety of ways. In addition to supporting the usual 1:M, 1:1, and M:M relationships, GORM allows you to flatten the model, breaking traditional normalization rules. (Just don't tell your DBAs about it...) Come see how GORM handles HashMaps, Arrays, and ArrayLists in your Groovy objects.
GORM can auto-generate your database schema from existing POGOs, but recognizes that not all development is greenfield development. GORM allows you to map existing tables to objects and arbitrary field names to POGO attributes. We'll also see how to bypass Hibernate altogether using EJB3 annotations.
If you are a Hibernate developer, you owe it to yourself to see how GORM makes a good thing even better. If you are a Groovy/Grails developer, come see how to get the most of your friendly neighborhood persistence framework.
By Scott Davis
Google quietly deprecated their SOAP search API at the end of 2006. While this doesn't mean that you should abandon SOAP, it does reflect a growing trend towards simpler dialects of web services. Google joins a number of popular websites (Yahoo, Flickr, YouTube, del.icio.us) that offer all of the benefits of web services without all of the complexity of SOAP.
REST isn't a specification or a framework -- it's a set of architectural principles. This means that you can begin using it immediately. No framework wars, no version mismatches. This talk demonstrates some of the more popular RESTful web services out there in the wild. It also shows you live examples of how to implement your own.
We'll look at the simplest form of REST -- GETful web services. We'll also look at more sophisticated RESTful interfaces that utilize all of the HTTP verbs (GET, POST, PUT, and DELETE) and MIME types. Finally, we'll look at Atom and the Atom Publishing Protocol -- the RESTful implementation that Google chose to replace its aging SOAP implementation.
By Scott Davis
In this talk, we'll survey the web services exposed by leading websites (Google, Yahoo, Amazon, eBay) and discuss how they can be easily mocked up for testing purposes and to aid offline development. You'll see working examples of RESTful, SOAP, and JSON web services, as well as strategies for unit and functional testing your asynchronous, service-oriented architecture.
As more software engineers add unit testing to their everyday development regime, the concept of mock objects is becoming increasingly popular. Mock objects proxy more complicated objects, fulfilling their doppelganger's interface and behavior for testing purposes. Coding to interfaces instead of implementations is a best practice that applies equally well to POJOs and Web Services.
Web Services, too, are being added to our toolkit with increasing frequency. Building a true service-oriented architecture brings with it new challenges: how do you code against an external service? If that service is metered, how do you develop iteratively without using up your production budget in tests? These questions and more are answered in this talk.
By Mark Fisher
Spring 2.0 has marked a major advance in the Spring Framework. While still maintaining backwards compatibility, this release adds quite a few new features. What are those features and how do they add value? Come by and see.
In this session we'll provide a practical tour of what's new in Spring 2.0. Spring 1.x users who are looking to upgrade to Spring 2.0 will love this session. If you're not using Spring already, this talk will give a great overview of the things you're missing out by not using Spring 2.0.
The talk will highlight new configuration strategies, Spring AOP, bean scoping, JPA support, JMS improvements, new Spring MVC features, VM languages, and much more.
By Mark Fisher
Spring 2.0 introduced support for Message-Driven POJOs meaning that it is now possible to receive JMS messages asynchronously and delegate the handling of those messages to simple objects even within a lightweight application running outside of any application server. If your POJO has a return value, it will automatically be sent to a response destination.
After a quick overview of Spring's JMS support, we will build a Message-Driven POJO sample application from the ground up. This will include sending a Message as a request and receiving a reply across separate JVMs. You will learn how to configure the Message-Driven POJO without writing a single line of messaging code. You will also learn how to configure the pool of concurrent consumers and integrate with Spring's transaction management. We will use the JMS namespace available as of Spring 2.5, and we will even explore the possibility of delegating to a Groovy-scripted object.
By Mark Fisher
Spring MVC is a powerful and flexible framework for building web applications. Its interface-based API promotes loose coupling, yet it also offers many convenient base classes for common functionality. Whether you use the base classes or roll your own, you will discover numerous strategies and extension points. This flexibility will be greatly appreciated once you are up to speed, but newcomers often wonder where to begin.
This session will introduce the core components in a breadth-first fashion focusing on the essentials. We will then build a simple Spring MVC-based webapp from scratch including implementation, testing, configuration, and deployment. Along the way you will see how to bootstrap a Spring-managed service layer, configure request handlers, render views, provide some validation logic, and even configure data-binding for a file-upload. We will round off the discussion with some best-practice guidelines and a quick "what next?" overview of some of the most important extension points.
By Mark Fisher
Spring Security (formerly known as 'Acegi') enables self-contained, consistent, and extensible solutions for securing your applications. Version 2.0 provides major enhancements including a domain-specific XML namespace, convention-based defaulting, and annotation support. This provides a significantly simpler experience for developers while still supporting the same degree of flexibility.
Spring Security's interceptor-based approach is non-invasive even when extended to accommodate domain-specific requirements. The two main security processes (authentication and authorization) are decoupled in order to provide flexibility across a wide variety of providers and strategies. This presentation will include an overview of Spring Security's pluggable authentication process and how it accommodates a wide range of possibilities including Database, LDAP, Single Sign On, and even an in-memory option for development and testing. We will then proceed to cover authorization where you will see its consistent approach for securing web requests and method invocations. Throughout the session, we will walk through a sample application that demonstrates Spring Security's core features.
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
An introduction to the popular Prototype JavaScript framework, and two frameworks built on top of Prototype: Scriptaculous and Rico.
Web2.0 is all about rich, interactive user interfaces (UIs), and these three frameworks provide the capabilities that you need to develop those UIs.
Prototype (prototype.conio.net) is a low-level JavaScript framework that adds significant features to JavaScript that make it easier for you to use the language and to incorporate Ajax calls in your applications.
Scriptaculous is a framework (script.aculo.us) built on top of Prototype that adds some pizazz to Prototype with features such as a wide array of special effects, animation, and drag and drop.
Rico is another framework (openrico.org) built on top of Prototype that, among other things, provides something known as behaviours, where you adorn plain-vanilla HTML with seemingly magical behaviours.
Come to this session and learn how to harness the power of these three frameworks.
By David Geary
JavaServer Faces is a perfect platform for implementing Web 2.0 interfaces with Ajax. This session explores how you can use these two potent technologies--JSF and Ajax--together to create applications that look and behave like desktop applications but run in the browser.
JavaServer Faces, with a mature component model and flexible lifecyle, is a perfect platform for implementing Web 2.0 user interfaces with Ajax. This session explores using JSF and Ajax to create applications that act like desktop applications but run in a browser.
We'll start with a quick look at implementing basic Ajax in a JSF application. Then, once your bloodthirst has been slaked, we'll dive deeper into Ajaxian Faces dynamics with a form completion demo that requires its implementor to understand two simple, but vital facts about JSF.
If you're savvy, you probably use client-side validation to augment your server side validation logic, which parenthetically, is no no-brainer in either of the leading web application frameworks, JSF or Rails. But anyway, client-side validation is old school. All the cool developers nowadays use Ajax to implement realtime validation, where you sneak a trip to the server as an unwary user types into your input fields. But to accomplish that, we'll have to dive even deeper into JSF, with concerns such as accessing view state and accounting for client-side state saving.
All of this Ajax development is great fun, but most of it is best relegated to components and frameworks, which are the topics that will wrap up our session. We'll see how to keep your JavaScript separate from your JSF components and how to pass JSP tag attributes all the way through to JavaScript. Finally, we'll take a look at Ajax4jsf, a JSF component library with a tag library that blends Ajax into JSF in a natural, intuitive way without having to write JavaScript.
As web developers, we've been handcuffed long enough by the shackles of Web 1.0 development. Come to this session and see the brave new world of Web 2.0 development with one of the hottest web application frameworks.
By David Geary
In this session, see how you can get Ruby On Rails-like productivity on the Java side of the house with this compelling combination of technologies.
JSF has been out for nearly three years now, and in many respects, the JSF specification has become a bit long in the tooth. Fortunately, the open source community has picked up the ball in a big way. In this 2-session presentation, we will explore three open source projects based on JSF--Seam, Facelets, and Ajax4jsf-- that will propel you into the stratosphere of productivity.
Seam is a framework from JBoss that combines the JSF and EJB3.0/Hibernate 3.0 frameworks into one component model. That means you only have to learn one framework to build compelling web applications.
This is the first of a two-part session, where we'll focus mostly on the Seam framework.
By David Geary
A continuation of a 2-session presentation on Seam, Facelets, and Ajax4jsf.
In the second part of this 2-session presentation, we'll turn our attention to Facelets and how you can use this compelling display technology with Seam.
We will also discuss Ajax4jsf and demonstrate how you can use that framework to create rich, interactive user interfaces for your JSF-based web applications.
By David Geary
Developing highly interactive web applications, for the most part requires knowledge of a wide array of technologies: HTML, CSS, JavaScript, XMLHttpRequest, JSP, JSF, etc.
With the Google Web Toolkit (GWT), Google turns that notion of development on its head. Instead, you implement Ajax applications by writing almost entirely in Java. You use an AWT-like API, which the Google compiler compiles to JavaScript that runs on the client.
In the early days of Java, application development with the AWT was relatively simple. You had to have a decent understanding of Java and AWT fundamentals, but once equipped with such knowledge, you could dive in and develop some impressive applications.
Ten years later, we have, in so many respects, gone significantly backwards. We've shoehorned technologies such as HTML into shoes for which they were never intended, and for our efforts, we have a mismatch of disparate technologies that one needs to knit together for a truly interactive web application.
This is the first session of a two-part presentation on the GWT, where I'll concentrate on GWT basics: implementing Ajax-enabled applications in Java, internationalization, testing, and remote procedure calls.
By David Geary
The second part of a 2-session presentation on the Google Web Toolkit.
In this session, we'll dive deeper into the GWT and explore some of it's more advanced aspects, such as implementing custom widgets, deploying your application in a servlet container, and implementing drag and drop.
By Mike Levin
Community, metadata, ranking and websites that grow over time are attributes of Web2.0. What else? Come to Orlando, breath some fresh Florida air and feel the sunshine!. Then, stroll over to the Central Florida Software Symposium and find out. Mike Levin will tell you all about Web2.0 and show you some snippets in Java.
We'll talk about mashups, semantics, custom RSS feeds based on smart filters, tags and tag clouds, and a glimpse into the future. We'll check out a fantastically popular Web2.0 website and do a feature walkthrough so you'll be clear about the Web2.0 features. You'll walk away with some facts and a few ideas that might inspire you to write your own Web2.0 website.
By Bruce Tate
ChangingThePresent is the increasingly popular charity donations portal that lets you give donation gifts instead of another pair of fuzzy slippers. The site is built and maintained under unusual circumstances. The team is distributed, with no more than two developers in any one place. The team uses agile techniques such as automated testing, heavy customer involvement, and a SCRUM-like release plan to deliver the core features.
ChangingThePresent was built with extraordinary speed, with a very effective development process. In this session, learn how to use agile techniques and common sense to build great software under high-pressure conditions. You'll learn how a typical day, or week, flows in a team with several high-powered developers. Learn about our core practices:
- How do we do tests?
- How do we manage requirements?
- How do we maintain tight communications with our customer?
- How do we manage the tension between junior and senior developers?
When the session is done, you'll have a better understanding of real techniques used to build a real-world site, and how you can apply them to many development jobs.
By Bruce Tate
Most conferences will try to tell you that the secret to good software development lies with a process, or a technology, or an architecture. Here's a dirty little secret. You can build working software with an outdated two tier archtiecture, a waterfall process and COBOL. How? By building a great team. These techniques were used to build one of the most unique and complex up and coming Ruby on Rails sites.
By far, the biggest factor in the success or failure of a software project is the quality of your team. Build a great team first, and great software will follow. In this session, we'll explore ways to build effective teams for modern software development. Whether you're a project manager or a technical lead, you need to know how to build the most effective team possible. In this session, we'll look at all aspects of team building, including
- What team sizes are optimal for software projects?
- What tools can help your team communicate?
- How does development process come into play?
- How do you build better software faster?
By Bruce Tate
With the explosion of Ruby on Rails and the Java community interest in features like closures and continuations, the Ruby programming language is an excellent one for all developers to know. As the JRuby virtual machine picks up steam, Ruby becomes a must language to understand. The best way to learn Ruby is to see it in action.
In this session, you'll learn the basics of the Ruby language, from a Java developer's perspective from a CTO who has taught and used both languages for production applications. You'll learn:
- The basics of the Ruby programming language, including the object model, collections, and closures.
- Basic metaprogramming techniques that allow Ruby programs to build domain specific languages
- JRuby characteristics that enable you to access Java classes from a Ruby interpreter
When this session is over, you'll have a stronger understanding of Ruby, and where you might put it into practice in your day to day job.
By Bruce Tate
The productivity of Ruby on Rails cannot be denied, but the explosion of Ruby on Rails left many developers, with hard commitments to Java deployment platforms, out in the cold. The continued evolution of JRuby can change that. JRuby is a Ruby implementation on the Java virtual machine. And yes, it runs Rails. In this session, you will learn Rails as it was meant to be learned, within the context of building a live site, from scratch.
We'll take the first hour or so to learn the basics behind Ruby on Rails. You'll see the basics behind each of the model, view, and controller layers. You'll see testing and debugging techniques, as well as the basic mechanics of building a basic web application. Then, learn how you can deploy those applications on Java environments with JRuby. Finally, you'll see some production code used to build a working web site.
