Roadmap: Becoming an Enterprise Java Developer
Spending time in a classroom learning the different facets of Java
programming is interesting, but my students inevitably ask, "Where is the
money to be made in Java programming?" A quick perusal of Monster.com or
Dice.com will show you a current state of the employment market. The
requirements may be different depending where you live, but by and large the
bulk of the higher paying jobs in the Java industry are in the enterprise domain
(J2EE).
You like Java and you want a selection of good paying jobs, so you are on
board to become a J2EE architect. But where do you start? There are so many Java
technologies, which ones should you learn? In what order should you learn them?
What are the dependencies? What path will give you the best understanding?
The answers to these questions are subjective, but in this article I want to
share my opinion of a roadmap to follow and a listing of resources that you can
use to meet each objective in becoming a strong Enterprise Java Developer. If
you are already a proficient Java programmer, read through each section and make
sure that you have satisfied each objective and then start working at your
level. This article categorizes your skill sets into the following areas:
- Java Programmer
- Java Applied Technologies
- Java Web Technologies
- Enterprise JavaBeans
- Enterprise Architecture
Java Programmer
A Java programmer understands the basics of the syntax and semantics of the
Java programming language. You must be proficient in object-oriented concepts,
such as inheritance and polymorphism, as well as Java's specific notion of
interfaces. You must understand Java exception handling and be able to implement
your own custom exceptions.
Familiarize yourself with the Abstract Window Toolkit (AWT) and how to
develop applications and applets. Understand the Event Delegation Model and how
Graphical User Interface (GUI) objects pass event notifications to interested
parties.
Pay attention to Java's implementation of its Collection classes
(universal data structures and algorithms) and its basic input/output classes
(such as Streams and Readers/Writers). Conclude your Java overview with a deep
understanding of multi-threaded Java programming. Be sure to not only understand
how to create a thread and execute it, but also to understand synchronization
and object locks.
This overview describes two eight-week courses that I taught to prepare new
Java students for certification. I outline all of these topics in my latest
book,
Java 2 Primer Plus,
along with the topics covered in the "Java Applied Technologies" and
"Java Web Technologies." (This is the first, last, and only plug for
my book in this article; it was based off of four courses that I architected to
evolve Java programmers to Java Developers, so I mention it only because of its
relevance to this discussion.)
Once you have this information under your belt, take the Sun Certified Java
Programmer exam. At the end of this program, you will have several
certifications, each taken as specific skills are mastered. This is the best
time to take the programmer certification. The information in the test is very
specific, and you may forget it later and have to refresh yourself before the
test. So take the exam while it is fresh in your mind!
Java Applied Technologies
Understanding the Java programming language is your starting point, but you
must do something with it to solve real-world problems. To solidify your
foundation, Java provides several core technologies that you should understand
and be able to apply. The key technologies that I identify are:
- Swing
- JDBC
- Network Programming
- Remote Method Invocation (RMI)
- XML
As an Enterprise Java Developer, you will not do a whole lot of GUI
development, but Swing is among the fundamentals that you should understand. You
should be able to use advanced Swing controls to build a GUI that can display
and monitor your Enterprise framework. Not to mention that the basis of
Swing's architecture will help you design strong enterprise architectures
later; this includes the concept of separating your data from the presentation
of your data, or in Swing terms, the "Separable Model View
Architecture." The book that I am currently using to Swing is
Java Swing, 2nd Edition.
Almost all enterprise applications talk to a database in the background. The
method of communication is through the Java Database Connectivity API (JDBC).
You need to understand the basis of the Structured Query Language (SQL) and how
to use JDBC to connect to a database, execute queries, update data, remove data,
etc. JDBC is so fundamental that I cannot emphasize its importance to you
enough. An exhaustive reference for JDBC is the
JDBC API Tutorial and Reference, Second Edition: Universal Data Access for the Java 2 Platform
and a good streamlined overview can be found in
Core Java 2: Volume II – Advanced Features
(The latter is a good overall Java book that you might want to have on your
shelf or add to your
Safari virtual
library.)
The mechanism for communicating between Java programs is through the
java.net.Socket class. You will experience a couple iterations of
network communication, but the place to start is the
java.net package.
Learn how to connect to a server and then how to implement your own server. Pay
particular attention to receiving a connection from a client, passing that
connection off to another thread for processing, and then listening for
additional connections. You need to understand how to develop a high-volume
multi-user server. As an example, you could write a chat server and chat client;
this demonstrates this skill set nicely.
Core Java 2: Volume II
provides good information on both network programming as well as RMI.
Remote Method Invocation, or RMI, is the basis for Java distributed
computing, and the foundation upon which J2EE builds. Although as an Enterprise
Java developer you may never write RMI code directly, learning RMI serves two
purposes:
- Introduces you to distributed computing
- Provides an understanding of the underlying communication infrastructure
of your J2EE application server
Finally, J2EE relies heavily on XML, so it serves you well to understand how
to manipulate it. Furthermore, as service-centric applications are being built
on top of Web Services, XML becomes even more important, as it is the
communication protocol that encapsulates messages being passed between
components. The key things to understand here are SAX (Simple API for XML)
parsing and the DOM (Document Object Model). A good understanding of these two
concepts and Java's implementation through the Java API for XML Parsing
(JAXP) will help you in the industry.
But for your own use, you may consider looking at
JDOM, which is an open-source
Java-centric approach to XML manipulation. My favorite Java XML book is Brett
McLaughlin's
Java and XML, 2nd Edition.
After you have completed the "Java Applied Technologies"
objectives, you should get your Java Certified Developer certification (see the
certification section of the reference guide for more information.)
Java Web Technologies
The next step in your journey is to understand Java's Web Technologies,
namely Servlets and JavaServer Pages (JSP) and how they work together. It will
help you to understand the history of dynamic Web page generation from the early
days of CGI scripts to the latest JSP technologies.
Some books teach you JSP right out of the gate because it is easier to
develop JSP files than it is to write Servlets, but I do not subscribe to this
methodology. The reason is that learning JSP syntax shows you how to use a
technology without properly understanding what it is doing. There are too many
black boxes that your code passes through. Therefore, I strongly recommend that
you become a good Servlet programmer first.
Focus on how to read information from a Web Browser, both through HTTP GETs
and POSTs, and the process of building and sending a response back to the browser.
Understand session management, forwarding and including requests to and from
other Servlets, and how to implement Servlet Filters. Learn the lifecycle of
a Servlet and the various security mechanisms that are built into the Servlet
API to secure access to your Servlets. My favorite book in this arena is Jason
Hunter's
Java Servlet Programming,
2nd Edition.
Once you have a good understanding of Servlet technologies, then focus your
attention on JSPs. Be sure to understand the following:
- JSP syntax
- JSP Scriptlets (although you will not use them in production
code)
- JSP built-in tags
- Component-based JSP programming (using JavaBeans)
- Building Custom Tag Libraries
- Integrating Servlets and JSP components to build a Model-View-Controller
web architecture
First understand how to use JSPs individually and finally combine them with
Servlets to build a robust architecture with the focus on: Servlets with no
embedded HTML and JSP files with no embedded Java. A good book in this area
is
JavaServer Pages, 2nd Edition.
Now is a good time to take the Web Component Developer certification exam; it
will exercise your knowledge of these technologies.
Before leaving this topic, you might want to familiarize yourself with some
of the pre-built and open-source web architectures. The main one used in the
industry is Jakarta Struts, so it is a great starting point. There are some
good Struts books, but the one that I keep handy is
Programming
Jakarta Struts.
Java 2, Enterprise Edition
J2EE combines a Servlet container (in which Servlets and JSP files execute)
with an Enterprise JavaBean (EJB) container and a host for various services
(such as transaction management, JDBC connection pooling, and Java Messaging
Service (JMS) Servers). The first focus in J2EE has to be EJB. Be sure to understand
how to implement and the differences between Stateless and Stateful Session
Beans, Bean Managed and Container Managed Entity Beans, and Message Driven Beans.
Learn how to compile these beans, write deployment descriptors for them, and
finally deploy them to an application server. My favorite book for learning
EJB is Monson-Haefel's
Enterprise
JavaBeans, 3rd Edition.
Next, turn your attention to using and configuring JMS Servers. Understand
the publish-and-subscribe and point-to-point messaging models and how JMS Servers
relate to their destinations (topics and queues.) Post messages to JMS destinations
and create Message Driven Beans to respond to them. JMS is a fundamental technology
that is applied to implementing Web Services. A book that I really like on JMS
is
Java Message Service,
but it has been out for over two years, so you might consider the more recent
Java Message Service API Tutorial
and Reference: Messaging for the J2EE™ Platform.
Choosing an application server is a key to finding a good job; most J2EE jobs
will require experience with one of the two market leaders: BEA's WebLogic
and IBM's WebSphere. I personally do my J2EE-specific development work
inside
JBoss because of its ease of use,
and then target my application at one of the two aforementioned servers. There
is a lot of controversy around JBoss, but I think it is the best environment
to learn J2EE development; you write your deployment descriptors by hand, reinforcing
their underlying meaning (the important part) and then deployment is made incredibly
simple (the deployment of an application is not core to your understanding of
the technology, so do not complicate it at this point.)
Application Server specific books that you might want to look through
include:
Enterprise Architecture
Understanding how to use the J2EE technologies is not enough to prepare you
for your J2EE Architect Certification, you must first know how to use the
technologies together effectively (design patterns) and how to articulate your
designs to your peers (UML).
Design patterns demonstrate solutions that have already been defined for classes,
or categories, of problems; when faced with a problem it is better to see if
someone has already solved the problem before solving it again.
Sun's
Web site is full of J2EE design patterns, as is the book
Core
J2EE Patterns: Best Practices and Design Strategies.
UML has become the standard Enterprise Architecture language for expressing
an architecture to other architects and to your development team. UML was originally
developed by Rational Software and applied through the Rational Unified Process
(RUP), which was an entire software engineering model. The book
Building
J2EE Applications with the Rational Unified Process demonstrates how to
integrate the RUP and UML diagrams with J2EE concepts.
The last thing that you need to do before taking getting your Enterprise Architect
Certification is to review for this difficult exam, programming assignment,
and second exam (essay-based). Prentice Hall released a study guide for this
exam:
Sun Certified Enterprise
Architect for J2EE Study Guide to help you.
Summary
This article has outlined a roadmap that you can follow to become an
Enterprise Java architect. In retrospect, the reason that Enterprise Java
architects demand a high salary is because they are required to know a whole lot
of information! The reading list and topics that I outlined for you could easily
take you a year or more of dedicated study to accomplish. It is probably one of
the most difficult positions to grow into, but it is also one of the most
rewarding.
I would recommend following this path and then working at whatever skill set
level you happen to be in to gain experience while you learn additional skills.
Before someone will hire you as an Enterprise Architect, you'll need
experience in the industry, so consider this a three year goal: work in the Java
industry and keep adding skills as time permits. Before you know it, you will be
at the bleeding edge of enterprise Java knowledge!
It has been several years since I first published a roadmap to becoming an
enterprise Java developer, so in this 2007 installment, I want to review our
humble beginnings and then review the hot topics that you need to understand in
today's ever evolving industry. Much of my
original article is still valid, so in this installment will review and build from that base