Chapter 4 Understanding Migration

J2EE Component Standards

Application Server 8.2 (hereafter called Application Server) is a J2EE v1.4-compliant
server based on the component standards developed by the Java community. By contrast,
the Application Server 7 is a J2EE v1.3-compliant server and Application Server 6.x
is a J2EE v1.2-compliant server. Between the three J2EE versions, there are considerable
differences with the J2EE application component APIs.

The following table characterizes the differences between the component APIs
used with the J2EE v1.4-compliant Application Server 8.2, the J2EE v1.3-compliant Application
Server 7, and the J2EE v1.2-compliant Application Server 6.x.

J2EE Application Components

J2EE simplifies development of enterprise applications by basing them on standardized,
modular components, providing a complete set of services to those components, and
handling many details of application behavior automatically, without complex programming.
J2EE v1.4 architecture includes several component APIs. Prominent J2EE components
include:

Client application

Web application

EJB

Connector

EAR

J2EE components are packaged separately and bundled into a J2EE application
for deployment. Each component, its related files such as GIF and HTML files or server-side
utility classes, and a deployment descriptor are assembled into a module and added
to the J2EE application. A J2EE application is composed of one or more enterprise bean(s), Web, or
application client component modules. The final enterprise solution can use one J2EE
application or be made up of two or more J2EE applications, depending on design requirements.

A J2EE application and each of its modules has its own deployment descriptor.
A deployment descriptor is an XML document with an .xml extension that describes
a component’s deployment settings.

A J2EE application with all of its modules is delivered in an Enterprise Archive (EAR) file. An EAR file is a standard Java Archive
(JAR) file with an .ear extension. The EAR file contains EJB JAR files, application client JAR files and/or
Web Archive (WAR) files.

Why is Migration Necessary?

Although J2EE specifications broadly cover requirements for applications, they
are nonetheless evolving standards. They either do not cover some aspects of applications
or leave implementation details to the application providers.

This leads to different implementations of the application servers and the differences
in the deployment of J2EE components on application servers. The array of available
configuration and deployment tools for use with any particular application server
product also contributes to the product implementation differences.

The evolutionary nature of the specifications itself presents challenges to
application providers. Each of the component APIs are also evolving. This leads to
a varying degree of conformance by products. In particular, an emerging product, such
as the Application Server, has to contend with differences in J2EE application components,
modules, and files deployed on other established application server platforms. Such
differences require mappings between earlier implementation details of the J2EE standard,
such as file naming conventions, messaging syntax, and so forth.

Moreover, product providers usually bundle additional features and services
with their products. These features are available as custom JSP tags or proprietary
Java API libraries. Unfortunately, using these proprietary features renders these
applications non-portable.

What Needs to be Migrated

The J2EE application consists of the following file categories that need to
be migrated:

Deployment descriptors (XML files)

JSP source files that contain proprietary APIs

Java source files that contain proprietary APIs

Deployment Descriptors (XML files)

Deployment is accomplished by specifying deployment descriptors (DDs) for standalone
enterprise beans (EJB JAR files), front-end Web components (WAR files) and enterprise
applications (EAR files). Deployment descriptors are used to resolve all external
dependencies of the J2EE components/applications. The J2EE specification for DDs is
common across all application server products. However, the specification leaves several
deployment aspects of components pertaining to an application dependent on product-implementation.

JSP Source Files

J2EE specifies how to extend JSP by adding extra custom tags. Product vendors
include some custom JSP extensions in their products, simplifying some tasks for developers.
However, usage of these proprietary custom tags results in non-portability of JSP
files. Additionally, JSP can invoke methods defined in other Java source files as
well. The JSPs containing proprietary APIs need to be rewritten before they can be
migrated.

Java Source Files

The Java source files can be EJBs, servlets, or other helper classes. The EJBs
and servlets can invoke standard J2EE services directly. They can also invoke methods
defined in helper classes. Java source files are used to encode the business layer
of applications, such as EJBs. Vendors bundle several services and proprietary Java
API with their products. The use of proprietary Java APIs is a major source of non-portability
in applications. Since J2EE is an evolving standard, different products can support
different versions of J2EE component APIs. This is another aspect that migration addresses.

What is Deployment of Migrated Applications?

Deployment refers to deploying a migrated application that was previously deployed
on an earlier version of Sun’s Application Server, or any third party application
server platforms.

Deploying a migrated application is described in Sun Java System Application Server Platform Edition 8.2 Developer’s Guide. However, when migration activities are performed with automated tools, such as the Migration Tool for Sun Java System Application Server 8.2 (for J2EE applications) or the Sun ONE Migration Toolbox (for Netscape Application Servers), there might
be post-migration or pre-deployment tasks that are needed (and defined) prior to deploying
the migrated application.