New England Software Symposium
September 11 - 13, 2009 - Boston, MA
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 11
| Ashland | Middlesex | Carlisle | Concord | |
|---|---|---|---|---|
| 12:00 - 1:00 PM | REGISTRATION | |||
| 1:00 - 1:15 PM | WELCOME | |||
| 1:15 - 2:45 PM |
Effective Concurrent JavaBrian Goetz |
On Being a Software ArchitectMark Richards |
Building External DSLsVenkat Subramaniam |
JSF 2.0: An IntroductionDavid Geary |
| 2:45 - 3:15 PM | BREAK | |||
| 3:15 - 4:45 PM |
The Java Memory ModelBrian Goetz |
Common AntiPatterns and How To Avoid ThemMark Richards |
Effective JavaVenkat Subramaniam |
JSF 2.0: Advanced TopicsDavid Geary |
| 4:45 - 5:00 PM | BREAK | |||
| 5:00 - 6:30 PM |
Are All Web Applications Broken?Brian Goetz |
Programming ScalaVenkat Subramaniam |
Transaction Pitfalls and StrategiesMark Richards |
Flex for Java DevelopersDavid Geary |
| 6:30 - 7:15 PM | DINNER | |||
| 7:15 - 8:00 PM | Keynote: Busy Developer's Guide to Iconoclasm by Ted Neward | |||
Saturday - September 12
| Ashland | Middlesex | Carlisle | Concord | |
|---|---|---|---|---|
| 8:00 - 9:00 AM | BREAKFAST | |||
| 9:00 - 10:30 AM |
Garbage-collector-friendly programmingBrian Goetz |
The Busy Java Developer's Guide to Java Platform SecurityTed Neward |
Introduction to JMSMark Richards |
Cleaning up Code SmellVenkat Subramaniam |
| 10:30 - 11:00 AM | BREAK | |||
| 11:00 - 12:30 PM |
Stupid JIT TricksBrian Goetz |
Testing with dependenciesVenkat Subramaniam |
Advanced Topics in JMSMark Richards |
The Busy Java Developer's Guide to Advanced Platform SecurityTed Neward |
| 12:30 - 1:30 PM | LUNCH | |||
| 1:30 - 3:00 PM |
What's new in SpringCraig Walls |
GWT fu, Part 1David Geary |
Tackling Concurrency on the JVMVenkat Subramaniam |
The Busy Java Developer's Guide to CollectionsTed Neward |
| 3:00 - 3:15 PM | BREAK | |||
| 3:15 - 4:45 PM |
Beyond JUnit: Powertools for Test-Driven DevelopmentCraig Walls |
The Busy Java Developer's Guide to Java7Ted Neward |
Groovy XML Ninja SkillsScott Davis |
GWT fu, Part 2David Geary |
| 4:45 - 5:45 PM | BIRDS OF A FEATHER SESSION | |||
Sunday - September 13
By Ted Neward
History is littered with the stories of iconoclasts--people who truly stood out as pioneers, lateral thinkers, and in some cases, outright heroes--and their successes and failures. From the baseball management vision of Branch Hickey to the glassblowing vision of Dale Chihuly to the engineering design vision of Steve Jobs, iconoclasts have changed our world in subtle and profound ways, sometimes loudly, sometimes quietly.
For an industry that seems so ripe and so rife with "special personalities", it would seem that programming is tied up deeply with iconoclasm. But what defines the iconoclast, what demarcates the "true" iconoclast from the mere pretender, and how can we use the characteristics of the iconoclast to change our own immediate surroundings for the better?
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
So you know the platform security model, and now you want to use it in new and interesting ways, like creating a custom Policy implementation, a custom Permission, or create a custom security context in which code will execute. Perhaps you even wish to make certain objects accessible only to those with the right permissions, or cryptographic key. Nothing could be easier, despite Java security's reputation as a dark and arcane place.
In this presentation, we'll pick up where the "Platform Security" talk leaves off, and demonstrate how to engage the security model of the JVM at a much deeper level, regardless of your favorite programming language: Java, JRuby, Groovy, Scala, ....
Prerequisite: The Busy Java Developer's Guide to Platform Security
By Ted Neward
For so many Java developers, the java.util.* package consists of List, ArrayList, and maybe Map and HashMap. But the Collections classes are so much more powerful than many of us are led to believe, and all it requires is a small amount of digging and some simple exploration to begin to "get" the real power of the Collection classes.
In this presentation, Java developers will see the basic breakdown of the Collection API designs, the relationship of the interfaces to the implementations, how to create a new Collection implementation, and how the new Collections introduced as part of JSR-166 (the concurrency JSR) and Java6 make their programming lives easier.
By Ted Neward
Even though the Java 7 JSR has yet to be formed, some interesting things are beginning to emerge from Sun about what Java7 may include when its formal release contents are finally made public.
In this presentation, we'll examine some of the forthcoming details, including some of the JSR-166 "add-ons" like the Fork/Join framework, some of the proposals for extensions to the JVM to support dynamic languages, and the so-called "closures" proposals circulating around.
By Mark Richards
One way to stop a conversation dead while at a party or gathering is to mention you are a software architect. Why? Because it takes about an hour (complete with Powerpoint slides) to explain what you do for a living. By then the person you are talking to is so bored they would rather sit in a corner licking nine-volt batteries. The problem is that no one inside or outside our industry really knows what a software architect is or what they do. In this highly interactive (and slightly humorous) session we will take a deep dive into the role a software architect plays in the IT industry. We will explore the characteristics an architect needs to have, and the elements that make a good architect and a bad architect. Through amusing antidotes and real-world examples, we will see how to become an effective software architect and help shape the industry in terms of the role and title of software architect.
Agenda During the introduction we will talk about the roles an architect plays, architect certification, and the decisions an architect typically makes. We will then take a deep dive into the qualities of a software architect, including Leadership and Communications, Technical Knowledge and Breadth, Domain Knowledge, and Methodologies. Interspersed into the mix will be some amusing anecdotes of my experiences as an architect, with a few jokes and humor thrown in for good measure
Prerequisite: None
By Mark Richards
In the book "97 Things Every Software Architect Should Know" (O'Reilly, 2009) I wrote about the importance of design patterns as a useful means of communication between architects and developers. Equally important to patterns is an understanding of AntiPatterns - things that we repeatably do that produce negative results. AntiPatterns are used by developers, architects, and managers every day and are one of the main factors that prevent progress and success. In this session we will look at some of the more common and significant development and architecture antipatterns. Through coding and design examples, you will see how these antipatterns emerge, how to recognize when the antipattern is being used, and most importantly, how to avoid them. By attending this session, you will be part of a movement to reduce the AntiPattern catalog from hundreds of entries to only a few.
Agenda - What are anti-patterns? - Factors that cause anti-patterns - Common software and architecture anti-patterns
I have selected 7 of the most common anti-patterns I see continually in the industry and in my travels. We will be going into the details of each of these anti-patterns.
Prerequisite: None
By Mark Richards
In previous years I have given sessions related to my book "Java Transaction Design Strategies", where I have reviewed the basics of programmatic and declarative transactions and outlined the basic patterns described in the book. In this new session for 2009 I will focus on some of the pitfalls encountered while dealing with transactions and then how to develop an effective transaction strategy. I will start this session by describing and illustrating some of the common pitfalls I continue to see in both Spring and EJB. I will then describe four common transaction strategies you can use and implement, including a transaction strategy for high-speed transactions, a transaction strategy for client orchestration, a transaction strategy for use with API's, and finally a strategy for highly concurrent environments.
Note: This session assumes you know a little bit about transactions and have been using them in either Spring or EJB. It is not intended to be an introductory session on how transactions work. You can obtain a free PDF download of my transaction book at http://www.infoq.com/minibooks/JTDS to quickly come up to speed with transactions.
Agenda - Introduction - Common Transaction Pitfalls - API Transaction Strategy - Client Orchestration Transaction Strategy - High Concurrency Transaction Strategy - High Speed Transaction Strategy
Prerequisite: Java, Spring or EJB; some knowledge of transactions and JTA.
By Mark Richards
There's no doubt about it - messaging is quickly becoming a standard part of most application architectures, particularly as more and more companies struggle to find ways to integrate heterogeneous environments due to mergers, acquisitions, or to streamline existing application portfolios. The Java Message Service (JMS) API allows Java applications to implement messaging using a standard API, therefore removing the dependency of any particular messaging provider. In this introductory session we will take a look at the basics of messaging and the JMS API. I will start by discussing the different messaging models, the structure of a basic JMS message, and the JMS API interfaces and how they interrelate. Then through interactive coding I will show the basics of sending and receiving messages using the point-to-point messaging model and how to do request/reply processing. NOTE: this session is meant to be an introduction to messaging and JMS - no prior JMS or messaging experience is needed for this session.
Agenda: - Messaging Introduction - JMS Message Types - Primary JMS Interfaces - Configuring Queues and Topics - Sending and Receiving Messages - Request/Reply Messaging
Prerequisite: None
By Mark Richards
This session covers some of the more advanced features of JMS messaging, and is intended for those who are familiar with JMS and messaging in general. Some of the topics I will be covering in this session include message grouping (where I will demonstrate sending a large JPG image using messaging), transacted sessions, client-based acknowledgement, and some various messaging design considerations and things to watch out for from a design and coding perspective. I will be doing live coding demonstrations to illustrate the techniques described in this session. Although this session is entirely JMS provider agnostic, I will be using ActiveMQ, a popular open source JMS provider, during the live coding demonstrations.
Agenda - Details behind the acknowledgement modes - Message grouping / sending images and documents - Transacted sessions - JMS Design Considerations - Common Messaging Pitfalls
Prerequisite: Some knowledge of messaging and JMS would be helpful
By Nathaniel Schutta
Thanks to Ajax, JavaScript is cool again and developers are taking a second look at this much maligned language.
This session will give you an overview of this misunderstood language as well as opening your eyes to some of the excellent tools available to ease the pain of developing in this dynamic language.
By Nathaniel Schutta
We've all used web applications that had us screaming at their creators - unfortunately sometimes we're the ones being cursed. Believe it or not, there are some simple steps we can take to ensure that our users have a great experience.
We'll talk about the role of testing, easy ways to make a web site perform as well as where Ajax can help give a richer experience.
By Nathaniel Schutta
Being on a high performing team is a transcendent experience - unfortunately, many of us find more dysfunction than function. In this talk, we'll take a look at some of the common issues that face teams and discuss some ways of working towards a happy crew.
Being on a high performing team is a transcendent experience - unfortunately, many of us find more dysfunction than function. In this talk, we'll take a look at some of the common issues that face teams and discuss some ways of working towards a happy crew.
By Nathaniel Schutta
The single most important tool in any developers toolbox isn't a fancy IDE or some spiffy new language - it's our brain. Despite ever faster processors with multiple cores and expanding amounts of RAM, we haven't yet created a computer to rival the ultra lightweight one we carry around in our skulls - in this session we'll learn how to make the most of it. We'll talk about why multitasking is a myth, the difference between the left and the right side of your brain, the importance of flow and why exercise is good for more than just your waist line.
The single most important tool in any developers toolbox isn't a fancy IDE or some spiffy new language - it's our brain. Despite ever faster processors with multiple cores and expanding amounts of RAM, we haven't yet created a computer to rival the ultra lightweight one we carry around in our skulls - in this session we'll learn how to make the most of it. We'll talk about why multitasking is a myth, the difference between the left and the right side of your brain, the importance of flow and why exercise is good for more than just your waist line.
By Venkat Subramaniam
Domain Specific Languages (DSLs) are languages targeted at a particular problem and domain. They have context and are fluent. They help users of applications at various levels to easily communicate with your application. Developing DSLs, however, are not easy. You could easily get dragged into using parsers and tools with steep learning curve.
In this presentation, we will look at various options to create DSLs on the Java platform. We will focus on external DSLs–these give you the absolute flexibility to chose syntax, but involve the most work as well. We will look at various tools and techniques that can ease this development effort.
By Venkat Subramaniam
Java is a well established language, that has been around for more than a decade. Yet, programming on it has its challenges. There are concepts and features that are tricky. When you run into those, the compiler is not there to help you.
In this presentation we will look at various concepts that you will use in general programming with Java. We will discuss the issues with those and how you can improve your code. We will look at concepts you can do better and those you should outright avoid.
By Venkat Subramaniam
Scala is a static fully object-oriented, functional language on the JVM. While taking advantage of the functional aspects, you can continue to make full use of the powerful JVM and Java libraries.
In this presentation we will take a in depth look at what Scala is, its strengths, weaknesses, and why, when, and where you'd use it on your applications.
By Venkat Subramaniam
Projects often start out simple, but soon become complex and turn into a lose cannon. Organizations are struggling to maintain and evolve software. Poor code quality is a significant part of that problem. Improving the quality of code is critical to success of enterprise projects.
In this presentation we will discuss ways to identify code smell. We will discuss several code smells and how to clean it up. We will also discuss proactive ways to avoid that smell in the first place.
By Venkat Subramaniam
Testing is a key ingredient to the success of a project. However, testing becomes awfully hard when your application deals with dependencies and that is often the reality.
In this presentation we will discuss how to approach testing when the code has dependencies. We will discuss tools, techniques, languages, and principles that can help decouple, mock, and help us effectively test your application code.
By Venkat Subramaniam
In this presentation we will take a quick walk though the issues with concurrency and how the solutions provided in Scala and Clojure help address those.
The gaining popularity of multi-core processors has rekindled the concurrency question: How do you effectively implement multithreaded applications on the Java platform? The familiar approach in Java is to create threads and to manage access to shared mutable state using synchronized locks. This approach to concurrency is fraught with hard work and uncertainties. Have you marked the appropriate methods synchronized, did you decorate the relevant fields volatile, did you properly construct the mutually exclusive regions of code, and is there a potential for deadlock lurking in the code.
In this talk you'll learn about alternate ways to tackling concurrency on the JVM. One approach is the functional way, along with an actor based model provided in Scala, to deal with immutable state. This removes the problem at the root, since data can't change there is no issue of contention to contend with. Another distinct approach, provided in Clojure, is to protect access to mutable data, not using locks, but using transactional boundary. The Software Transactional Memory brings database like transaction model to in-memory data. In this presentation we will discuss the pros and cons of these approaches and how to effectively apply them.
By Craig Walls
In this session, I'll lead a guided tour through the latest that Spring has to offer. Whether you're a Spring veteran or a Spring newbie, there will be something new for nearly everyone.
It's been 8 years since Spring 1.0 was released. In that time it has gone from a modest open-source project to being a de facto standard Java application framework. Now, as Spring enters its 8th year, it continues its attack on Java complexity, packed with many new features such as:
- First-class REST support
- A new expression language
- More options for annotation-driven bean wiring
- Bean profiles
- Declarative caching abstraction
- Enhanced Java-based configuration
- A new "c:" namespace
- Unified property management
- And much more
In this session, I'll lead a guided tour through the latest that Spring has to offer. Whether you're a Spring veteran or a Spring newbie, there will be something new for nearly everyone.
By Craig Walls
Writing tests is more than just writing JUnit test cases and hoping that they'll pass when your project is built. If you want assurance that your code is sound and provides the desired functionality, then you'll want to test it from every angle and run those tests as frequently as possible.
In this session, we'll look at a few testing tools that you may not be all that familiar with, including:
- Infinitest : A continuous testing tool that reports test failures almost as quickly as you can break them.
- Mockito : A relatively new tool for mocking objects in tests.
- Concordion : A framework for writing FIT-like functional specifications, without the hassles of FIT.
- jqUnit and JSTester : A xUnit-like framework for testing JavaScript.
- Selenium : A framework for in-container testing of web applications.
If you're ready to elevate your testing prowess to the next level, come see how these tools can help.
By Craig Walls
In this session, we'll explore modular web application development using Spring-DM and OSGi. I'll dispel the myth that OSGi is hard and show you tips and tricks that make Spring-DM and OSGi development easy.
WAR files, the workhorse standard deployment unit for Java web applications, has been looking a little portly for a long time. Most WAR files contain not only servlets and JSPs, but are usually well-endowed with static content (such as CSS, JavaScript, and images), middle and backend support classes, and a WEB-INF/lib directory chock-full of third party libraries. Even simple web applications can carry around several megabytes worth of baggage.
Monolithic WAR files present some practical issues, including: - Every WAR file carries its own copy of embedded libraries, increasing the footprint of each web application. - Parallel development of application modules is hindered, as all modules ultimately are deployed as a single unit. - Application modularity itself is not enforced, allowing for tight coupling between application layers.
The solution to monolithic WAR files is rather simple: Break them into smaller, more easily managed modules. OSGi makes this possible--Spring-DM makes it easy.
Come see how to apply Spring and OSGi to be able to split web applications into pieces that can be developed, tested, deployed, and managed independent of each other.
By Craig Walls
Spring 3.0 introduced the Spring Expression Language (SpEL), an extremely powerful yet succinct way to wire non-trivial values into Spring beans. In this presentation, we'll explore SpEL in great detail and see how SpEL opens up a whole new realm of bean wiring possibilities.
Spring's brand of dependency injection is quite awesome. But there are times when simple bean references and static values won't cut it. Sometimes it makes more sense to wire bean properties with values that are evaluated dynamically at runtime.
That's where the Spring Expression Language (SpEL) comes in. SpEL is one of the most interesting of the many new features in Spring 3.0. With SpEL you can succinctly wire in values derived...
- ...from system properties
- ...mathematically
- ...from the values of other bean properties
- ...from the results of static methods
- ...from almost anything you can conjure up
Previously, most of these types of wiring could only be accomplished with more XML configuration or special helper factory beans. But with SpEL, the seemingly impossible is not only possible, but is quite easy.
In this example-driven presentation, we'll explore SpEL in detail and you'll learn the tricks of SpEL that will make you a bean wiring wizard.
By Scott Davis
"XML is like violence: if it doesn't solve your problem, you aren't using enough of it." (Anonymous)
XML is everywhere. Whether you are dealing with local configuration files (web.xml, struts-config.xml) or remote web services (SOAP, REST, RSS, Atom), the modern software developer needs to be able to request, slice, and dice XML with ease. That requires a set of razor-sharp tools that reduce the inherent complexity of the problem, not multiply it. Once you see XML tremble in fear at the awesome power of Groovy, you'll wonder what you ever did without it.
In this talk, we look at various Groovy tools to create, parse, and export XML. To read in XML, we'll explore the XmlSlurper and the XmlParser. To write out XML, we'll use the MarkupBuilder, StreamingMarkupBuilder, and the XmlNodePrinter. We'll go beyond simple Plain Old XML (POX) and demonstrate using namespaces, CDATA blocks, and more.
By Scott Davis
"The proof of the pudding is in the eating. By a small sample we may judge of the whole piece." (Miguel de Cervantes Saavedra)
Most Grails tutorials demonstrate how easy it is to build simple CRUD (Create/Retrieve/Update/Delete) applications. While skinning a database with a web front-end is undeniably one beneficial aspect of Grails, it isn't the only thing Grails is good for. As you'll see here, Grails can be used to build a wide variety of web applications. You won't see a single HTML table with "edit" and "delete" links, I promise.
In this talk, we look at a variety of Grails applications that go beyond the simple CRUD metaphor -- blogs, wikis, maps, portals, and more.
By Scott Davis
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction." (Albert Einstein)
REST and Resource-Oriented Architecture (ROA) are popping up in technical discussions more and more frequently. Here, you'll see practical examples of adding RESTful web services to your Grails application.
In this talk, we look at the native support for REST that Grails offers on the server side. We'll also take advantage of the networking and XML strengths of Groovy to build out a simple but powerful REST client.
By Scott Davis
"The challenge of modernity is to live without illusions and without becoming disillusioned." (Antonio Gramsci)
There are plenty of sarcastic "Web 2.0" checklists out there -- be perpetually in BETA, when in doubt add rounded corners, etc. While we can all laugh at the superficial aspects of the Web 2.0 revolution, there are plenty of serious aspects to it as well. Is your website mash-up friendly or hostile? Do you tell your visitors when things change (via RSS or Atom syndication), or do you expect them to check in daily for updates? Is your website a silo or a part of a larger ecosystem?
In this talk, we discuss what makes a "modern shiny Web 2.0" website look the way it does. But we go beyond simple look and feel as we catalog the common features in modern websites and show you how to implement them yourself.
By Scott Davis
"Tests don't break things; they dispel the illusion that it works." (Anonymous)
In this era of "Test-First" and "Test-Driven" development, the modern software engineer knows that testing is no longer an optional part of the process. You need to have the best tools at your fingertips: a set of utilities that maximize your results with a minimum of effort. Groovy offers Java developers an optimal set of testing tools.
In this talk, we use EasyB to gather user stories as executable documentation. We look at GroovyTestCases -- a drop-in replacement for JUnit TestCases that expand the pool of helpful assertions. We'll explore mocking and stubbing with Groovy. And we'll finally go public with Groovy's privacy "issues".
By David Geary
This session introduces JSF 2.0 fundamentals, with emphasis on new features in JSF 2.0.
JSF 2.0 has been a long time coming, but now that it's here, it boasts an impressive set of improvements over JSF 1.X, including standardization of Facelets as the default display technology, a much richer event model, and built-in support for Ajax. Come to this session to see how you can use Java's standard web application framework to create industrial-strength web applications.
This session will cover the following features of JSF 2.0:
Resources Using Groovy System events Bookmarkable views Templating
Prerequisite: Familiarity with JSF, or other component-based frameworks
By David Geary
This session covers two of the most important features of JSF 2.0: composite components and built-in Ajax.
JSF is a component-base framework. Components are a powerful reuse mechanism, but they were rendered nearly inconsequential in JSF 1.X, because components were so difficult to implement.
JSF 2.0 makes implementing cusomt components easy with a new feature that builds on Facelets and the new resource capabilities in JSF 2.0: composite components. This session shows you how to implement your own components with JSF 2.
Additionally, this session covers the built-in Ajax that comes with JSF 2.0. Come to this session to see how you can easily implement custom components with integrated Ajax capabilities.
Prerequisite: Familiarity with JSF, or other component-based frameworks. Familiarity with Ajax. This session builds on the JSF 2.0 Introduction talk, so it is helpful, although not required, if you attend the intro talk before coming to this session.
By David Geary
An introduction to Flex for Java developers.
Want to develop expressive web applications? Them come to this session and see what Adobe's Flex is all about. Flex has lots of similarities to Java-based web development, so you'll find it easy to learn, and powerful to use. Come to this session if you want to take your web application user interface to the next level.
This session will cover:
An introduction to Flex ActionScript, HTTPService, and data binding Drag and drop Components View state Integrating with Java back ends
Prerequisite: Familiarity with Flex and at least one other web application framework
By David Geary
Learn to implement web applications with GWT.
Google Web Toolkit lets you create killer Java-based web applications using familiar Swing and AWT idioms. This session will introduce you to GWT and teach you the fundamentals of using this cutting-edge framework for creating rich user interfaces that run in a browser.
For most of this session, and the session that follows--GWT fu, Part 2--I will live code a desktop-like, ajax-based, web application that illustrates the awesome power of GWT. In this session, I will cover the following topics:
Widgets Remote procedure calls and database access Event handling Ajax testing
Prerequisite: Familiarity with a component-based framework, preferably a desktop application framework
By David Geary
Learn to do amazing stuff with GWT.
This session picks up where GWT fu, Part 1 left off. In this session, I will continue live-coding the Places application. In taking the Places application to its exciting conclusion, I will cover the following advanced aspects of GWT:
Dialog boxes Sinking events DOM elements Working with HTML Modules Image loading and busy cursors Event previews Timers
In this session, I focus primarily on implementing a viewport widget in a custom module, and using that widget in the Places application. When I'm done, we'll have a very cool web application that shows the awesome potential of Google Web Toolkit
Prerequisite: GWT fu, Part 1 is not a prerequisite for this session, but it will help if you have some familiarity with GWT.
By Brian Goetz
The Java programming language has turned a generation of applications programmers into concurrent programmers through its direct support of multithreading. However, the Java concurrency primitives are just that: primitive. From them you can build many concurrency utilities, but doing so takes great care as concurrent programming poses many traps for the unwary.
Based on the principles in the best-selling Java Concurrency in Practice, this talk focuses on design techniques that help you create correct and maintainable concurrent code.
Presented in the style of Effective Java, this talk offers bite-sized items for effectively writing concurrent code, divided into three categories: writing thread-safe code, structuring concurrent applications, and improving scalability.
Writing thread-safe code: - Encapsulate your data - Encapsulate any needed synchronization - Document thread-safety intent and implementation - Prefer immutable objects - Exploit effective immutability
Rules for structuring concurrent applications - Think tasks, not threads - Build resource-management into your architecture - Decouple identification of work from execution
Rules for improving scalability - Find and eliminate serialization
By Brian Goetz
What's the worst thing that can happen when you fail to synchronize in a concurrent Java program? Its probably worse than you think -- modern shared-memory processors can do some pretty weird things when left to their own devices.
Java was the first mainstream programming language to incorporate a formal, cross-platform memory model, which is what enabled the development of write-once, run-anywhere concurrent classes. It is the Java Memory model that defines the semantics of synchronized, volatile, and final.
However, because the most commonly used processors (Intel and Sparc) offer stronger memory models than is required by the JMM, many developers frequently use synchronization and volatile incorrectly, but have been insulated from failure by the stronger memory guarantees offered by the processor architecture they happen to be deploying on. (The infamous "double checked locking" idiom is an example of this sort of error.)
Understanding the Java Memory model is key to using the core concurrency primitives (synchronized and volatile) to develop thread-safe, efficient concurrent classes. We?ll cover what a memory model is (and why we should care), what synchronization really means, and what can really go wrong when we fail to synchronized correctly.
By Brian Goetz
Many developers believe that web frameworks "take care of" the details of concurrency, but this is only because most web applications make limited use of state. Stateful web applications also need to be careful about hazards like races. This talk will use the Java Memory Model to analyze common patterns of state management in web applications.
This talk builds on the concepts developed in The Java Memory Model to explore concurrency pitfalls in typical web and desktop Java applications. We'll see how common patterns for maintaining state in Java applications expose subtle vulnerabilities, and explore design techniques for building more robust applications as well as techniques for auditing typical server-side code for potential concurrency hazards.
Prerequisite: The Java Memory Model
By Brian Goetz
To many developers, garbage collection is black magic. Accordingly, there are is a lot of conflicting advice about what is good or bad for the garbage collector. In this talk, I look at how garbage collection is implemented in the HotSpot VM, and techniques for writing programs that exhibit good garbage collection behavior. Surprisingly, many of these techniques coincide with writing good, clean code.
This presentation covers: - Basics of garbage collection in HotSpot - Where the performance costs are in garbage-collected systems - Coding techniques for reducing GC costs - Finalization - Techniques for tracking down "memory leaks"
By Brian Goetz
Ever wondered what happens to your bytecodes when they're executed by a Java Virtual Machine? This talk provides a peek "under the hood" of modern JVMs, exploring dynamic compilation, speculative optimization, garbage collection, and some hardware-specific optimizations.
While the earliest JVMs were interpreted, and as such got a bad rap for performance, the VM approach to program execution provides many avenues for optimization that are not possible in traditional, statically compiled languages. This talk attempts to give a sense of just what the JVM can do to squeeze extra performance out of typical Java programs.
A few important optimizations will be discussed in detail, using examples of
java code to show how the JVM makes common operations fast, or how it
transforms your program into something completely different that produces the same
result--in less time.
Topics include:
- synchronization - why uncontended locks are (almost) free
- compilation - how dynamic profiling, inlining, escape analysis and other techniques allow code transformation
- memory management and garbage collection
- other optimizations - exploiting NUMA architectures, using large pages
By Stuart Halloway
Teams adopting agile should begin at a tactical level, but they shouldn't end there. The Agile Manifesto operates at many different levels. Learn to apply the principles of agile at a strategic level. Otherwise you can have a great agile ground game and still lose.
Many programming teams now embrace agile at the tactical level, which is the right place to begin. Applying the ideas in the Agile Manifesto, good teams embrace practices like
- story point estimation
- burndown tracking
- technical expertise
- behavior-driven development
- daily standups
- pair programming
- continuous integration
- spiking
- refactoring
- customer always available
- well-understood roles
The Agile Manifesto can be applied at a strategic level, too. However, the tensions are different. Feedback cycles are longer, objectives and results are less clear, and roles and relationships are unknown or changing. In this talk you will learn how to apply agile at the strategic realm, using practices like:
- measure the immeasurable
- pair everything
- choose meaningful standards
- build for tomorrow (but not next year)
- retrospect well
- spot the trends
- use the right medium
- want to succeed (not as obvious as it sounds!)
With the right practices in place, agility can help you choose objectives, as well as attain them.
By Stuart Halloway
Agile teams manage change and risk by apapting. But to adapt, you must identify opportunities for change and take them. Retrospectives are a fun, cost-effective way for your team to learn and change.
In this talk, we will begin by conducting a mini-retrospective, so that you get a feel for the basic process. Next, we will review the core principles of a retrospective, and use these principles to compare and contrast a variety of retrospective activities from the book Agile Retrospectives.
Next, we will explore a few retrospective activities in greater detail. These are some of the favorites that we use regularly at Relevance:
- team radar
- prioritize with dots
- learning matrix
Finally, we will talk about how to tune retrospectives to the needs of your team at a specific moment in time. No two retrospectives are alike, and an experienced facilitator adds value by adapting a retrospective to meet the current need.
By Stuart Halloway
In this talk, we will explore and compare four of the most interesting JVM languages: Clojure, Groovy, JRuby, and Scala. Each of these languages aims to greatly simplify writing code for the JVM, and all of them succeed in this mission. However, these languages have very different design goals. We will explore these differences, and help you decide when and where these languages might fit into your development toolkit. For more information see http://blog.thinkrelevance.com/2008/9/24/java-next-overview.
As we reach the middle of our second decade of Java experience, the community has learned a lot about software development. Many of our best ideas on how to use a Java Virtual Machine (JVM) are now being baked into more advanced languages for the JVM. These languages tend to provide two significant advantages:
- They reduce the amount of ceremony in your code, allowing you to focus on the essence of the problem you are solving
- They enable some degree of functional programming style. Think of it as a dash of verb-oriented programming to spice up your noun-oriented programming.
In this talk, we will explore and compare three of the most interesting new JVM languages: Clojure, Groovy, JRuby, and Scala. Each of these languages aims to greatly simplify writing code for the JVM, and all of them succeed in this mission. However, these languages have very different design goals. We will explore these differences, and help you decide when and where these languages might fit into your development toolkit.
By Stuart Halloway
Find out why Clojure is Java.next:
- Clojure provides clean, fast access to all Java libraries.
- Clojure provides all the low-ceremony goodness you know and love from dynamic languages such as Ruby and Python.
- Clojure includes Lisp's signature feature: Treating code as data through macros.
- Clojure's emphasis on immutability and support for software transactional memory make it a viable option for taking advantage of massively parallel hardware.
Clojure is a dynamic programming language for the Java Virtual Machine, with a compelling combination of features:
- Clojure is elegant. Clojure?s clean, careful design lets you write programs that get right to the essence of a problem, without a lot of clutter and ceremony.
- Clojure is Lisp reloaded. Clojure has the power inherent in Lisp, but is not constrained by the history of Lisp.
- Clojure is a functional language. Data structures are immutable, and most functions are side-effect free. This makes it easier to write correct programs, and to compose large programs from smaller ones.
- Clojure simpli?es concurrent programming. Of course, Java itself has pretty good concurrency support. But, there is wide agreement that lock-based concurrency is dif?cult to use correctly. Clojure provides alternatives to lock-based concurrency: software transactional memory, agents, and dynamic variables.
- Clojure embraces Java. Calling from Clojure to Java is direct, and goes through no translation layer.
- Unlike many popular dynamic languages, Clojure is fast. Wherever you need it, you can get the exact same performance that you could get from hand-written Java code.
By Mark Johnson
The factory patterns and callbacks have been around for a long time as a technique to provide flavor specific code variations. But they are awkward and hard to update. Enter Groovy closures. Imagine having the ability to inject different coding flavors using code closures. If you need a different flavor, then just pass a different code block. Now imagine that all of this works on the JVM!
This session will use hands on examples to explore how to use and create closures. In addition, during the discussion we will also discuss when it is appropriate and inappropriate to use closures in your applications.
By Mark Johnson
Once you leave academic "hello world" projects, software development is full of unknowns which result in the high rate of project failure we see too often in industry. This presentation will cover 10 principles of software risk management necessary for project success.
During the discussion we will cover topics such as pragmatic approaches to risk capture, getting past resistance to publish risks, prioritizing risks, methods of documenting and monitoring risks to name just a couple. While this presentation is targeted to the Technical Lead and Development managers, it should also be of interest to developers and architects.

