BLOG BY DEBU PANDA ( Oracle )

   =======================

( taken from JavaLobby web site...rsr)

( emphasis and high-lighting by rsr)

             Monday July 12, 2004

-------------------------------------------------------

          What Should a Good Enterprise Java Developer Know

=============================================================

            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". "Enterprise" is an overloaded term that means different things to  different people. The easiest way to understand what it means is to explain what an enterprise-class application represents. The  following properties are somewhat generic and aren't meant to be

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), Jakarta Commons, etc.

 

              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.

-------------------------------------------------------------