In many cases, enterprise applications are based on a heterogeneous platform
configuration, connecting various independent systems (called tiers) into a coherent
whole. The various tiers of an enterprise application can include, e.g., legacy main-
frame servers, dedicated database servers, personal computers, departmental servers,
and more.
The core functionality served by enterprise applications is often quite simple. It does
not involve overly elaborate computation or pose complex algorithmic demands. How-
ever, developing enterprise applications is considered a daunting task, due to orthogonal
requirements presented by most of these applications: uncompromising reliability, un-
yielding security, and complete trustworthiness.
The staggering demand for rapid development of enterprise applications initiated
a series of component-based middleware architectures. A prime example of these,
and emphasizing client/server and multi-tier structures, is Java 2, Enterprise Edition
(J2EE) [1] which uses Enterprise JavaBeans (EJB) [2] as its component model.
Aspect-oriented programming (AOP) [3], the methodology which encapsulates the
code relevant to any distinct non-functional concern in aspect modules, can also be
thought of as answering the same demand [4, 5]. As it turns out, the functionality of
J2EE application servers can be conceptually decomposed into distinct aspects such as
persistence, transaction management, security, and load balancing. The effectiveness of
this decomposition is evident from Kim and Clarke’s case study [6], which indicates that
the EJB framework drastically reduces the need for generic AOP language extensions
and tools.
Yet, as we shall see here, the EJB support for functional decomposition is limited
and inflexible. In cases where the canned EJB solution is insufficient, applications resort
again to a tangled and highly scattered implementation of cross-cutting concerns. Part
of the reason is that current J2EE servers do not employ AOP in their implementation,
and do not enable developers to decompose new non-functional concerns that show up
during the development process.
A natural quest then is for a harmonious integration of middleware architectures
and AOP. Indeed, there were several works on an AOP-based implementation of J2EE
servers and services (see e.g., the work of Choi [7]).
The new approach and main contribution of this paper is in drawing from the lessons
of J2EE and its implementation to design a new AOP language, AspectJ2EE, geared
towards the generalized implementation of J2EE application servers and applications
within this framework. In particular, AspectJ2EE generalizes the process of binding
services to user applications in the J2EE application server into a novel deploy-time
weaving mechanism. Deploy-time weaving is superior to traditional weaving mecha-
nisms in that it preserves the object model, has a better management of aspect scope,
and presents a more understandable and maintainable semantic model.
As a consequence of its particular weaving method, and of staying away from spe-
cialized JVMs and bytecode manipulation for aspect-weaving, AspectJ2EE is similar
to, yet (slightly) less general than, the AspectJ programming language [8]. Neverthe-
less, standing on the shoulders of the J2EE experience, we can argue that AspectJ2EE
is highly suited to systematic development of enterprise applications. Perhaps the main
limitation of AspectJ2EE when compared to ApsectJ is that it does not directly support