BLOG BY DEBU PANDA
( Oracle )
=======================
( taken
from JavaLobby web site...rsr)
( emphasis
and high-lighting by rsr)
-------------------------------------------------------
What
Should a Good
=============================================================
In a previous blog entry, I mentioned that it takes a lot of effort
and commitment to acquire the knowledge necessary for serious enterprise development in Java.
Anyone's journey to Java is unique and dependent on what he or she
already knows. Those starting from scratch have a very long and difficult journey ahead. For others
who are already experienced in
enterprise development with other technologies, the transition is much more painless because their existing
knowledge flattens several
learning curves.
But first, let me explain what I mean by "enterprise
developer". "
taken
as cookie-cutters, but they should be sufficient to convey the message. I
believe any triplet of them is adequate to qualify a system as enterprise-class.
1) It serves a large user
population with different roles
2) It's
scalable horizontally
3) It's
available 24/7
4) It's
fault-tolerant
5) It has
an N-tier architecture running on
several
physical machines
6) It has
a distributed architecture
7) It interfaces
with foreign systems,
preferably
using open standards
8) It's well-architected and
utilizes best-of-
breed technologies.
Now that we have a (hopefully) clear idea of what enterprise development is geared for, let's list
what it takes to become an enterprise
developer in Java worth his or her salt. But keep in mind, though, that some items in this
list are not specific to Java.
------------------
1) You need to be proficient in
object-oriented analysis and
design (OOA/D), design patterns (GoF,
J2EE-DP), and integration patterns. You
should be intimately familiar with UML, especially class,
object, interaction, and state diagrams.
2) You need to learn Java
the language and its core class libraries (collections,
serialization, streams, networking, multithreading, reflection, event
handling, NIO, localization,
etc.).
3) You should understand how the
JVM, class loaders, and garbage collector work in general. You should
be able to decompile a class
file and comprehend basic byte code instructions.
4) If you're going to write
clients, you need to learn applets
for the web and Swing, AWT, or SWT for the desktop. You
should also be familiar with the JavaBeans component model for UI widgets. JavaBeans are also used in JSP to isolate business
logic from the presentation tier.
5) You need to learn the JDBC API and how to use at least one persistence/ORM framework like Hibernate, JDO, CocoBase, TopLink, or iBatis. You
also need to understand the implications of the object-relation impedance
mismatch, how it will affect your business objects' interactions with a relational
database, and its
performance consequences.
6) You need to learn about the Java sandbox security model (class loaders, byte code verification, managers,
policy and permissions, signing, digital
signatures, cryptography, certification,Kerberos, etc) and
the various security/authentication APIs, like JAAS (Java Authentication
and Authorization Service), JCE (Java Cryptography Extension), JSSE (Java Secure Socket
Extension), and JGSS (Java
General Security Service).
7) You need to learn Servlets, JSP, and optionally JSTL (Standard
Tag Libraries).
8) You need to be familiar with
popular web frameworks, like
JSF, Struts, Tapestry,
Cocoon, WebWork, and their underlying design models, such as MVC/Model2.
9) You need to learn how to use
and administer web containers, ike
Tomcat, and how to deploy and maintain
web applications on them.
10)You
need to learn about distributed objects and
remoting APIs, like RMI
and RMI/IIOP.
11) You need to learn at least
one XML API, like JAXP (Java API for XML Processing), JDOM
(Java for XML Document Object Model), or DOM4J.
12) You need to learn how to
build Web Services using Java APIs and
tools, such as JAX-RPC (Java API for
XML/RPC), SAAJ (SOAP with Attachments API for Java), JAXB (Java Architecture for XML Binding), JAXM (Java API for XML Messaging), JAXR (Java API for XML Registeries),
and JWSDP (Java Web Services Developer
Pack).
13) You need to learn a
lightweight application framework, like Spring,
PicoContainer, Avalon, and
their IoC/DI idiom (setter,constructor, interface
injection).
14) You need to be familiar with various
J2EE technologies, like JNDI (Java Naming and Directory Interface), JMS (Java Message Service), JTA/JTS (Java Transaction API/Java Transaction
Service), JMX (Java Management eXtensions), and JavaMail.
15) You need to learn about Enterprise Java Beans (EJB) and their various
component models: Stateless/Stateful Session Beans, Entity Beans (with
Bean-Managed Persistence [BMP] or Container-Managed Persistence [CMP] and its EJB-QL), and
Message-Driven Beans (MDB).
16) You need to learn how to manage and configure a J2EE application
server, such as WebLogic, and utilize its add-on
services, like clustering, connection pools, and distributed ransactions support. You should also learn how to package
and deploy applications on it, and be able to monitor its performance and tune
it.
17)
You need to be familiar with Aspect Oriented
Programming and Attribute Oriented
Programming - both are confusingly abbreviated as AOP - and their
popular Java specifications and implementations, like AspectJ and AspectWerkz.
18) You need to be familiar with various utility
APIs and frameworks,
like Log4J (logging/tracing), Quartz (scheduling), JGroups (network
group communication), JCache
(distributed caching), Lucene
(full-text search),
19) If you're going to interface
or integrate with legacy systems or native platforms, you need to learn JNI (Java Native Interface) and Java Connector Architecture.
20) You should be familiar
with Jini technology
as it relates to distributing systems.
21) You should be familiar with
the Java Community Process (JCP) and its various Java Specification Requests (JSRs),
like Portlets (168), JOLAP (69),
Data Mining API (73), etc.
22) You should master a Java IDE,
like NetBeans ,IntelliJ IDEA or Eclipse. (Some people prefer vi/emacs with make files. Whatever makes you tick!)
23) Java is verbose and requires a
lot of code artifacts (e.g. EJB);
therefore you should be familiar with code generation tools, like XDoclet.
24) You need to be familiar with
a unit testing framework JUnit) and learn various build and deployment tools (Ant, Maven).
25) You should be familiar with
several software engineering
processes commonly used in Java development, like RUP (Rational Unified Process) and Agile methodologies.
Whew! That's a lot! Granted, you don't need to be expert in all of
the above. Some of them are more essential than others,
depending on what
kind of applications you're going to build, but you certainly should have more
than a passing familiarity with them.
In the next blog entry, I'm going to list
books and links to docs,
articles, and websites that assist in learning the items in
the list.
-------------------------------------------------------------