Огляд Alfresco WCM, DOU
Отже, минуло приблизно 3 місяці з часу мого знайомства з Alfresco WCM, а якщо точніше, спроби швидко створити на ньому сайт. українськомовних матеріалів на тему мало, і я постараюся відповісти на питання, які виникали у мене в процесі вивчення та відповіді на які не лежать на поверхні. Стаття показує можливості застосування Alfresco і, ймовірно, допоможе ухвалити рішення використовувати цю CMS чи ні.
Що таке Alfresco?
Alfresco - це файло-орієнтована CMS, яка може являти собою файлову систему, так і розширювати загальноприйняту функціональність через мета-дані, що закріплюються за кожним файлом і папкою.
Перше знайомство
Під час вивчення документації зустрічаються обидві абревіатури ECM і WCM. Enterprise Content Management – це ядро системи. Тут можна створювати власні типи даних Custom Content Model, наприклад, тип Співробітник з полями Ім'я, Прізвище, По-батькові, Кабінет та Дата народження. Цю частину системи я розглядав поверхово, більше копаючись у WCM, створений як налаштування над ECM.
Web Content Management (WCM)
Загальне сховище не є фінальним для відображення, для нього передбачено ще й публікацію (deployment) на production-сервер через FSR (File System Receiver). Працює так. При виконанні команди Deploy створюється подія відправки останніх змін. Далі не зовсім прозаїчно. У вас має бути налаштований одержувач події, а це окремий java-процес (.jar і все необхідне можна завантажити з офіційного сайту), який підписується на deployment-події та викладає отримані зміни до локальної файлової системи.
Файлова структура
При використанні WCM є нюанс. Через CMIS (протокол SMB, підключення віддаленої папки)не доступні репозиторії WCM, а тільки ECM, що означає відсутність можливості заливати веб-контент через віддалену папку Windows. Віддалений доступ до репозиторій AVM можливий лише через FTP (цей сервіс автоматично доступний при старті Alfresco), який коректно працює з українськими літерами.
Нині ж важливий архітектурний момент. Рендеринг введених користувачем даних здійснюється в момент введення, тобто, коли користувач створив контент типу Новина і заповнив всі поля, створюється кілька файлів. Наприклад, novogodnie-skidki.xml, novogodnie-skidki.html, novogodnie-skidki-short.html, де перший містить наповнення в xml (вихідні дані), другий - "новина докладно" і третій - "новина коротко", скажімо, для головну сторінку. Для рендерингу використовують FreeMarker template або XSLT перетворення. З успіхом ми можемо рендерувати і.jsp сторінки, розташовувати їх у різних директоріях та ін.
Процес рендерингу - напрочуд повільний і ресурсомісткий. Якщо виконати перегенерацію всього контенту, це може відбуватися 5 хвилин для 100 елементів.
Існує можливість на етапі перетворення використовувати будь-які засоби - обробляти списки контенту, робити включення інших шаблонів, використовувати файли jsp, викликати alfresco web-scripts, іншими словами, можна створити абсолютно будь-який контент.
Важливо розуміти, що рендеринг наповнення відбувається на етапі створення контенту, а це говорить про наступне: контент, що створений.html, статичний (виключення — рендеринг.jsp сторінок).
Архітектура веб-програми
Перший варіант створення сайту - чистий plain text і відсутність динаміки, який добре підійде до маленьких сайтів-візитівок, де достатньо відрендерити все в html і, можливо, зробити частину динамічних сторінок через .jsp. ПриПри цьому сайт може бути, наприклад, в /tomcat/webapps/ROOT. Списки новин можуть також рендеруватися на етапі додавання новини та відображатися як статична сторінка. Швидкість роботи такого сайту прагне першої космічної, а навантаження на сервер до нуля.
Другий варіант — використання фреймворку, який добре працював би з вже згенерованими сторінками, наприклад SiteMesh. У цьому випадку досить просто створювати сторінки.html з уже сформованими на основі контенту мета-даними (title, description, keywords).
Третій варіант – використання Alfresco web-scripts для формування сторінок.
Обмеженням пошуку Lucene є можливість шукати тільки в загальному репозиторії затвердженого контенту, тобто користувальницькі сховища не доступні для пошуку.
Web scripts
Продуктивність не заміряв, але на погляд вона не погана, враховуючи навіть, що javascript і FreeMarker перетворення виконуються при кожному виклику url і є скриптами.
Є одна радість — цю зв'язку можна хоч якось тестувати, чого не скажеш про інші засоби.
Саме час зрадіти наявності такої технології, але й тут ложка дьогтю – дуже тупо реалізований джаваскрипт. Якщо хочеться хоч якусь архітектуру створити, то доведеться робити включення кількох javascript-файлів, що реалізовано. простим додаванням всіх скриптів в один великий StringBuffer у пам'яті та помилки виконання містять несподівані номери рядків. У цій ситуації рятує наявний javascript-debugger - окремий Swing додаток, де навіть можна подивитися всі сигнатури сервіс-методів.