Open-source Java is a place of tremendous innovation and architectural freedom, but that freedom comes at a price. The Java shop has no single vendor to provide tooling, APIs, and recommended practices, which can leave technology leaders feeling ill-at-ease and can create a chaotic stack of ill-fitting technology assets. Several Enterprise Java vendors will offer you a helping hand, but only in exchange for lock-in, high license costs, and even an unacceptable lag behind new developments in the Java language and APIs. World-class buiness applications can be built with open-source Java tools, but only if the team building them has the right architectural savvy to make sound decisions. This class will show you how to assemble a world-class application stack from entirely free and open-source Java components, along with with the tools you need to deliver high producitivy to the business.
Tuition includes a one-year license to IntelliJ IDEA 8.1, the favorite IDE of many Java thought leaders. You'll learn how to create projects, refactor code, install plugins, and more.
Learn the basics of the leading Java-based dependency and build manager: how to create projects, build subprojects, retrieve dependencies from online repositories, build project documentation, and more.
IntelliJ comes with a good source-level debugger appropriate for limited parts of the development cycle, but there are other open-source tools to help you debug a Java application in-place in its production environment. Get x-ray vision and other debugging super powers by using BTrace and VisualVM.
You probably already use Subversion for source control, and you've probably heard the excitement about Git. Cut through the overstatements and hype to the real business value of the next-generation distributed SCM tool, as you learn a workflow that is natively compatible with an actual day in the life of a software developer.
Very few development shops write unit tests as they should—and they know it, because testing has succeeded in becoming a shared cultural value of the Java community. Learn the basics of JUnit, a very easy-to-use testing framework, and try to predict the reasons why you still might not write tests when the class is over (and how to avoid them).
Tests are good, but automating them is better. Hudson is a leading continuous integration server that will check your code out of its source repository, build it, run its tests, and perform other plug-in based operations on it on a continuous basis. Learn to set up Hudson on a spare server in your office.
MySQL may or may not be a candidate for production deployments in your organization, but it's still worth your while to know the ropes. It's very simple to install, administer, and use, and it finds its way into many open-source tools and products that might find non-production use on your team.
JDBC is the standard Java API for interacting with a database, but by itself it's unsuitable for all but the simplest applications. Your application code models your business domain with objects, not tables and queries, and being forced to program against any other idiom will result in code that is difficult to change or read. Hibernate is the de facto Java standard for mapping your well-factored domain objects onto tables in a relational database. Learn how to map simple classes, collections, inheritance hierarchies, and more.
Spring's first purpose is to make it easy for developers to use the Dependency Injection, or Inversion of Control, design pattern. You might write well-factored, testable code without this discipline in place, but learning to use DI as your default design discipline will make your code more beautiful, easier to change, easier to test test, and more of a pleasure to read.
JDBC may not be suitable for mapping a rich domain model onto a database, but it's still a valid technology choice for many applications. Spring rounds off its rough edges and makes your database code cleaner and simpler.
We learned how Hibernate can take our database interface where JDBC cannot, but that's not the end of the story. Spring's integration with Hibernate abstracts several ceremonial objects out of your view, makes exception handling easier, and consolodates configuration information in the right places. Combined with Spring's dependency injection container, we find a powerful set of tools and implied design patterns for an exceptionally clean and expressive data access layer.
Spring encourages the developer to write POJOs—Plain Old Java Objects—that are ideally not bound to Spring or any other Enterprise Java Container, but are simply Java objects factored to express the desired business functionality. Normally, to expose business objects as web services, you'd have to write specialized code to service-enable them. Spring makes this easy by taking away almost all additional coding and exposing your POJOs as web services.
Spring doesn't attempt to replace existing Java unit testing frameworks like JUnit, but it does help you write better unit tests. Its dependency injection framework naturally encourages you to write more testable code, and it provides some helpful, predefined mock objects to let you test methods that rely on infrastructure components that may not be present when running outside the container.
The industry leading open-source Java application server, Tomcat provides a just-right level of functionality for deploying web applications. Learn how to install, configure, and manage this critical piece of infrasturcture.
Worthy of a course of its own, Spring MVC is a web application framework tightly integrated with the Spring Framework. It provides conveniences for processing web forms, structuring web application flow, and interfacing the HTTP protocol to well-factored Java code. Learn the basics of how to process requests from a web browser, interact with your data model, and render HTML views back to the browser.