суббота, 5 августа 2017 г.

Brix CMS. Часть 1. Что такое JCR?

CMS (Content Management System) - система для создания и управления контентом (например содержимым сайтов). Brix - CMS фраймворк, в основе которого лежит Wicket и JCR (Apache Jackrabbit). Это один из немногих фрайморков, которые очень просто интегрируются с Wicket, поэтому его использование в дальнейших проектах очень вероятно. К сожалению, разработчики прекратили его поддержку в 2012 году и до этого года проект не развивался. Но сейчас Brix оживает, и разработчики обещают выход 8 версии фрайморка. Текущая версия имеет значительное число недостатков, одним из которых является отсутствие документации. Единственными источниками информации по этому проекту являются страница wiki на github'е и официальный сайт, по большому счету дублирующий информацию с github’а. Не смотря на все трудности попробуем разобраться как он устроен.

Основой большинства CMS является Content Repository. Content Repository можно воспринимать как программу, которая может хранить в структурированном виде (например в виде дерева) файлы, как текстовые, так и бинарные. JCR (Java Content Repository)  - набор спецификаций Java, обобщающий способы работы с Content Repository. Благодаря JCR можно не заботиться о том как хранятся данные, которые используются в CMS. Данные могут храниться или в файловой системе, или в базе данных, или в виде xml файла, у всех будет единый интерфейс доступа. 



Модель Content Repository представляет собой набор workspace’ов, каждый из которых является деревом каталогов. Репозиторий может иметь один или более workspace’ов. Каждый из них является деревом элементов, на подобии дерева файловой системы. Каждый элемент этого дерева может быть либо узлом (Node), либо свойством (Property). Каждый узел имеет только 1 родителя (кроме корневого узла, у него нет родителя) и может иметь 0 или более дочерних узлов и свойств. Каждое свойство имеет только одного родителя (причем родитель только узел) и не может иметь дочерних элементов. Свойства - листья дерева. Вся реальная информация содержится в значениях этих свойств.