For one, CMP (i.e. a full
J2EE stack) is heavier than just a JDO implementation. Furthermore, CMP as the implementation technology tends to affect your design more intrusively than JDO, which is close to transparent.
I know CMP is the standard, and JDO is not.
Well, JDO
is a standard as in "there's a JSR for it in the JCP", but CMP is certainly more widely used to date.
What about the transaction management?
Both technologies support transactions.
What doe JDO has, but DAO can not do?
Standard interfaces? Really, the question is kinda weird as JDO is a standard API while DAO is a design
pattern...