Hi Hani
the 3 patterns can be used together, they might seem similar but have different characteristics/features:
ServiceLocator: used by clients to locate services (e.g. if SessionBean needs to use an EntityBean, will perform a jndi lookup/creation via the ServiceLocator). Main objective of the pattern is to abstract/hide lookup/creation of services.
BusinessDelegate: used to hide details of the service implementation, for example lookup and access details. Very useful to map RMI exceptions into application-defined exceptions.
Facade: encapsulates complex interactions with many business services (EJBs). For instance one call from the client triggers n calls to different EJBs (reduce network traffic).
I typically would have 1:1 relationship between BusinessDelegate and Facade, where the ServiceLocator is used by DB to look-up the
EJB facade.
Client->BD->ServiceLocator->BD->Facade
This is only my quick sum-up, I suggest to read
Sun Catalogue to get more precise definitions and details.
Ciao
Beppe