Введение
Спецификация постоянства объектов Java
Java Data Objects (JDO) – это спецификация постоянства объектов Java. Одной из её особенностей является прозрачность сервисов постоянства для доменной модели. JDO-объекты, подлежащие постоянному хранению, являются обычными классами языка программирования Java (POJO); от них не требуется реализовывать определенные интерфейсы или наследовать специальные классы. JDO 1.0 был разработан в рамках Java Community Process как JSR 12. JDO 2.0 был разработан в рамках JSR 243 и выпущен 10 мая 2006 года. JDO 2.1 был завершен в феврале 2008 года и разработан проектом Apache JDO. JDO 2.2 был выпущен в октябре 2008 года. JDO 3.0 был выпущен в апреле 2010 года. Постоянство объектов определяется во внешних XML-метафайлах, которые могут содержать расширения, специфичные для поставщика. Поставщики JDO предоставляют разработчикам инструменты расширения, которые модифицируют скомпилированные файлы классов Java для обеспечения прозрачного постоянного хранения. (Следует отметить, что расширение байт-кода не является обязательным требованием спецификации JDO, хотя это наиболее распространенный механизм для реализации требований спецификации JDO.) В настоящее время поставщики JDO предлагают несколько вариантов постоянного хранения, например, в РСУБД, в ООБД или в файлах. Классы Java, расширенные JDO, переносимы между различными реализациями поставщиков. После расширения класс Java можно использовать с любым продуктом JDO от любого поставщика. JDO интегрирована с Java EE несколькими способами. Во-первых, реализация поставщика может быть предоставлена как, во-вторых, JDO может работать в контексте транзакционных сервисов JEE.
JDO против EJB3 против JPA
Спецификация Enterprise JavaBeans 3.0 (EJB3) также охватывала вопросы персистентности, как и EJB v2 с Entity Beans. Между этими двумя организациями по стандартизации существовали разногласия относительно приоритета. JDO имеет несколько коммерческих реализаций. В конечном итоге, персистентность была выделена из "EJB3 Core", и был создан новый стандарт – Java Persistence API (JPA). JPA использует пакет javax.persistence и впервые был определен в отдельном документе в спецификации EJB3 JSR 220, но позже был перенесен в отдельную спецификацию JSR 317. Важно отметить, что javax.persistence не требует контейнера EJB и, следовательно, будет работать в среде Java SE, как это всегда было с JDO. Однако JPA является стандартом объектно-реляционного отображения (ORM), в то время как JDO является стандартом как объектно-реляционного отображения, так и прозрачной персистентности объектов. С точки зрения API, JDO не зависит от технологии базового хранилища данных, в то время как JPA ориентирована на реляционные базы данных (RDBMS), хотя существует несколько поставщиков JPA, которые поддерживают доступ к нереляционным хранилищам данных через API JPA, такие как DataNucleus и ObjectDB. Ведущие коммерческие реализации JDO и проекты с открытым исходным кодом также предлагают реализацию API JPA как альтернативный способ доступа к своим базовым механизмам персистентности, которые ранее были доступны только через JDO в оригинальных продуктах. Существует множество реализаций JDO с открытым исходным кодом.
Референтные реализации JDO
JDO 1.0: FOStore
JDO 2.0: JPOX 1.1
JDO 2.1: JPOX 1.2
JDO 2.2: DataNucleus AccessPlatform 1.0.1
JDO 3.0: DataNucleus AccessPlatform 2.1.0
JDO 3.1: DataNucleus AccessPlatform 3.2.0
JDO 3.2: DataNucleus AccessPlatform 5.2.0
JDO 2.0 : JPOX 1.1
JDO 2.1 : JPOX 1.2
JDO 2.2 : DataNucleus AccessPlatform 1.0.1
JDO 3.0 : DataNucleus AccessPlatform 2.1.0
JDO 3.1 : DataNucleus AccessPlatform 3.2.0
JDO 3.2 : DataNucleus AccessPlatform 5.2.0