Distributed objects, as defined earlier, are packaged as independent pieces of code and can be accessed by local or remote clients via method invocations. Clients do not need to know where the object resides or what operating systems it executes on. The framework also provides an infrastructure for supporting a large number of servers and applications that can spawn any number of transactions. It also provides an environment for managing these objects, advertising their presence, an describing their metadata. Using the object bus, a client object can transparently invoke a method on a server object, which can be on the same machine or on a remote network.
Static invocations are method calls which have been fully defined at compile time.
In contrast, dynamic invocations allow you to add new classes to the system without requiring changes in the client code. They are very useful for tools that discover what services are provided at run time. The repository can be accessed by client objects to find out which server objects they can access, and what are the services provided by these server objects. It should also provide services for security, atomic transactions, concurrency, persistence, licensing, etc. In this section we will talk about three existing Distributed object architectures viz.