Введение

Спецификация интерфейса программирования приложений платформы Java (API) для Java (JCR) — это спецификация интерфейса программирования приложений платформы Java (API) для единообразного доступа к репозиториям контента. Репозитории контента используются в системах управления контентом для хранения данных контента, а также метаданных, применяемых в системах управления контентом (CMS), таких как метаданные версий. Спецификация была разработана в рамках Java Community Process как JSR 170 (версия 1) и JSR 283 (версия 2). Основной пакет Java — javax.jcr.

Обзор

JCR — это тип объектной базы данных, разработанный для хранения, поиска и извлечения иерархических данных. API JCR возник из потребностей систем управления контентом, которым требуется хранение документов и других двоичных объектов с сопутствующими метаданными; однако этот API применим ко многим другим типам приложений. Помимо хранения объектов, JCR предоставляет: API для управления версиями данных; транзакции; отслеживание изменений данных; а также импорт и экспорт данных в XML в стандартизированном формате.

Структура данных

Данные в JCR организованы в виде дерева узлов, у каждого из которых есть связанные свойства. Данные хранятся в свойствах, которые могут содержать простые значения, такие как числа и строки, или двоичные данные произвольной длины. Узлы могут иметь один или несколько типов, определяющих типы допустимых свойств, количество и типы дочерних узлов, а также определенные поведенческие характеристики. Узлы могут указывать на другие узлы посредством специального свойства ссылочного типа. Таким образом, узлы в JCR обеспечивают как референциальную целостность, так и объектно-ориентированную концепцию наследования. К дополнительным типам узлов относится ссылочный тип, позволяющий пользователям ссылаться на данный узел с использованием универсального уникального идентификатора (UUID). Другим распространенным типом является версионный тип. Он позволяет репозиторию отслеживать историю документа и хранить копии каждой его версии.

Вопросы

JCR может экспортировать части своего дерева в XML в двух стандартных форматах и импортировать иерархии непосредственно из XML. Реализации, соответствующие JSR 283, должны поддерживать стандартизированную форму SQL для запросов и объектную модель запросов QOM. JSR 283 признает устаревшим язык запросов XPath, определенный в JSR 170. Референтная реализация Apache Jackrabbit JCR также поддерживает интеграцию с поисковой системой Apache Lucene для обеспечения полнотекстового поиска данных в репозитории.

Доступные варианты реализации

Оба JSR возглавляет Дэвид Нюшелер из Adobe Systems (ранее Day Software). Компания Day имела как коммерческую реализацию JCR под названием Content Repository Extreme (CRX), так и участвовала в разработке JCR Apache Jackrabbit с открытым исходным кодом, релиз 2.0 которой состоялся в январе 2010 года. ModeShape – это еще одна реализация JCR с открытым исходным кодом, поддерживающая JSR 283. Adobe Experience Manager (AEM), Jahia, Hippo CMS и Magnolia – это корпоративные системы управления контентом, построенные на JCR API, использующие Jackrabbit в качестве репозитория по умолчанию, но способные подключать любые другие реализации репозиториев, сертифицированные по JSR 170. JSR 170 также поддерживается Oracle Beehive, корпоративным программным обеспечением Oracle для совместной работы. eXo JCR от eXo Platform – это репозиторий с открытым исходным кодом, предлагающий платную коммерческую поддержку и документацию. Многие другие коммерческие поставщики работают над совместимостью и продуктами JCR. Alfresco – это система управления контентом с открытым исходным кодом, предоставляющая JCR API для доступа к своему репозиторию. GX выпустила новую общедоступную версию своей платформы управления корпоративным контентом (ECM), основанную на Apache Jackrabbit и JSR. Компания TYPO3 начала разработку PHP-адаптации, переводя Java API на PHP. Интерфейсы PHPCR также реализованы в Jackalope – PHP-фронтенде, взаимодействующем с бэкендом Jackrabbit через интерфейс WebDAV, и в Midgard – межъязыковом репозитории контента.