Home is the creator/manager of instances. In Smalltalk this role is accomplished by the Class. Because Java lacks class objects, the Home was created to fulfill this role. Home is an interface - an implementation may create a local object or a proxy to a remote object. IOW, there are typically two implementations of Home and its job is to be a factory of instances.

The actual object is also defined as an interface where each method claims it could throw RemoteException (which is useless if you are using local ejb). The tools generate two implementations of this interface - one is a proxy, the other an empty implementation that you fill in with your object's actual implementation.


Now you can theoretically locate your objects anywhere you like - in your process or another one using remote calls. The theory is you don't care, split your processing any way you like.

The reality is there are huge performance impacts when locating objects outside the local process - factor of 1000 slowdowns are not uncommon.

The whole thing is of dubious value - for performance you want to do as much in your vm as possible (integrate vertically) and distribute horizontally (lots of vms all alike, each with everything) vs lots of vms doing specific tasks cooperating in a big system.

The former scales quite well, the latter tends to spend most cycles in marshalling/networking/unmarshalling work.