Pull to refresh

Spring в действии — пробуем opensource CMS на Java

Reading time 5 min
Views 33K
В данной статье речь пойдёт о системе управления содержимым Riot, написанной на Java. Система основана на Spring Framework, использует Ajax.

web developer at work

Я приведу основные возможности системы и пошагово расскажу, как её установить. Статья адресована всем тем, кто интересуется системами управления содержимым на Java.


Содержание


Что такое Riot
  • Основные характеристики
  • Системные требования
  • Используемые библиотеки
  • Документация

Создание нового Riot проекта
  • Русификация Riot
  • Настройка подключения к БД
  • Ошибки, возникшие во время установки


Что такое Riot


Riot — это opensource фреймворк для построения веб-приложений.

Конечные пользователи могут рассматривать систему как CMS, но с позиции разработичика Riot — это скорее Content Management Framework (CMF), так как система не предлагает решения из коробки (out-of-the-box). Riot представляет собой каркас веб-приложения, основанный на opensource технологиях, наиболее значимые из которых Spring и Hibernate.

Основные характеристики:

  • возможность редактировать контент напрямую на странице, используя Ajax-интерфейс;
  • возможность управлять бизнес-объектами (domain objects) из администраторского раздела вне зависимости от их происхождения (Hibernate, JPA, custom DAO);
  • поддержка многоязычности как в интерфейсе, так и в содержимом;
  • поддержка модулей;
  • поддержка мультисайтинга;
  • настраиваемые шаблоны оформления, возможность управлять блоками содержимого прямо на сайте;
  • управление пользователями;
  • красивые урлы вида site.com/level1/level2/../page.html;
  • возможность интегрирования в существующие приложения.

Системные требования:

  • работает на любой платформе с установленной Java-машиной от версии 1.5;
  • использует сервлет-контейнеры, поддерживающие спецификацию 2.5;
  • для доступа к данным использует Hibernate, что даёт возможность выбирать СУБД из набора доступных;
  • некоторые функции требуют наличия библиотеки ImageMagick, которая также доступна на большинстве платформ.

Используемые библиотеки:

  • Spring Framework — в качестве IoC-контейнера и web MVC фреймворка;
  • ORM фреймворк Hibernate;
  • шаблонизатор FreeMarker;
  • Direct Web Remoting — библиотека, позволяющая коду Javascript в браузере взаимодействовать с Java-объектами на сервере. Линейка инструментов сайта (Riot Toolbar) использует DWR для создания пользовательского интерфейса на Ajax;
  • Apache Ant — java-утилита для автоматизации процесса сборки программного продукта;
  • Ivy — менеджер определения зависимостей, отличающийся гибкостью и простотой.

Документация:

Документации на систему немного. Разработчики riot настаивают на том, что система базируется на известных хорошо документированных технологиях и разобраться с надстройками riot'а будет нетрудно. Есть группа в гугл, в которой происходит обсуждение системы, есть online JavaDoc и fmdoc.

Создание нового Riot проекта


Создавать новый проект будем в Эклипсе (с установленным плагином Web Standard Tools). Если вы не хотите использовать IDE, просто создайте новую папку будущего проекта.
web developer at work
В созданной папке разместите следующий ant-файл setup.xml и запустите цель по-умолчанию
(wget http://riotfamily.org/setup.xml && ant -f setup.xml).


Setup.xml cкачивает файл www.riotfamily.org/setup/skeleton-8.0.zip и распаковывает его. Выполняет ant-скрипт skeleton.xml. Удаляет skeleton.xml, setup.xml, skeleton-8.0.zip.

Выполнение файла skeleton.xml.
Файл проверяет, был ли создан проект в Eclipse, и если да, то скрипт патчит несколько конфиг-файлов в IDE. (например, папка build/conf добавляется в список source folders). После этого вызывается процедура setup файла build.xml, которая выполняет разрешение зависимостей с помощью Ivy и строит проект. У меня построение проекта заняло около 15 минут, за них иви вытянул одиннадцать мегабайт библиотек.

После того, как завершится построение проекта, обновите структуру проекта из Эклипса для того, чтобы увидеть файлы, загруженные во время создания проекта.
web developer at work
Если вы не используете редактор, для создания WAR-файла воспользуйтесь командой «ant war».

Созданный war-файл разместите в папку webapps Томката и перезапустите сервер.

Сайт по-умолчанию будет доступен по адресу localhost:8080/<context>/.
Админ панель будет доступна по адресу localhost:8080/<context>/riot.
Username: admin
Password: admin
web developer at work
Русификация Riot

Riot использует кодировку utf8, но для того, чтобы система стала понимать кириллицу, нужно проверить несколько настроек приложения.
  1. Проверить кодировку СУБД. Для MySQL мне пришлось в файле my.cnf (my.ini) писать:
    character-set-server = utf8
    collation-server = utf8_general_ci
  2. Для корректного преобразования текста в картинку (пакет org.riotfamily.website.txt2img) подключить в файле riot-config/website-servlet.xml кириллические шрифты (например этот);
  3. Для перевода меню админки в адресную строку браузера введите команду javascript:void(frameset.toggleI18n()), после чего возле каждой надписи появится жёлтая кнопка [l18n]. Жмите на неё и переводите меню.

web developer at work
Настройка подключения к БД

По-умолчанию Riot использует HSQLDB и не хранит изменения в системе после перезагрузки. Для настройки работы с MySQL (PostgreSQL) измените настройки файла conf\default\application.properties в соответствии с рекомендациями, приведёнными в conf\mysql\application.properties или conf\postgres\application.properties.

Ошибки, возникшие во время установки

1. После построения проекта у меня в Эклипсе возникли ошибки валидации spring-beans-2.5.xsd. Решение оказалось простое.
2. Также при создании таблицы riot_dbmsgsrc_entries возникла ошибка.
Пришлось менять код:
  1. CREATE TABLE `riot_dbmsgsrc_entries` (
  2.   `id` bigint(20) NOT NULL auto_increment,
  3.   `bundle` varchar(255) collate utf8_general_ci default NULL,
  4.   `code` varchar(255) collate utf8_general_ci default NULL,
  5.   `comment` longtext collate utf8_general_ci,
  6.   PRIMARY KEY  (`id`),
  7.   UNIQUE KEY `bundle` (`bundle`,`code`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1 ;

на
  1. CREATE TABLE `riot_dbmsgsrc_entries` (
  2.   `id` bigint(20) NOT NULL auto_increment,
  3.   `bundle` varchar(255) collate utf8_general_ci default NULL,
  4.   `code` varchar(255) collate utf8_general_ci default NULL,
  5.   `comment` longtext collate utf8_general_ci,
  6.   PRIMARY KEY  (`id`),
  7.   UNIQUE KEY `bundle` (`bundle`(100),`code`(100))
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1 ;

3. У меня не получилось запустить Томкет из редактора, поэтому я в build.xml добавил цели запуска/останова сервера и цель размещения war-файла в папке webapps. Мои изменения:
  1. <!-- The Tomcat folder-->
  2. <property name=«tomcat.dir» value=«C:/Program Files/Apache Software Foundation/Tomcat 6.0» />
  3.  
  4. <!-- The Tomcat webapp content -->
  5. <property name=«tomcat.webapp.dir» value="${tomcat.dir}/webapps" />
  6.  
  7. <!-- Copies war file into Tomcat -->
  8. <target name=«deploy-tomcat» depends=«war» description=«Copies war file into Tomcat»>
  9.     <antcall target=«tomcat-stop» />
  10.     <copy file="${war.location}" todir="${tomcat.webapp.dir}"/>
  11.     <delete dir="${tomcat.webapp.dir}/${ant.project.name}"/>
  12.     <antcall target=«tomcat-start» />
  13. </target>
  14.  
  15. <!-- Runs Tomcat -->
  16. <target name=«tomcat-start»>
  17.     <java jar="${tomcat.dir}/bin/bootstrap.jar" fork=«true»>
  18.         <jvmarg value="-Dcatalina.home=${tomcat.dir}"/>
  19.     </java>
  20. </target>
  21.  
  22. <!-- Stops Tomcat -->
  23. <target name=«tomcat-stop»>
  24.     <java jar="${tomcat.dir}/bin/bootstrap.jar" fork=«true»>
  25.         <jvmarg value="-Dcatalina.home=${tomcat.dir}"/>
  26.         <arg line=«stop»/>
  27.     </java>
  28. </target>


Выводы


Riot — интересная и гибкая система, построенная на java-технологиях. Riot предоставляет разработчику каркас веб-приложения с уже реализованными основными функциями CMS.
Tags:
Hubs:
+35
Comments 20
Comments Comments 20

Articles