Object persistence is defined in the external XML metafiles, which may have vendor-specific extensions.
JDO vendors provide developers with enhancers, which modify compiled Java class files so they can be transparently persisted.
Enterprise JavaBeans 3.0 (EJB3) specification also covered persistence, as had EJB v2 with Entity Beans.
Significantly, javax.persistence will not require an EJB container, and thus will work within a Java SE environment as well, as JDO always has.
Leading JDO commercial implementations and open source projects also offer a JPA API implementation as an alternative access to their underlying persistence engines, formerly exposed solely via JDO in the original products.