The Distributed Database System
Design decisions taken in the design of the Distributed Database System:
One major design decision we used was the use of Java reflection. This was done to move the actual marshalling and unmarshalling of messages into the ClientProxy and ServerProxy super classes. By doing this, all method calls and method handling routines are executed in each individual ClientProxy child class by one call to either remoteInvoke (for the ClientProxy classes) or super.handleRequest (for the ServerProxy classes).
Another design decision involved the hierarchical structure of NameContexts on the name server, as described in the previous section on the data structures. The NameServer contains a root name context object, and one name context object for every application server in the system, including the NameServer. For the purposes of this system, an application server is any node/computer which hosts publicly accessible objects (non proxy objects) which can be used by remote clients.
Although the NameServer could have registered all of its classes and objects under the root name context, it was decided to make the first level of the hierarchy specific to other NameContext objects. The reason for the decision to have another NameContext for the nameserver was twofold: to maintain consistency with how application servers operated with the NameServer, and to prevent the possibility that other application servers could register their own NameContexts with names that are the same as any object under the root name context, thus avoiding a potential naming conflict.