Well, actually i don't quite understand these points.
Presentation-tier clients need access
to business services.
Presentation tier in case of JSF is managed bean, isn't it? If it's so then this problem is solved via injection. Right?
Different clients, such as devices,
Web clients, and thick clients, need
access to business service.
I don't have devices and thick clients. And what is web client? Isn't it the same presentation tier from above? If it's so then we have same situation as above.
Business services APIs may change as
business requirements evolve.
I can't understand how actually delegates can help when API changes. Well, of course, if it's just some minor changes that you can handle just by changing type of some passed parameters or use only certain field instead of some parameter then it can help, but i don't think that such situations happen often, and it's not so difficult and may be even better to change method call from managed bean or whatever. While major changes will demand to change method call anyway.
Clients may need to implement caching
mechanisms for business service
information.
Caching is a difficult question as i don't know what to cache and how to do it :) Does it mean that i can create some variable that will store some results and use ejb call only when this variable is called for the first time? Is it good practice for such shared resources as a delegate should be?
It is desirable to reduce network
traffic between client and business
services.
How can delegates reduce network traffic? By the same methodics with variable that stores some values?