Flexible Migration Support for Component Frameworks
Abstract
Enterprise applications such as accounting, order, inventory, and e-commerce systems are often built using a component-based architecture supported by an application server. Such systems are usually typified by the need for constant availability of the system and their relatively long execution times.
Existing architectures generally prevent components from being relocated to different hosts without stopping and restarting the system. This limitation has two significant drawbacks. First, the need for constant availability of enterprise systems hinders regular system maintenance activities. Second, this limitation impedes systems from easily adapting to changing user, system, and network loads. Since these systems have relatively long execution times, it is difficult and often impossible to predict system loads and thus distribute individual components in advance to make best use of available computing resources.
To address these concerns, we introduce the concept of component migration. We present an aspect-based analysis of the forces affecting the implementation of component migration in a component architecture that is comparable to existing architectures. This analysis is used as the basis for our implementation of a lightweight application server based on the Enterprise JavaBeans architecture.
Java Reflection and Remote Method Invocation should be orthogonal. A program should be able to reflect upon any object, local or remote. Any object, base-level or meta-level, should be able to be made remotable. In standard Java, this is not the case: meta-objects from the reflection API cannot be accessed remotely. We describe how remote reflection can be implemented within the standard Java environment, without modifying the underlying virtual machine. Our lightweight application server allows developers to use remote reflection to collect system performance data with which to make migration decisions. Our analysis of this mechanism recommends changes to the Java API which will allow reflection to be used remotely while avoiding the problems encountered with a purely Java solution.
Our experience with the design and testing of our lightweight application server demonstrates that component migration is a viable addition to existing component infrastructure. Additionally, we propose a generalised mechanism to inspect running systems and thereby gather data to support load balancing and resource allocation decisions. The wide-spread adoption of these techniques has the potential to simplify the role of developing and maintaining distributed enterprise applications. This simplification is a natural outcome of making software systems more closely mirror the real-world scenarios they represent.