Business Delegate is suitable for EJB 2.x because the overly complicated programming model and remoteness nature.
Actually it's suitable for any distributed systems for hiding remoteness, but for
Java EE the easiest and most robust way to implement distributed systems is to use EJB. Necessary to implement a distributed system for most web applications is another question.
If we're using EJB 2.x, this pattern (or workaround) is very useful because if we don't use it, we need to write code to look up service, get home interface, get component interface, handle NamingException, CreateException, RemoteException in every presentation tier (or every client) code.
However if our application is not a distributed system we don't need to handle RemoteException, and if we're using IoC container like Spring Framework, we don't need to apply ServiceLocator or use JNDI at all as Spring provides JndiFactoryBean class.
Or if we're using EJB 3.x, it introduces Dependence Injection (thanks to Spring Framework to move Java EE platform to right direction), and there are no "Home" interfaces anymore, we can inject Stateless Session Beans directly to
Servlets using @EJB annotation, so it's not much useful to apply Business Delegate pattern as it introduces a consequence in adding an additional layer which add complexity to the system without adding much benefits (if any).
Regarding minimize changes when a Business Service has changed, I don't agree much as I mentioned, if the Business Service API has changed we need to change Business Delegate API as well which will impact all the client code that use the Business Delegate.
SCJA 1.0, SCJP 1.4, SCWCD 1.4, SCBCD 1.3, SCJP 5.0, SCEA 5, SCBCD 5; OCUP - Fundamental, Intermediate and Advanced; IBM Certified Solution Designer - OOAD, vUML 2; SpringSource Certified Spring Professional