Не секрет, что данные являются основой практически для любого проекта. На основе требований к программной системе строится модель данных. В дальнейшем именно с данной моделью работает программа, вводится некоторая информация, производятся вычисления, формируются отчеты и т. д. В процессе развития программных систем проектировались и используются различные системы управления базами данных (СУБД), иерархические, реляционные, объектные и др.
На практике наибольшую популярность получили именно реляционные модели баз данных, хотя в современных методологиях программирования пользуется популярностью объектно-ориентированное программирование. Для стыковки данных технологий разработано множество технологий, спецификаций и фреймворков для маппинга объектов на таблицы реляционных баз данных. Java разработчикам доступно множество технологий для работы с данными это может быть просто сереализация объектов, JDBC, JDO и множество других. Но каждая из них имеет ряд достоинств и недостатков.
Таблица 1. Основные технологии хранения данных в java
Поддержка | Сериализация | JDBC | ORM | ODB | EJB2 | JDO | JPA |
---|---|---|---|---|---|---|---|
Java Объекты | Есть | Нет | Есть | Есть | Есть | Есть | Есть |
Объектно ориентированный подход | Есть | Нет | Есть | Есть | Нет | Есть | Есть |
Танзакционность | Нет | Есть | Есть | Есть | Есть | Есть | Есть |
Параллелизм | Нет | Есть | Есть | Есть | Есть | Есть | Есть |
Работа с наборами данных | Нет | Есть | Есть | Есть | Есть | Есть | Есть |
Схема данных | Нет | Есть | Есть | Нет | Есть | Есть | Есть |
Хранение данных в реляционном и нереляционном форматах | Нет | Нет | Нет | Нет | Есть | Есть | Нет |
Поддержка запросов к данным | Нет | Есть | Есть | Есть | Есть | Есть | Есть |
Переносимость и жесткие стандарты | Есть | Нет | Нет | Нет | Есть | Есть | Есть |
Простота | Есть | Есть | Есть | Есть | Нет | Есть | Есть |
Сериализация (Serialization) является встроенным механизмом хранения и передачи объектов в Java. Но для практической работы с данными данный подход мало пригоден, так как требуется извлекать и хранить весь граф объектов, что затрудняет работу с большими объемами данных.
Java Database Connectivity (JDBC) Application programming interface (API) разрабатывался для работы с реляционными базами данных. Минусом данной технологии является отсутствие механизмов проекции реляционных данных на объекты, что существенно увеличивает объем кода для данного преобразования.
Object-relational mapping (ORM) представляет собой попытки различных поставщиков маппинга объектов на реляционные данные. Отсутствие стандартов привело к созданию множества реализаций данного подхода несовместимых друг с другом. Как результат код становится непереносимым и жестко завязаннм на конкретного поставщика.
Object databases (ODB) представляют собой объектные реализации баз данных. Как и в случае с ORM здесь множество реализаций, несмотря на попытки Object Database Management Group (ODMG) создать и стандартизировать API для доступа к объектным базам данных.
Enterprise Java Beans (EJB) введены в Enterprise Edition платформе Java уровня предприятия. Сущности EJB 2 представляют собой компоненты для хранения в хранилищах данных. Данная технология позволяет работать с данными на уровне объектов. Варианты физического хранения данных не лимитированы только реляционными базами данных. К сожалению, в стандарте EJB 2.x лимитирован объектно-ориентированный подход. Это выражается в отсутствии или сложности реализации таких важных функций как наследование, полиморфизм и внешние связи объектов. Дополнительные проблемы возникают из-за необходимости применения дорогих и “тяжеловесных” серверов.
Спецификация JDO на текущий момент является одной из самых прогрессивных и позволяет использовать не только реляционные, но и объектные хранилища данных.
Java Persistence API (JPA) сочетает в себе простоту сериализации объектов с возможностью работы с данными на уровне объектно-ориентированной модели. При этом остается возможность комбинирования доступа к данным как в JDBC на уровне реляционных данных, что позволяет порой достичь большей производительности и гибкости по сравнению с JDO.
На текущий момент существует множество реализаций спецификации JPA, как коммерческих, так и свободных с открытым исходным кодом(open source).