That is going to be a good book for sure. There is my note regarding chapter 4:
4.5.1 Developing a Flexible Solution
The solution is simple. Refactor the logic that re-queries the server and fulfills the DTO relationships into the DTO itself and implement a lazy-loading scheme.
For example, when client A now queries user information, client A only gets user DTOs. When the time comes that A needs booking information, client A simply calls user.getBookings() and gets back a collection of booking DTOs. Behind the scenes, the user DTO implementation actually checks to see if it already has the booking information. If not, the user DTO implementation queries the server for the booking DTOs and returns them to the client.
I would say that smart DTO creates some difficulties for CORBA clients. It requires CORBA 2.3 compliant server and client that is not always the case. For a complete explanation look at: http://www.theserverside.com/resources/pdf/CorbaEJB.pdf
I would suggest using silly DTO that might be completely defined by IDL. If a client needs that lazy loading/caching, then it might be easy done with simple wrapper around simple DTO on client side(Java/C++).
Although smart DTO-s are OK for only Java systems.