1. Um, not AFAIK. DTO:s are used when you want to show some data to the user, but you don't want to expose your domain objects directly. For a typical webapp where everything runs in one VM I think it's often easier to just use the domain objects directly.
2. As much of the logic as possible should be in the domain model. Specifically, it might be good advise to avoid the anemic domain model, see
http://www.martinfowler.com/bliki/AnemicDomainModel.html. However, for a simple CRUD app there really isn't much logic to begin with and your domain model will in practice be "anemic", and there's nothing you really can do about that.
3. The service layer is supposed to be the interface which the UI code uses to manipulate the domain model, so I think it's necessary that it knows about the domain model. The UI doesn't necessarily need to know about the domain model; as explained in the first point you can use DTO:s to insulate the UI from the domain model if you want.
4. Service layer I would say, but see below.
I would say that my view of a "best practices" architecture is slightly different than yours. Let me explain:
UI
Basically, same as your explanation. E.g. web UI with struts/jsp, fat client (swing), web services (some xml stuff), batch utilities run via crontab etc.
Service
Interface to the domain model for the UI layer. Typical duties are security checks, transaction management, retrieving and storing domain objects via the DAO layer. Should be stateless.
Data source/integration
Basically static methods or singletons containing logic to retrieve and store domain objects to the database, or to some other system via webservices etc. Should be stateless.
Domain model
The core of the application. As much of the logic as possible should be in the domain classes, with the constraint that the domain classes should only depend on other domain classes (i.e. no calls to the DAO layer or the service layer). Some, or most, of these classes need to be persisted, and thus have hibernate mappings (if using hibernate).
As you see, the biggest difference is that in my explanation, there is no separate app/business layer. Instead I have a "rich" domain model (as opposed to simple POJOs, with basically only properties and their get/set methods, as I understood your domain model to be?). With some lesser ORM tool, like Entity EJB:s, it might be necessary to have some layer under the domain model for the persistent objects. In that case I guess the architecture would then be similar to yours, only the names of the layers would be different.
Another smaller difference is that I wouldn't put servlets in the service layer. Rather, servlets (or struts action classes or whatever you fancy) belong to the UI layer as controllers.