|
C H A I M S: Compiling High-level Access Interfaces for Multi-site Software
Towards the Science of Component Engineering |
|
CHAIMS compliant megamodules
A megamodule that is fully CHAIMS_compliant must fulfill all of
the following requirements:
-
CHAIMS protocol:
It must know and react properly to all the CHAIMS primitives of the
used protocol. Not all primitives are equally relevant for each megamodule.
Yet all primitives must be implemented in the megamodule and produce decent
results, e.g.:
-
SET-/GETATTRIBUTES: if no global variables are to be set then these primitives
can still be called with no parameters.
-
GETATTRIBUTES, EXTRACT: in certain cases (no attributes, no results) these
calls just return an empty data container.
-
ESTIMATE: always should return a value, either a number (>= 1) that mirrors
the average execution time, or zero to denote that there is no average
execution estimate (then the client can differentiate between no and real
estimates). If native methods do not provide estimates, then ideally a
megamodule measures and stores the execution time of each execution so
it can provide at least averages.
The actual type of the parameters and the way how they are packaged of
course differ between the various CHAIMS protocols (e.g. a gentype is packaged
differently in the RMI protocol than in the CORBA protocol).
-
State management and asynchrony:
In the CHAIMS protocol the traditional CALL statement has been split
up into several primitives. For the megamodule this has the following consequences:
-
For certain primitives the megamodule has to be able to allocate invocation
handles to the issuing clients because these primitives refer to all invocations
done by a certain client (e.g. megamodule.TERMINATE, megamodule.SETATTRIBUTES,
megamodule.GETATTRIBUTES).
-
The megamodule has to store the results of an invocation until this invocation
is terminated. The same method may of course be called several times before
its first invocation gets terminated.
-
Data transformation:
Many of the parameters in the CHAIMS protocol are of type blob (i.e.
a bytestream that contains a BER-encoded Gentype). There exist routines
for en-/decoding a blob into a Java or C++ Gentype. Yet the marshalling
of this Gentype into the type required by a specific method of the megamodule
must be coded manually, even when using the wrapper templates.
A megamodule that does not fulfill all of these requirements is not
fully CHAIMS compliant. Partial compliancy can be tolerated for
certain megamodules in CHAIMS prototypes (e.g. when we know exactly that
we will never ever perform a certain call in a specific demo), but it should
never be confused with full CHAIMS compliancy. A partial CHAIMS compliant
megamodule cannot be used outside of a specific demo setting, because CHAIMS
does not allow to put additional restrictions not given by the CHAIMS protocol
on the usage of a megamodule.
Back to the CHAIMS homepage
6/5/98/db