Debitoor is hiring. No bureaucracy, no legacy code, no bullshit, fury continuous deployment, trips #js #node #react #mongo
×Закрыть

Обзор Alfresco WCM

Итак, прошло примерно 3 месяца со времени моего знакомства с Alfresco WCM, а если точнее — попытки быстро создать на нем сайт. Русскоязычных материалов по теме мало, и я постараюсь ответить на вопросы, которые возникали у меня в процессе изучения и ответы на которые не лежат на поверхности. Статья показывает возможности применения Alfresco и, вероятно, поможет принять решение использовать эту CMS или нет.

Что такое Alfresco?

Зайдя на wiki.alfresco.com мы можем скачать Community-версию, она бесплатна, на момент написания статьи выпущена версия 3.2. Как система управления веб-контентом, она достаточно просто интегрируется с open-source порталом Liferay и призвана взвалить на себя нагрузку по управлению сложным веб-содержимым. Скачав инсталлятор, можно быстро установить уже сконфигурированную связку MySQL + Alfresco server + Alfresco virtual server. Для портала Liferay можно скачать Alfresco portlet из репозитория и развернуть Alfresco server на том же сервере приложений, что и портал.

Alfresco — это файло-ориентированная CMS, которая может как представлять собой файловую систему, так и расширять общепринятую функциональность через мета-данные, закрепляемые за каждым файлом и папкой.

Первое знакомство

При старте запускается MySQL и Tomcat с Alfresco server (занимает порт 8080, 21), а еще можно запустить Virtual Server (занимает порт 8180). Виртуальный сервер — удобное средство для предпросмотра сайта с наполнением, он обязательно должен быть запущен при работе с WCM.

При изучении документации встречаются обе аббревиатуры ECM и WCM. Enterprise Content Management — это ядро системы. Здесь можно создавать собственные типы данных Custom Content Model, например, тип Сотрудник с полями Имя, Фамилия, Отчество, Кабинет и Дата рождения. Эту часть системы я рассматривал поверхностно, больше копаясь в WCM, который создан как настройка над ECM.

Alfresco имеет свой веб-интерфейс (http://localhost:8080/alfresco/), который на самом деле является клиентом к сервисам ECM и от того позволяет выполнять лишь наиболее популярные действия, 90% конфигурирования и управления системой выполняется в.xml файлах, расположенных в 2х местах: <alfresco_dir>/tomcat/webapps/alfresco/WEB-йINF/classes/alfresco и <alfresco_dir>/tomcat/shared/classes/alfresco/extension. Там же есть множество примеров, и чаще всего эти файлы — конфигурации Spring framework, что сразу означает, что они отнюдь не прозаичны и требуют понимания архитектуры всей системы.

Web Content Management (WCM)

Как сказано в документации — специально для управления веб-содержимым в Alfresco разработан AVM (Advanced Versioning Manager). Это специальная модель, созданная на основе ECM, и представляющая собой версионные Файлы и Папки, плюс дополнительные сервисы. Основная идея состоит в следующем. Есть сайт (Site) и его наполнение. Каждый автор создает содержимое в его собственном хранилище, которое как слой наложено на содержимое сайта. После того как автор создал статью, он делает ей Submit и она идет по потоку утверждения. Когда статья окончательно утверждается, она переносится в общее хранилище и становится видимой всем остальным участникам работы над сайтом. Таким же образом поддерживается версионность документов. Локальные изменения каждого пользователя только после утверждения попадают в общее хранилище.

Этот подход имеет огромные достоинства: каждый автор имеет свой репозиторий, который всегда содержит последние общие обновления и одновременно может видеть свои изменения прямо на сайте. Добавив новость, автор может увидеть ее сразу же на своем виртуальном сайте, а другие участники могут ее увидеть только после утверждения. Однако есть и минусы. На текущий момент не решена проблема конфликтов. При появлении конфликта нет понятия merge, можно только откатить свои изменения. Таким образом, кто первый засабмитил — того и тапки. В версии 3.2 налюдается еще и глюк, когда без отката изменений нельзя засабмитить и другие, не конфликтные, файлы и еще одна проблема сабмита большого количества файлов (опытным путем установлено, что первой волной надо засабмитить только.xml файлы, выждать время, а после — все остальные).

Общее хранилище не является финальным для отображения, для него предусмотрена еще и публикация (deployment) на production-сервер через FSR (File System Receiver). Работает это так. При выполнении команды Deploy, создается событие отправки последних изменений. Дальше не совсем прозаично. У вас должен быть настроен получатель события, а это отдельный java-процесс (.jar и все необходимое можно скачать с официального сайта), который подписывается на deployment-события и выкладывает полученные изменения в локальную файловую систему.

Файловая структура

Alfresco ECM после инсталляции сконфигурирована как продвинутая файловая система с возможностью добавления метаданных к файлам и папкам, спектр которых разнообразен. Это могут быть и события, происходящие при появлении новых файлов в папке, возможность сохранения версий изменений или возможность комментирования.

При использовании WCM eсть нюанс. Через CMIS (протокол SMB, подключение удаленной папки) не доступны репозитории WCM, а только ECM, что означает отсутствие возможности заливать веб-контент через удаленную папку в Windows. Удаленный доступ к репозиториям AVM возможен только через FTP (этот сервис автоматически доступен при старте Alfresco), который корректно работает с русскими буквами.

Web Forms

Главная функция для веб-CMS, это создание и отображение содержимого сайта. Для этого в Alfresco используются веб-формы. Структура контента определяется в xml-схемах (.xsd файлы), наполнение сохраняется в формате xml, соответствующим этим схемам, а представление может быть отрендерено в разные форматы, чаще всего в html.

А теперь важный архитектурный момент. Рендеринг введенных пользователем данных осуществляется в момент ввода, — то есть когда пользователь создал контент типа Новость и заполнил все поля, создается несколько файлов. Например, novogodnie-skidki.xml, novogodnie-skidki.html, novogodnie-skidki-short.html, где первый содержит наполнение в xml (исходные данные), второй — «новость подробно» и третий — «новость кратко», скажем, для главной страницы. Для рендеринга используются FreeMarker template или XSLT преобразования. С успехом мы можем рендерить и.jsp страницы, располагать их в разных директориях и пр.

Процесс рендеринга — на удивление медленный и ресурсоёмкий. Если выполнить перегенерацию всего контента, это может происходить минут 5 для 100 элементов.

Существует возможность на этапе преобразования использовать любые средства — обрабатывать списки контента, делать включение других шаблонов, использовать.jsp файлы, вызывать alfresco web-scripts, другими словами, можно создать абсолютно любой контент.

Важно понимать, что рендеринг наполнения происходит на этапе создания контента, а это говорит о следующем: созданный.html контент статичен (исключение — рендеринг.jsp страниц).

Еще один минус — при работе с репозиторием через стандартный веб-клиент Alfresco автор видит как нужные ему файлы (.xml), так и их представление.html, а чаще — еще и вспомогательные,.jsp и другие ресурсы. Как этого избежать, я так и не нашел.

Архитектура веб-приложения

Alfresco создает статический контент. На этом ее функции по созданию веб-сайтов заканчиваются. Alfresco предлагает свой Web Framework, но он крайне сложный. Чтобы упростить работу с ним, выпущен визуальный построитель сайтов Alfresco Surf platform, но даже в релизе (!) он глючит и не может получить из Alfresco список веб-контента. За разумное время мне не удалось сделать ничего толкового и было принято решение отказаться от его использования. Дальше описаны несколько наиболее применимых архитектур веб приложений.

Первый вариант создания сайта — чистый plain text и отсутствие динамики, который хорошо подойдет к маленьким сайтам-визиткам, где достаточно отрендерить всё в html и, возможно, сделать часть динамических страниц через.jsp. При этом деплоиться сайт может, например, в /tomcat/webapps/ROOT. Списки новостей могут так же рендериться на этапе добавлении новости и отображаться как статическая страница. Скорость работы такого сайта стремится к первой космической, а нагрузка на сервер — к нулю.

Второй вариант — использование фреймворка, который хорошо бы работал с уже сгенерированными страницами, например SiteMesh. В этом случае достаточно просто создавать страницы.html с уже сформированными на основе контента мета-данными (title, description, keywords).

Третий вариант — использование Alfresco web-scripts для формирования страниц.

Поиск

Поиск — это ключевой компонент Alfresco, потому что только с помощью поиска можно выполнить выборку контента. Вероятно по этому видов поиска достаточно много:
  • Open Search — доступен из веб-интерфейса, ищет только по репозиторию ECM, поэтому даже не пытайтесь найти свой первый helloworld.html в WCM репозитории;
  • Lucene — наиболее мощный вид поиска, досупен только из web scripts или джавы;
  • XPath — последовательный обход дерева элементов, что означает низкую производительность
  • CQL — обещают возможность описывать поисковые запросы по модели данных ECM в синтаксисе SQL — практического применения не видел.
Из всего списка реально применим только Lucene, у него широкие возможности поиска по атрибутам и метаданным документа, но по умолчанию содержимое всех документов (и даже xml) считается сплошным текстом, что создает сложности, если мы хотим найти наличие определенного поля в документе. С другой стороны, сразу можно искать по таким полям как имя, путь к файлу, дата создания/модификации и некоторым другим.

Ограничением поиска Lucene является возможность искать только в общем репозитории утвержденного контента, т. е. пользовательские хранилища не доступны для поиска.

Web scripts

Веб-скрипты в Alfresco заслуживают отдельного внимания. Это модель MVC, один из немногих удобных механизмов, а Alfresco, который представляет собой связку javascript + FreeMarker templates. Каждый скрипт имеет привязку к шаблону URL, наподобие grails, например /news/ {year}?/ {newsName}?. При запросе этого адреса выполняется javascript, в котором доступны почти все сервисы Alfresco. Результат рендерится в шаблонах FreeMarker.

Производительность не замерял, но на взгляд она не плоха, учитывая даже что javascript и FreeMarker преобразования выполняются при каждом вызове url и являются скриптами.

Есть одна радость — эту связку можно хоть как-то тестировать, чего не скажешь об остальных средствах.

Самое время обрадоваться наличию такой технологии, но и тут ложка дегтя — очень тупо реализованный <include> джаваскрипта. Если хочется хоть какую-то архитектуру создать, то придется делать включения нескольких javascipt-файлов, что реализовано... простым добавлением всех скриптов в один большой StringBuffer в памяти и ошибки выполнения содержат неожиданные номера строк. В этой ситуации выручает имеющийся javascript-debugger — отдельное Swing приложение, где даже можно посмотреть все сигнатуры сервис-методов.

Metadata extraction

Представим такую ситуацию. У нас есть тип веб-контента Новости, нам необходимо указать отображать ли эту новость на главной странице сайта или же только в общем списке. Другими словами нам нужно добавить к контенту некий признак, наличие которого означало бы необходимость опубликовать новость на главной странице. Мы можем добавить этот признак в метаданные документа, либо сделать его полем xsd структуры Новости. Если мы добавим признак в метаданные, то он будет потерян при копировании через FTP или деплое в файловую систему через FSR. Если мы добавим поле в тип Новости, то его нельзя будет найти поиском. В этом случае на помощь приходит механизм Metadata extraction — возможность настроить Lucene таким образом, чтобы при индексации контента он изымал некоторые поля из xml, чтобы можно было написать в поисковом запросе что-то вроде «+ASPECT: {cm} showOnHomePage» и найти только те новости, которые нам нужны. Идея хороша, но достаточно сложна в реализации несмотря на наличие описаний.

Alfresco + Liferay

Alfresco, собранную для развертывания на сервере Liferay, можно скачать из репозитория Liferay. Эта сборка включает в себя Alfresco сервер, веб-клиент, портлеты для отображения контента, администрирования и задач пользователя. Сложностей с запуском — никаких, но интеграция не полная. Не поддерживается единый вход в систему SSO (Single Sign-on). В гугле можно найти примеры полной интеграции — при регистрации пользователя в портале, он создается в Alfresco и есть возможность отображать веб-скрипты и контент под правами текущего пользователя портала. Но как показывает практика, часто это и не нужно.

Выводы

Статья может содержать неточности, будем надеяться, что это я что-то не до понял и не до читал, и есть более верные и красивые способы работы с Alfresco. Резюмируя, можно отметить следующее:
  • можно легко и быстро создавать контент, тяжело из него сделать сколь-нибудь удобный сайт;
  • автоматическое тестирование практически невозможно;
  • очень слабые возможности при работе с уже созданным содержимым — только обзор директорий, файлов и поиск;
  • заявлено много рекламных решений, которые на проверку оказываются пустышками
  • наличие большого количества багов в самой системе, что свидетельствует об отношении к тестам разработчиков, и сразу же о вашей возможности тестировать свой продукт, построенный на Alfresco.
Мой личный рейтинг CMS Alfresco — 3/5.
  • Популярное

11 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

WCM — составная часть ECM, не надо путать понятия. Реализация WCM в Alfresco пока весьма глючная. Задуман весьма мощный продукт, но сейчас все работает через пень колоду. Мне тоже не удалось перевести сайт в продакшн. Постоянно отдепленному сайту чего-то не хватало, то фильтр не мог загрузить, то jsp откомпилировать. Никаких инструкций нормальных я тоже не нашел. после deploy пришлось вручную правит конф. файлы. В общем, пока WCM в Alfresco то, что называется «мы не ищем легких путей»... Но зато потенциал, какой:) Если глюки уберут:)

Точно.Alfresco — это JSR 170."Alfresco is built on standards such as REST, RSS, Atom publishing, JSON, OpenSearch, OpenSocial, OpenID, Web Services, JSR 168, JSR 170 Level 2, MyFaces, CIFS, FTP, WebDAV, SQL and ODF."

Alfresco это не она из реализаций JCR?

Также добавлю свои «5 копеек» и плюсы Alfresco: 1) в сравнении с предыдущими версиями, в версии 3.2 основательно поработали над Lucene поиском, теперь это грозное оружие (в отличиии от Lucene в версии 2.9, например). Немножко почитать и начинать можно отсюда: http://wiki.alfresco.com/wiki/...2) аналогично можно поставить «+» и CQL (CMIS SQL), но в связи с тем что это решение еще новое, то этот язык предоставляет не очень широкий спектр объектов и их свойств для выборок (в отличии от Lucene где я могу выбрать что хочу и по любым свойствам), но то что уже есть это что-то (http://wiki.alfresco.com/wiki/...). Надеюсь они будут дальше развивать CQL.3) Ну и WebScript — это дно из грознейших оружий Alfresco + легко стартовать для тех, кто знает JavaScript. Очень нравиться с их помощью организовывать RESTful сервисы.

У Nuxeo ECM мало документации, но если это не проблема, то можно попробовать ее. В отличии от Alfesco у них более уважительное отношение к своему сообществу. У Alfesco Community Edition это тестовая версия, в которая после исправления ошибок становиться коммерческой. Т.е. я, к примеру, больше склоняюсь к модели Nuxeo, у которой разница только в функциональных возможностях, но платформы код общий.

Википедия говорит, что есть еще Nuxeo, Jahia, OpenCMS.Кто с ними работал? Не являются ли они достойнимы бесплатными альтернативами?

Мы (itdt.ru) использовали и до сих пор используем OpenCMS. По идеологии вроде как нормально, но мне что-то не совсем нравится. Немного работал. Наше руководство в восторге. Только на нём и пишем, как CMS. Да, говорят, что есть только простейшие модули в нём. Если дело коснётся более сложных — нужно разрабатывать самим.

Привет, Максим.Почитал комментарии и решил вставить свои 5 копеек.Думаю, нужно сделать упор на том, что Alfresco — это прежде всего ECM, т.е. Enterprise Content Management: Alfresco имеет смысл использовать, если действительно нужно ECM, а не CMS или WCM. И, насколько мне известно, достойных бесплатных альтернатив Alfresco в области ECM нет.О том, что такое ECM, есть неплохой документ: http://www.project-consult.net/Files/ECM_White%20Paper_kff_2006.pdf

Для управление корпоративными веб-порталами и базами знаний есть ряд решений серьёзных фирм начиная отMicrosoft (SharePoint Server) — не дешёвое решение как по цене, так и в обслуживании и заканчивая 1С Bitrix редакции «Корпоративный портал» — приемлема по цене и стоимости обслуживания специалистами. Данный open source не использовал в работе, попробовать можно как будет свободное время:) только вот думаю на фоне других CMS, CMF стоит ли ждать от увиденного чего то нового — это вопрос:) P.S. кроме того что это бесплатно (как всегда пока из этого не получиться чего то путнего, тогда и появиться уже платная более доработанная ветка данного продукта:)

так, а что посоветуете? сразу бы уж сказали:)

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

так, а что посоветуете? сразу бы уж сказали:)

Подписаться на комментарии