В июле 2000 года корпорация Sun Microsystems представила технологию доступа к данным, которая способна оказать серьезное влияние на практику создания Java-приложений. Технология, стандартизованная под названием JDO (Java Data Objects), предусматривает моделирование реальных бизнес-объектов посредством автоматического управления взаимодействием объектов и менеджеров ресурсов. При традиционной разработке используются специфические, необъектные API-интерфейсы доступа наподобие JDBC. С появлением JDO получат стандартизованную альтернативу.

Чтобы реализовать приложение корпоративного уровня на языке Java, часто требуется доступ к долговременно хранимым данным, традиционно размещаемым в базах данных. Сейчас, как правило, в коде приложения используется API-интерфейс JDBC, который позволяет передавать SQL-запросы базе данных. Когда данные располагаются в иерархической базе данных, на мэйнфрейме или в системе ERP (enterprise resource planning — «планирование ресурсов предприятия»), обычно используется API-интерфейс, соответствующий конкретному менеджеру ресурсов. (Под менеджером ресурсов здесь понимается любая подсистема, управляющая доступом к ресурсам, размещенным вне виртуальной машины, исполняющей Java-приложения.) Как правило, к ним относятся СУБД (реляционные, объектные или другие), системы ERP, транзакционные системы на мэйнфреймах. Данные передаются в приложение в виде символьных цепочек и/или простых типов (дата, целое и т.д.) и обрабатываются в том же формате.

Этот подход остается на сегодняшний день самым популярным, однако, все большее число пользователей отдают предпочтение решению, непосредственно ориентированному на бизнес-объекты. Такое решение предполагает определение объектного представления системных данных. На практике это требует программирования классов Java для представления на уровне приложения различных данных, с которыми работают менеджеры ресурсов. При исполнении приложения эти данные появляются в памяти в виде сложных объектов Java, представляющих поведение высокого уровня.

Такой подход позволяет реализовать преимущества объектной технологии при моделировании сущностей: модульность, расширяемость, инкапсуляция и т.д. Вместе с тем он требует использования менеджера долговременного хранения объектов, роль которого состоит в установлении соответствия между бизнес-объектами в памяти и механизмом поддержки долговременного хранения (менеджером ресурсов). Эта подсистема абсолютно необходима; совершенно очевидно, что поддержание долговременного хранения объектов вручную становится абсолютно нереальным, как только сложность системы достигает определенного уровня.

Однако есть и исключение: если используемый менеджер ресурсов представляет собой объектную СУБД, поддерживающую Java, тогда долговременное хранение объектов уже обеспечено и дополнительного модуля не требуется. При использовании реляционной СУБД роль менеджера долговременного хранения объектов будет играть так называемый модуль «объектно-реляционного соответствия» (O/R Mapping, самыми известными продуктами в этой области являются TopLink и CocoBase).

Java Data Objects

JDO — спецификация, созданная рядом ведущих компаний отрасли во главе с Sun Microsystems. Ее цель состоит в том, чтобы предложить стандартный API-интерфейс, который дает возможность использовать менеджера долговременного хранения бизнес-объектов. Таким образом, эта спецификация касается и инструментария объектно-реляционного соответствия, и объектных СУБД, и коннекторов данных систем ERP. В некоторой степени он также определяет стандартный способ интеграции службы управления долговременным хранением объектов с сервером приложений.

Таким образом, JDO объединяет методы доступа к данным, скрывая специфику отдельных менеджеров ресурсов, по крайней мере, до той степени, которую предполагает парадигма долговременного хранения бизнес-объектов. С технической точки зрения, основу данного механизма составляют следующие две функции.

  • Долговременное хранение объектов. JDO автоматически управляет синхронизацией данных, представляемых уровнем бизнес-объектов и базовыми менеджерами ресурсов.
  • Поддержка транзакций. Данная функциональность, тесно связанная с долговременным хранением, дает разработчикам приложений возможность управлять графом объектов в терминах транзакций (принятие и отказ от транзакций над графом объектов) с автоматическим управлением транзакциями, за которое отвечают менеджеры ресурсов.

При использовании JDO процесс разработки приложений можно разделить на три этапа:

  • создание бизнес-объектов;
  • конфигурирование соответствия между объектами и менеджером данных;
  • создание кода приложений, опираясь на бизнес-объекты.

Благодаря механизму JDO разработчик может отказаться от необходимости напрямую работать с оригинальными интерфейсами, чтобы получить доступ к различным менеджерам ресурсов; модуль JDO управляет взаимодействием между уровнем объектов и базовыми менеджерами. В итоге, становится возможным использовать преимущества, которые предлагает объектно-ориентированный подход к разработке программного обеспечения.

Конфигурирование соответствия — важный этап, который может оказаться и довольно сложным. Этот этап требует понимания принципов работы, управляющих используемым менеджером данных. Например, в случае реляционной СУБД для каждого поля объекта указывают столбцы в базе данных, поддерживающей долговременное хранение объектов, определяя способ, с помощью которого в базе данных представляется наследование, устанавливается, как ограничения реляционной целостности должны учитываться на объектном уровне. С другой стороны, если используется объектная СУБД, этот этап практически полностью пропускается, поскольку модель данных объектной базы напрямую соответствует объектной модели Java. Необходимо отметить, что JDO не определяет способ выполнения конфигурирования соответствия, в силу чего оно может быть разным в различных реализациях JDO.

Поддержка моделирования бизнес-объектов

Основная задача JDO — обеспечение поддержки моделирования бизнес-объектов. В данном контексте данный механизм предлагает относительно прозрачную модель долговременного хранения: разработчикам классов необязательно писать специальный код, чтобы обеспечить долговременное хранение объектов. При исполнении задействуется механизм долговременного хранения «по ссылке» (by reference): объект делается долговременно хранимым сразу, как только на него ссылается другой объект, который уже является долговременно хранимым. Естественно, для «корневых» объектов предусматривается своеобразная процедура инициализации. Некоторые объекты, впрочем, невозможно сделать долговременно хранимыми; системные объекты, такие как Exception, Thread и Socket, к примеру, нельзя с помощью JDO превратить в долговременно хранимые.

JDO поддерживает сложное агрегирование объектов; в этом и состоит отличительная особенность объектно-ориентированного моделирования. Кроме того, объекты сохраняются в памяти инкрементально: из менеджера ресурсов в память записываются только те объекты, которые действительно используются приложением. Это крайне важно, если добиваться приемлемой производительности.

При использовании технологии, подобной JDO, позволяющей представлять данные предприятия в виде объектов, на языке Java формулируются самые разные процессы. Чтобы этого добиться, в программах необходимо иметь доступ к долговременно хранимым объектам, представляющим эти данные. Фактически, чтобы обращаться к другим объектам, необходимо иметь доступ, по крайней мере, к одному объекту в графе. Предварительное извлечение объекта выполняется с помощью языка запросов, определенного в JDO. Этот язык может применяться, к примеру, для выбора всех объектов Employ («Работа»), соответствующих определенному критерию. Язык запросов, о котором идет речь, использует похожий на Java синтаксис, но со значительными ограничениями (например, в нем отсутствуют вызовы методов). Он формулирует условия на объекты, которые с помощью JDO автоматически транслируются в форму, понятную для нижележащих менеджеров ресурсов, и задают детали того, как выполняются операции выбора (например, порядок «выбора» SQL, если используется реляционная СУБД).

В отличие от технологии Enterprise JavaBeans (EJB), механизм JDO поддерживает работы с объектами с глубоко детализированной структурой.

Другие задачи JDO

Спецификация JDO создана для реализации метода доступа к данным, который не требует знания специального языка доступа, как это происходит в случае с JDBC, когда для обращения к данным необходим SQL.

Архитектура JDO призвана упростить разработку масштабируемых систем. Вместе с тем, одна из целей JDO состоит в том, чтобы упростить разработку приложений, осуществляющих защищенные транзакции. Поддержка транзакций, удовлетворяющих условиям ACID (Atomicity, Consistency, Isolation, Durability — «атомарность, целостность, изолированность, долговечность»), составляет основу функционирования JDO; благодаря этому обеспечивается координация и синхронизация между уровнем объектов и базовыми менеджерами ресурсов посредством транзакций. В этом контексте можно сказать, что JDO интегрирует в себе функциональность OTM (Object Transaction Monitor).

Спецификация JDO предназначена для работы с самыми разными менеджерами ресурсов: файловыми системами, всеми видами баз данных, системами ERP, мэйнфреймами и т.д. Разработчики JDO рассчитывают на появление множества реализаций этой технологии, предлагающих широкий выбор менеджеров ресурсов, ориентированных на конкретные предметные области или определенную операционную среду.

JDO не ограничивается корпоративными приложениями, работающими в среде сервера приложений, она также рассчитана на встроенные и автономные приложения.

Спецификация разработана таким образом, чтобы позволить приложениям JDO оптимально работать в конкретной среде (в частности, с конкретным менеджером ресурсов), в то же время предлагая разработчикам приложений уникальный API-интерфейс.

Механизм JDO задумывался таким образом, чтобы предоставить возможность интегрировать его в серверы приложений на платформе J2EE. Это стало возможным благодаря использованию в JDO архитектуры J2EE Connector Architecture. Более того, реализация JDO должна обладать способностью непосредственно интегрироваться в самые разные серверы приложений.

Выводы

JDO открывает путь к реальной стандартизации инструментальных средств соответствия между объектными и реляционными средами и объектных СУБД. Тот факт, что этот механизм не ограничивается рамками J2EE, особенно важен; JDO будет интегрироваться с платформами J2EE — но не только с ними. Более того, JDO — не гарантия приобретения сертификата J2EE, поскольку эта спецификация выходит далеко за рамки того единообразия, которое могут предложить редакторы данных J2EE. Короче говоря, JDO представляет продуманную спецификацию, предназначенную для специалистов по объектам. Спецификацию ожидает яркое будущее.

С момента создания JDO ее все чаще и чаще противопоставляют EJB. По нашему мнению, JDO представляется удобным инструментом для моделирования бизнес-объектов. В отличие от Entity EJB, JDO поддерживает сложные взаимосвязи между объектами (соединение, наследование), а также объекты с очень детализированной структурой. JDO предлагает простые объекты Java вместе со службами долговременного хранения и поддержки транзакций, тем самым упрощая разработку объектных моделей. В то же время, Entity EJB обеспечивают дополнительные службы, которые, впрочем, не всегда оказываются востребованными.

Тем не менее, одновременное применение EJB Session Beans для защиты и распространения и механизма долговременного хранения и поддержки транзакций над простыми объектами Java, подобного JDO, оказывается крайне полезным решением для реализации проектов корпоративного уровня. Оно позволяет избежать достаточно сложных и избыточных аспектов стандарта EJB (вызовы JNDI, дескрипторы развертывания Entity EJB и т.п.) и дает возможность использовать семантику объектов Java для обеспечения реального уровня прозрачности.

В заключение напомним, что спецификация JDO в первую очередь рассчитана на производителей серверов приложений, производителей инструментальных средств соответствия между объектными и реляционными средами, прикладных пакетов и промежуточного программного обеспечения. Корпоративным разработчикам пока слишком рано использовать JDO в качестве основы для создания критически важных приложений по двум причинам. Во-первых, реализации JDO (интегрированные с серверами приложений или автономные) пока еще не представлены. Во-вторых, адаптеры ресурсов JDO Resource Adapter пока также отсутствуют. Однако что касается инструментария объектно-реляционного соответствия, отношение разработчиков программного обеспечения к JDO учитывать. n

Статья подготовлена аналитиками исследовательской компании TeсhMetrix Research (info@techmetrix.com)


Close-up on JDO: A Standard for Persistence of Java Business Objects. TrendMarkers, Vol. 3, No. 2, 2001. Techmetrix Research. All rights reserved. Reprinted with permission.


Достоинства
  • Поддержка сложных взаимосвязей между объектами (объединение, наследование)
  • Поддержка объектов с глубоко детализированной структурой
  • Единый механизм поддержки долговременного хранения объектов
Недостатки
  • JDO не указывает, как выполняется конфигурирование соответствий, в силу чего оно может варьироваться
  • На сегодняшний день не существует серьезных реализаций JDO

Полезные ссылки

Спецификации JDO http://java.sun.com/aboutJava/communityprocess/ review/jsr012/index.html

Дискуссии о JDO и EJB http://theserverside.com/discussion/thread.jsp?thread_id=771

Инструменты управления долговременным хранением объектов

TopLink http://www.webgain.com/products/toplink/

Cocobase http://www.thoughtinc.com/cber_index.html

CastorJDO http://castor.exolab.org/jdo.html