Download (direct link):
greatest and it was a privilege to serve as your lead. Mojo, it has been enjoyable to watch you progress from apprentice to master. Vic Fraenckel and Mike Shea, you aren't on my team, but you are certainly on the team, in spite of being part of the Borg. To Becky Smith, my fellow warrior, we have been through a lot of battles (some with each other), but it has been a pleasure working with you and your team.
To all the guys who have served with me on Gainesville District VFD Duty Crew A (and particularly its leader, Captain Bob Nowlen)—Patrick Vaughn, Marshall Sayen, Gary Sprifke, Mike Nelson, Matt Zalewski, Doug Tognetti, Frank Comer; we have seen some crazy things together, and I have been happy to be the one to drive you there. Chief Richard Bird, I would like to thank you for your leadership of our department and service to our community, which has been ongoing since before I was born. To the guys at the Dumfries-Triangle VFD, now you know where I went (writing this book): Brian Thomason, Tim Trax, Brian Kortuem, Brian Lichty, Nick Nanna, Scott Morrison, Brian Martin, Jack Hoffman, Craig Johnson, and Randy Baum—I wish I could name all of you. Volunteer firefighters truly are the salt of the earth, and I am happy to be among you.
To those who have served as mentors of mine through the years (in no particular order): Tom Bachmann, Seth Goldrich, Don Avondolio, Danny Proko, Burr Datz, Kevin McPhilamy, Shawn Bohner, John Viega, Pat Wolfe, Alex Blakemore (nonpolitical matters), Sam Redwine, and many others that I will kick myself for forgetting later. To Ted Wiatrak and Major Todd Delong, I would like to thank you guys for believing in us and giving us a shot to help some very important people. In closing, I would like to thank two of my Brother Rats, Matt Tyrrell and Jeff Bradford, for being, well, like brothers to me.
W. Clay Richardson
The Client Tier
"Now, if we regard a programming language primarily as a means of feeding problems into a machine, the quality of a programming language becomes dependent on the degree in which it promotes \good use of the machine'"'
Edsger W. Dijkstra,
"On the Design of Machine Independent Programming Languages"
There have been a number of high-profile failures with using Java for major client-side applications. Corel developed an office suite in Java but scrapped the project after an early beta release. Netscape embarked on a pure Java version of a Web browser (referred to as "Javagator"), but the project was canceled before any code was released. Although these were the early days of client-side Java, in the 1997 to 1998 time frame, it was enough to cast a pall over client-side Java, and the momentum shifted to server-side Java. Yet, even under that shadow of server-side Java, the client tier continued to improve. Richer user interfaces, faster virtual machines, a fine-grained security model, and easier network deployment came to the platform piecemeal with each new release. So, borrowing a play from the Microsoft playbook, client-side Java has continued to address its shortcomings and improve with each release. Today we have high-profile and successful commercial applications in Java like ThinkFree Office, Borland's JBuilder, TIBCO's Turbo XML editor, and TogetherSoft's Together Control Center UML modeling tool. So, it is possible to develop rich client applications in Java. This part will assist you in that endeavor.
This part explores pitfalls in three general areas of client-side development: performance, nonintuitive application programming interfaces (APIs), and better alternatives. Here are some highlights of pitfalls in each area.
Performance has long been the bane of client-side Java. The first book, Java Pitfalls: Time-Saving Solutions and Workarounds to Improve Programs, had numerous pitfalls on performance, and many other books and Web sites have come out on Java performance tuning. This part has two pitfalls on performance:
2 Part 1
NIO Performance and Pitfalls (Item 2). This pitfall examines the IO performance improvements of the New IO package (NIO). The pitfall examines file channels, ByteBuffers, and non-blocking server IO.
J2ME Performance and Pitfalls (Item 22). This pitfall ports a Swing application to the J2ME platform and uncovers both API pitfalls and over 20 optimizations for these small footprint devices.
Nonintuitive APIs cause hours of frustration, and the majority of pitfalls in this part are in this area. We carefully dissect the APIs, examine the internal workings of the software, and offer workarounds to the problem. The workarounds sometimes involve a proper sequence of operations, the use of a different class, or the abandonment of the standard API for an open-source alternative.
When Runtime.exec() Won't (Item 1). This pitfall is a canonical example of a mismatch between user expectations and the capability of an incomplete API.
Avoiding Granularity Pitfalls in java.util.logging (Item 5). The new