Latest JavaSE -
Object Oriented Design/Analysis -
Patterns and Method -
Testing and TDD -
Server (general) -
Web Tier -
Web Services -
JavaFX RIA -
Enterprise - General -
JVM Languages -
Java Development Tools -
Ian Darwin: Java Technology Resources
This is a list of some links that I have found useful. The master
version of this file lives at
My list of Java books at bookshop.org
(Disclosure: I am an affiliate of Bookshop.org and I will earn a commission if you click through and make a purchase).
More interesting to advanced developers and architects, but
actually important to us all. JCP is where new
official standards for Java get initiated, argued about, and
ratified. If you care about Java's future, be there.
New To Java ,
a resource page for younger or newer developers.
is "a Java IDE specifically designed to learn and teach
object-oriented programming and Java".
Gild - from U of Victoria
Gild is more aimed at classroom use than self-teaching.
This is a plug-in that requires you have
the leading full-strength IDE.
bills itself as "a combination between a framework for creating
two-dimensional grid assignments in Java and an integrated development
environment (class browser, editor, compiler, execution, etc.)
suitable for novice programmers. While Greenfoot supports the full
Java language, it is especially useful for programming exercises
that have a visual element. In Greenfoot, object visualisation and
object interaction are the key elements..."
"is a lightweight development environment for writing Java programs.
It is designed primarily for students, providing an intuitive
interface and the ability to interactively evaluate Java code. It
also includes powerful features for more advanced users..."
Sun's Java Tutorial -
several complete textbooks online for free; can also buy on paper.
- Teaching Mobile Computing to Generation C, by CS Professor
Just so you know that Java is not the only language around, check this list of
15 Languages Every Dev Should Know.
Most O'Reilly Books (https://java.oreilly.com/)
are excellent. O'Reilly has a rep as the best Java,
UNIX, Python, Perl, Mac OS X and MS-Windows technical publisher.
They published my
my Android Cookbook (revised 2017),
and the e-book
Checking Java Programs (2007).
- Head-First Java, by Kathy Sierra and Bert Bates.
A work whose creativeness helps people remember the material.
- Java in a Nutshell, O'Reilly.
A more concise introduction to the language and API, though less concise
than it used to be.
Shameless Obligatory self-promotion:
My recommended "second book on Java" is my own
Java Cookbook, O'Reilly, 2015.
- Sun/Oracle Java Coding Conventions HTML
- The Elements of Java Style
by Scott Ambler and a host of others, carries a lot of sound advice
on Java Programming.
Patterned after the Strunk and Kernighan books with similar titles
and just as concise,
this book is generally excellent and, at 120 pages,
one of the easier to read.
- Joshua Bloch's
Effective Java is among the best books on how to use the
constructs of the Java programming language.
- Josh and Neal Gafter have also given us
Java Puzzlers, a look into "Traps, Pitfals and Corner Cases"
of our favorite language.
Think you know all about Java? Check yourself with this book!
- Or, if you really want to know "all" about the Java
language, read the official Java
Language Specification (free download or buy on paper),
the definitive statement of how Java actually works.
- Some of the more fascinating but obscure corners
of Java are brought to light in Dr Heinz Kabutz's excellent
Java Specialists Newsletter.
Advanced topics about here!
Similarly, Java 8
See Learning Tree's one-day courses on Java 8
Part 1 and
Note that as of this writing (2016-12-29) ObjectMentor's domain has been taken over by a domain squatter
so the links in the "Unble Bob" article are broken. Here is his book list on Amazon:
Robert C. Martin.
My articles on Design Patterns
Object Oriented Technology: A Manager's Guide,
by David Taylor. At about 150 pages, the best overview
(the second edition is still in print, at 224 pages).
And definitely not just for managers.
- Design Patterns, by Gamma et al (the Gang of Four or GoF), Addison-Wesley.
The definitive Patterns book. Also in a CD-ROM version which includes
online implementations of the patterns.
Head First Design Patterns.
Highly regarded and, like other HF books, fun to read.
- The Original MVC Papers (from as far back as 1979!)
Core J2EE Patterns, by Deepak Alur et al, from Sun's consultancy;
lessons learned in designing effective apps within the constraints of the J2EE.
- Authors' site for
Core J2EE Patterns; more graphics but less details on the patterns.
- How the J2EE
Patterns group helped Sun re-write eBay.com
Sun Core J2EE Patterns Online - the complete text of the central portion of the book!
- Patterns in Java, by Mark Grand, John Wiley&Sons.
Volume 1 is good; the remaining volumes are said to be over-hyped.
- Work Flow Patterns (patterns in workflow process)
- Extreme Programming Explained, Kent Beck.
The definitive overview of Extreme Programming, the new "minimalist"
software development methodology.
- The Agile Alliance,
a membership-based organization for Agile practitioners.
- Agile Software Development Ecosystems,
by Jim Highsmith.
A good overview of the people and technologies behind XP and related "agile" methods.
Refactoring: Improving the Design of Existing Code,
by Martin Fowler, Kent Beck, et. al.
Just as the GOF book gives a vocabulary to the patterns,
this book gives a vocabulary to "refactorings" or rewritings.
And a definition: refactoring is not, as sometimes used, random rewriting,
but behaviour-preserving code improvements.
Somewhat aimed at implementors of IDE refactorings,
the book contains an algebra of code refactoring.
Martin's site about refactoring, with lots of important
articles and news about refactoring theory and practice!
Refactoring To Patterns, by Joshua Kerievsky.
Shows longer examples of refactoring in action,
with the goal of refactoring code towards use of proven solutions (Patterns).
UML Distilled, by Martin Fowler. A good overview of
UML as a diagramming language and how it relates to the Rational Unified Process.
Also covers some techniques that are not part of RUP but still useful
(and even used in Agile), such as Class-Responsibility-Collaboration Cards (CRC).
- The Unified Software Process, by Jacobson, Booch and Rumbaugh,
the "three amigos" of the (less agile) Unified or Rational Process.
- The Practice of Programming, Kernighan & Pike, Addison-Wesley,
1999. An excellent general book on writing readable, maintainable, working code
in any language, with most of the examples in C, C++, Java. Four mugs.
Kernighan is well-known as the author of the C book that three
generations of C programmers learned on.
- Patterns Community
- Hillside.net - Home of the Patterns Library
- The Elementary Patterns Home Page
- Huston Design Patterns;
Dozens of 1-page examples in C++ and Java.
On Using Interface-types to Break Dependencies
This looks like a very interesting paper but, alas, only the abstract and references are online.
Still worth a read!
- Wikipedia on Test-driven development
- Introduction to TDD by Scott W. Ambler (author of
several relevant books including Agile Database Techniques
- Article on TestDrivenDevelopment at Ward Cunningham's Wiki
- Test Driven Development: Interview with Martin Fowler
Way of Testivus, the Zen of Testing.
- JUnit Pocket Guide
by Kent Beck (JUnit's inventor), O'Reilly.
A convenient short presentation on JUnit 3.8.
- Kent Beck and Erich Gamma,
Test Infected: Programmers Love Writing Tests. From the guys who invented JUnit.
- Martin Fowler,
Continuous Integration, one of the definitive papers on the subject.
- Ian's own
JavaOne 2007 Presentation on Java Testing Tools
- Kent Beck,
Development By Example,
from one of the people that really helped popularize TDD.
- J. B. Rainsberger,
JUnit Recipes, Manning Press, 2004
A terrific look at how JUnit really applies to a wide variety
of programming tasks using different technologies.
"J.B." is heavily involved in the JUnit community and knows about
the many JUnit add-ons; in this book he shows how to employ them to good effect.
Four Mugs for this one!
- Frank Cohen,
Java Testing And Design,
free download from TheServerSide.com
- Brian Marick,
When Should a Test Be Automated?, definitely an older paper and one that
requires re-evaluation in light of the success of the xUnit family.
- Steve McConnell,
Daily Build and Smoke Test
- Ward Cunningham,
- Michael Feathers,
The Self-Shunt Unit Test Pattern
- Tim Mackinnon et. al.,
Endo-Testing: Unit Testing with Mock Objects
- Michael Feathers,
The Humble Dialog (avoiding the "Evil Dialog" anti-pattern)
- ObjectMentor Inc.,
collected papers on design patterns, many testing-centric.
a TDD forum site.
- Checking Java Programs,
my eBook on java testing tools.
Open Source Java Testing Tools
- Aegis, a program that used TFD in 1991, before
it became a buzzword (I introduced the use of this while at SoftQuad in the 1990's).
JUnit - general add-ons
JUnit - Domain-specific
More than half of the smartphones in the world, and almost all the low-cost "feature phones",
run some form of Java:
- Feature Phones run Java Micro Edition (Java ME); it's generally clear
that Java ME is unsuitable for smartphones in its present state
- Research in Motion Blackberry smartphones
long ago, used a licensed but vastly extended Java ME, then tried and failed to make QNX a phone OS
- Android smartphones and tablets use a subset of Java SE
that keeps to the JavaSE specification except that it omits AWT and Swing,
providing an alternate GUI that is suited to the devices it targets,
as well as many valid (non-java.*-packaged) extensions
- Oracle is promoting JavaFX as an alternative, though this is an
interesting technology it has very little traction at present.
Some links follow on each of these technologies.
NoSQL (non-relational, scalable databases) a.k.a. "the post-relational era" according to some
Remote Methods Invocation (RMI)
By which I mean browser-based web sites developed in Java.
- Servlets and
JSP (older JavaServer Pages) at Sun.
Note: Servlets should rarely be used directly;
for web sites, you generally want a framework like those listed here...
- JSF: JavaServer Faces Page at Sun
- JSF Tag Summary
- Struts 1, the original (now legacy) JSP MVC framework
- Struts 2, new MVC framework based on WebWork
- Facelets (simplifies JSF)
- Gavin King's Seam Framework 2.x,
Was recommended: integrates JSF, JPA and EJB3.
However, has been left behind; some of it incorporated into
Java EE 6 and 7, and (after JBoss pulled the plug on Seam 3
development) other parts moved into
See also this
- PrimeFaces - Leading JSF components
- PrimeFaces Demo
- RichFaces - "Hot" components for JSF
- RichFaces Demo
- OpenFaces - OpenFaces - More components for JSF
- OpenFaces Demo
- IceFaces - "Cool" components for JSF
- IceFaces Demo
- Spring Framework
- My Overview of Spring WebFlow
- Ian's list of
Free download of Core Servlets and JSP book
- JavaServer Pages, Hans Bergsten, O'Reilly
- Java Servlet Programming, by Jason Hunter, O'Reilly
- Professional Java Server Programming, by Patzer et al, Wrox Press
- Java Network Programming
- TomCat Web/servlet container
- Tomcat: The Definitive Guide (first edition co-authored by yours truly)
- Thoughts on owning your web site
By which I mean SOAP-based and RESTful Web Services,
program-to-program communication rather than browser-to-server communication.
Some people equate Web Services with the vastly more generic term "SOA":
you can use web services in SOA, but SOA can be applied to many other technologies.
N.B. Modern JSF frameworks like PrimeFaces/OpenFaces/RichFaces/IceFaces above
provide AJAX automatically!
Web Server Security (SSL)
- Web Security and Commerce, by Simon Garfinkel, O'Reilly
JavaFX - RIA/Rich Clients in Java
Enterprise JavaBeans (EJB)
Note: Anything detailing EJB 2.1 or earlier is totally obsolete;
any new projects should use EJB 3 (session beans) and JPA (persistence,
replacing what used to be called "Entity EJB").
The new stuff is much better!
This is about Message Oriented Middleware (MOM), not about "instant
messaging" (but see Jabber.org for that).
- Overview of Messaging at
- JMS is
Sun's Java Messaging Protocol. Like JDBC, JMS is a "hollow API"
requiring transport-specific protocol support underneath.
Most Java EE App Servers come with an implementation, but they
don't necessarily inter-operate.
Advanced Message Queue protocol, a project to design
and build a universal, interoperable protocol usable by JMS as well
as by other APIs and directly. Designed by bankers/traders,
for speed. Described by one of the archittects at
A 2008 update on
Fast Messaging, an academic project to build a
fast protocol (only implemented
for Microsoft Windows NT, however).
Newest first, more or less.
Integrated Development Environments (IDEs)
|Borland JBuilder||jbuilder.borland.com/||Full free version available|
|NetBeans (Open Source)||https://www.netbeans.com
||NetBeans and Sun Studio share code|
|IBM Websphere Studio||https://www.ibm.com/
||Eclipse and Websphere share code|
|Eclipse (Open Source)||https://www.eclipse.org/|
|WebGain||https://www.WebGain.com/||Visual Cafe - the oldest Java IDE|
Of these, I use
Eclipse most of the time.
We even have it running on
OpenBSD thanks to the work of Kurt Miller
and the Java BSD gang (thanks, guys!).
- IBM AlphaWorks - https://alphaworks.ibm.com/
Source of "Jikes", free fast compiler.
- Janino, an embeddable Java compiler.
- Native Code Compilers for Java:
- The Free Software Foundation's GNU C Compiler (gcc) has another
sibling - gjc, the GNU Java Compiler, which can compile some
Java apps into native code.
TowerJ had a Java-to-native code that
only supported command-line programs (non-GUI), aimed
at the server-side market, but they appear to have gone bust.
- FindBugs, a static checker
- PMD, a static checker
- PathFinder, a dynamic checker
- JMP, the Java Memory Profiler
- Contributing to Eclipse,
by Gamma & Beck.
A bit dated, this book covers building a JUnit plugin for Eclipse 2.1
but also details and expounds upon the principles and design patterns
that have made Eclipse so successful.
I hope they update it soon (hint, hint).
There are several good installation programs for deploying Applications.
(bundled with the JRE)
- Install Anywhere by ZeroG.com
- InstallShield Java Edition
- NullSoft Installer (nsi) isn't written in Java but is used e.g., by
Tomcat to install under MS-Windows.
Learning Tree (take more courses! :-)
Java Web Apps,
Java Web Services,
Enterprise Design Patterns.
Finding Java Source Code
Java stuff: https://darwinsys.com//java/
Free, reliable, secure open-source UNIX system:
OpenBSD is a leading freeware operating system.
More secure than Linux, runs on more platforms than FreeBSD.
Good for secure firewalls and servers.
Four mugs of beer for these guys!
Java (both Kaffe and JDK, at least on i386 platforms) available.
Servlets and JSP available on same platforms via Tomcat.