4. Draw line for presentation (client), business logic (server), and production layers.
Find right playgrounds for all objects. (Possible object re-design).

A highly scalable multi-tier J2EE based architecture presented on the picture was built by the author for telecom and IT management as a set of extensible services-frameworks with ability to add/customize services run-time.

Tier 1 – Client Tier communicates via XML based service API, client can be:
-a partner application running on a workstation
-Web Browser with JavaTM Applet
-Wireless device with embedded WML browser or VoiceXML interpreter
-Java card technology device

Tier 2 – Web Server Container with J2EE Servlet and JSP engines where servlet is responsible for session tracking and request distribution, and JSPs provide presentation layer back to the client.

Tier 3 – worker beans providing services
Services-Worker beans can be (not necessary) implemented as EJBs to gain advantage of security and transaction monitoring services provided by EJB containers

Tier 4 – Connectors to Data Sources, Remote Systems, and Devices
A Data Source model was created to describe multiple HR/ER data sources with their types, rules, and structure using XML descriptors.
A unified approach was used to connect to all data sources using Java Naming and Directory Interface (JNDI). A Data Source interface was implemented for RDBMS, LDAP, file structures, directory services, and DNS systems.
A master controller is created to describe a set of operations on telecom systems.
Telecom XML based device control API is implemented for drivers providing control on legacy PBX, IP, and wireless communication systems.

Tier 5 – Data Sources and Remote Systems
Telecom systems like PBXs, Voice Mail Systems, etc, other remote devices, and systems.
Data connectors and device controllers (Tier 4) communicate to Data sources, remote devices, and systems via XML based Device Control API

Back To Basic Steps



5. Recognize Reusable Services and Shared Data

Look for reusability from two points of view: within an application and throughout multi-application environment.

Reusable code should be well understood and perfectly commented.

The examples below can give an idea about candidates for reusable services and shared data.


5.2 SHARED DATA

Two types of shared data should be recognized:

- client shared data,

data shared between layers or screens within the application. This kind of data can serve as common interface and should be stored (cached) on the client side. Each user/client works with its own set of the client shared data.

- multi-user shared data,

data shared by many users, like statistics or short database tables. This kind of data should be stored on the server side as a unique copy that can serve to all the users running this application.

It is recommended to define specific classes for shared data and introduce proper methods operating on the data. Statistics can be an example of such a class. Statistics being organized as shared data gives inexpensive opportunity real time review an application usage

Reusable Services operating on Statistics give an idea about Multi-User shared data usage. Statistics services can be fired when any user starts or closes an application. Then the major results are immediately available to all the other users on line. It helps to collect Statistics (shared data) on how many users are looking into the application and for what reason for example for review or to modify data.

Client shared data operations are expect to be more specific to an application and not necessary (but willingly) are reusable.

5.3 SCREEN REUSABILITY

Components of User Interface or Widgets, like data fields, buttons and others also can be considered as source of reusability especially for a high density screens.

Current tools allow dynamically change widget state from visible to invisible, from active to inactive, change color, label name and so on.

This technique helps to make widgets multi-functional and reusable.

Back To Basic Steps




6. Define the screens and user interface with Human-Computer Interface experts.

GUI is often an underestimated factor.
Application success or failure can depend on the GUI. Client participation in GUI design improves chances for client acceptance. Screen should be functioning, means must cover User Requirements

Role (audience) based GUI
The idea is to have less choices and easier “wizard” screen set for non-tech audience while offering more sophisticated multiple menu screens for advanced client role/audience. To be successful it takes a lot of knowledge of what are most commonly used operations and situations expected by a client. It is also important to take into account data dependency and design GUI accordingly.

On-Line Help System
Screen should be understandable with minimal or no training. It also means context sensitive HELP on-line provided by a developer. Privileged based on-line access to help system keeps administration and maintenance team happy as well as end users.

Back To Basic Steps




7. Define the date and scope of first deliverable



The main goals are: to prove the basic concepts and to get feedback from the client on the very early stages of the development.

Early client involvement is sometimes crucial for a project success. From another side Object Oriented approach leads to a spiral development process.

Each cycle gives developers more understanding and personal feeling about an application and about new tools, software packages, new environment, that are often used with a new application.

First visible goal achieved is a good point to overview and may be to reinvent all the design. It is beneficial to make this cycle shorter.

This first deliverable can be considered as prototyping effort. Be aware that in many cases the users want to install the prototype into production, even though the design team did not consider it production ready.



Back To Basic Steps




8. Use Style Guidance while coding and review the code regularly.
(It also keeps proper communication level for a team).
Only well understood and perfectly commented code can be reused.

// StyleExample package its.examples; // Internet Technology School packages import its.gis.ITShape; import its.util.Tree; /** * A class implementing Java Style Example. * The purpose of the class is … * How to use this class: ... * Example: * @version 0.1 September 10, 1996 * @author Jeff.Zhuk@JavaSchool.com */ public class StyleExample extends ITShape { // class data members private Tree[] dataTree; // array of objects // .. More data … // class methods with JavaDoc headers /** * getDataTree(int iIndex) method returns one element of array * @param iIndex element index in the dataTree[] array * @return dataTree if available, return null in other cases */ public Tree getDataTree(int iIndex) { if(iIndex < 0 || dataTree == null || dataTree.length < iIndex) { // check first! return null; // to prevent run-time exceptions } return dataTree[iIndex]; } // more methods ... } // end of StyleExample class

"The Elements of Java Style" book describes more style details. It requires to provide full JavaDoc comments on all classes, methods, and interfaces. Comments should include description, parameters, return value, and exception tags if needed. Example of usage is also welcomed. Use blocks in if-else, switch, and all looping constructs, it makes alterations fail-safe. All cases and defaults get break statements for the same reason. It is preferable to use StringBuffer for strings that get modified instead of using s +=. Use String s = "hello"; // instead of String s = new String("hello");. Do not use "try-catch" blocks to prevent run-time exceptions, but always use a proper logics instead (see above).

Back To Basic Steps




9. Share first results with domain experts.

Early client involvement often means early approval. Otherwise it is even more important to re-capture user's point of view.


Make corrections and outline the plan to finish the project and to tune the performance.

Tuning performance does not necessary means re-design. Client-Server architecture (if properly designed) allows to re-distribute or partition services to optimize the load and to improve the performance.
Java based architecture is a perfect one such re-partition.

Back To Basic Steps