DAOs aren't dead, but they cannot be considered as a general best practice any more. They should be created in a bottom-up,
rather than a top-down, fashion. If you discover data-access code duplication in your service layer, just factor it out to
a dedicated DAO and reuse it. Otherwise it is just fine to delegate to an EntityManager from a service. The enforcement of an empty DAO layer is even more harmful, because it requires you to write dumb code for
even simple use cases. The more code is produced, the more time you must spend to write tests and to maintain it.