Servers and Servants in Corba
A common point of confusion for CORBA novices is distinguishing between servers and servants.
This often occurs because the word server is frequently used loosely. Let us clarify these terms.
A servant is an implementation object that will be accessed by clients. Examples of servants are a pricing service object in an
e-commerce system and a document formatter object in a document management system.
These objects, like any others, must be created in an actual running process. This process is what we really mean by the term "server."
Servant objects live inside server processes. As a developer, you will not only write the servant objects that provide your particular functionality but also the server, which will create, manage, and make available those servant objects to clients.
In CORBA, a Servant is the invocation target, containing methods for handling the remote method invocations. In the newer CORBA versions,
the remote object on the server side is split into the Object (that is exposed to remote invocations) and Servant (to which the former part delegates the method calls).
It can be one Servant per remote Object, or the same servant can support several (possibly all) objects, associated with the given Portable Object Adapter.
The Servant for each Object can be set or found "once and forever" (servant activation) or dynamically chosen each time the method on that object is invoked (servant location).
Both servant locator and servant activator can forward the calls to another server.
In total, this system provides a very powerful means to balance the load, distributing requests between several machines.