About

18 нояб. 2011 г.

Hello World: portlet + maven2 + Liferay Portal


Совсем недавно начала знакомиться с такой замечательной вещью как Liferay Portal. Конвертер портлетов + cms портала. Впечатления самые приятные. Есть много чего что мы писали руками на jsf.
Итак задача : установить Liferay Portal и запустить простейший портлет.
Исходные данные :
ос : Ubuntu 11.10 ;
сервер : Glassfish 3.1 ;
среда разработки : Netbeans 7.0.1 ;
сборка проекта : maven2 ;

11 нояб. 2011 г.

Ubuntu 11.10 + Oracle


Довольно тривиальная на первый взгляд задача - установить на своей машине Oracle , к моему удивлению вызвала немало трудностей. Скачав с оф сайта последнюю версию Oracle, приступила к установке по многочисленным инструкциям из интернета.
Ubuntu 11.10 (32-bit) + Oracle Database 11g Release 2 : любая попытка установки приводила к следующим ошибкам на 69% установки :

3 окт. 2011 г.

DDL : генерация из JPA проекта кода sql


Случилось несчастье и потерян бекап бд, окончательно и бесповоротно. Но это не значит что придется писать бесконечные create table , ведь есть сам проект с энтити классами, из которых можно извлечь все необходимое для создания sql кода, DDL (data definition language).

Исходные данные : веб проект (JSF, JPA(Hibernate), maven2), запускается на Glassfish.
Задача : нет бд, создать исходники sql.

21 авг. 2011 г.

Пара слов о хибернейте


Исходные данные : пустой новый maven проект java ee, подключен JSF 2.0. Запускается на сервере Glassfish 3.0.1.
Цель : подключить бд MySql , в качестве orm использовать hibernate.

17 авг. 2011 г.

phpbb3 и Java


Форум на сайте вещь несомненно хорошая, нужная, и полезная. А бывает еще и крайне необходимая, когда про форум написано в тз.
А теперь от лирики к делу. Есть сайт на JSF2.0, запущенный на Glassfish, нужен форум. Поначалу выбор пал на JForum, помучившись довольно долго все же удалось запустить его с собственной авторизацией. Впоследствии проанализировав все плюсы и минусы было решено заюзать более новый и активно развивающийся phpbb. JForum кажется совсем заброшенным. Кстати очень понравился этот каталог форумов.

Код php на Glassfish.
И все бы хорошо, но как запустить пхпшный форум на контейнере сервлетов.
Оказывается есть такая замечательная штука Quercus, предназначенная как раз для этого - запуска кода пхп на явовском серваке. Используется элементарно - задеплоить варник и все, пхп код можно копировать в папку с кверкусом, код будет выполняться.

Phpbb3
Далее исходники phpbb копируются в папку куда задеплоен кверкус. Все успешно открывается , при установке указываются параметры соединения с бд, остальное можно по умолчанию. Бд должна существовать , и быть пустой, все таблички там создадутся автоматически.
Готово, форум в работе.

Авторизация
Следующий этап это собственная авторизация. Тоже как выяснилось ничего сложного. Принцип таков - с основного сайта в куки пишутся данные, форум читает куки, авторизует юзера, или если его нет то добавляет в бд и авторизует.
Для того чтобы написать собственную авторизацию нужно создать файлик auth_ваша_авторизация.php в папке ./includes/auth/  У меня он назывался auth_str2.php.
В нем могут быть методы (методы всегда заканчиваются на названии модуля, это обязательно):
function login_str2(&$username, &$password)
- функция залигонивания, вызывается при нажатии кнопки вход.
function init_str2()
- инициализация.
function autologin_str2()
- вызывается если новая сессия.

Автологин то что понадобится.
1. Берем куки и парсим.
2. Есть ли в бд
3. Добавляем если нет.
// выковиривание значений из куки
$cookie = $_COOKIE["userInfo"];
list($role,$username,$password) = split(' ',$cookie);

// не пустые ли значения
if (!$password || !$username)
{
return array();
}
// ищем юзера
$sql = 'SELECT *
FROM ' . USERS_TABLE . "
WHERE username_clean = '" . $db->sql_escape($username) . "'";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);


// юзер найден
if ($row)
{
return ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE) ? array() : $row;
}

// юзер не найден
else {
...
}

Следующий этап вероятно будет шифрование.
Главное не забыть чистить куки когда юзер выходит из админки.
И в админке форума необходимо указать какой модуль юзать, это в общие->средства связи->аутентификация.

Темы
Тем для phpbb предостаточно, например этот каталог. Радует функция подбора цвета. Чтобы установить тему, ее нужно распаковать в ./styles, установить на вкладке стили, и после этого она будет доступна, тема по умолчанию указывается в  : общие->конфигурация->настройка форума->стить по умолчанию.

Язык
С языком аналогично как и с темами, скачать пакет, распаковать в ./languages , установить на вкладке система->языковые пакеты. После этого язык будет доступен в общие->конфигурация->настройка форума.
 Один нюанс - после проделанных манипуляций хотя и указан язык по умолчанию для всего форума, он перекрывается настройкой языка для конкретного юзера , юзер сам должен изменить язык в центре пользователя. Это неудобно, зачем же их так гонять. Версия phpbb 3.0.8. Из источников в сети была почерпнута информация что и правда есть такой глюк или "особенность",называйте как хотите. И если ставить phpbb с уже закаченным в ./languages русификатором то все ok. Раз уж все равно суждено его переставить то во избежания непредвиденного была скачана русифицированная версия 3.0.9 и установлена. Нареканий нет.

БД
Проблема : у меня уже есть бд и не нужно ничего создавать. Как сделать чтобы phpbb ee подцепил ?
 Так же все элементарно, в корне есть файл config.php , в нем хранятся настройки бд. Если перед установкой записать туда параметры то бд не будет создаваться , а использоваться указанная.
config.php
// phpBB 3.0.x auto-generated configuration file
    // Do not change anything in this file!
    $dbms = 'mysql'; //database type it may not be mysql
    $dbhost = 'localhost';
    $dbport = '3306';
    $dbname = 'myforum_phpbb';
    $dbuser = 'root';
    $dbpasswd = '******';

    $table_prefix = 'phpbb_';
    $acm_type = 'file';
    $load_extensions = '';

    @define('PHPBB_INSTALLED', true);
    //@define('DEBUG', true);
    //@define('DEBUG_EXTRA', true);   

11 июл. 2011 г.

Ant в Maven. Как и зачем.


Пришло время рассказать как из ант сборки проекта сделать мавен. Мотивацией сего действия было задание прилепить к мавеновскому проекту jforum с автоматической авторизацией наших юзеров. Конечно это можно сделать методом правки кода в блокноте (кто же не дает), бесконечным билдиньем и созерцанием собственных багов. Что меня как то не привлекало. В результате долгих гуглений, попыток настроить под себя так и этак имеющийся антовский исходник, при отсутствии желания вникать в особенности и методы работы с антом , наткнулась на эту замечательную статью, что было счастьем и заслуженно наградой за долгие мытарства.
А теперь краткий вольный перевод полученной инфы. (заметочка на память)

Общий краткий план действий,
что нужно делать чтобы из ант проекта сделать мавен :
1. добавить jar-ник (war-ник) в репозиторий m2
2. сгенерировать пустой мавен проект
3. добавить в этот пустой проект в библиотечки ваш jar-ник из мавеновского m2
4. для проверки - билдим , должен получиться корректный jar-ник (war-ник)
5. в этот пустой проект можем добавлять произвольные файлы из исходников ант проекта (с сохранением путей естественно) и спокойно их править как душа пожелает. В результате в сбилдинном проекте будут "наши" файлы а не исходные.

How to или подробные формальности.
(На примере jforum честно скопипащеной с вышеупомянутой статьи)
1. Запускаем в консоли, из папки где непосредственно лежит war-ник (или пишем к нему путь).
$ mvn install:install-file -DartifactId=jforum -Dversion=2.1.8 
-Dfile=jforum-2.1.8.war -DgroupId=net.jforum -DgeneratePom=true -Dpackaging=war
2. Пустой мавен проект
$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
-DgroupId=com.company.jforum -DartifactId=jforum -Dversion=2.1.8

Удаляем из него лишнее (можно и не с консоли)
$ rm  src/main/webapp/WEB-INF/web.xml
$ rm src/main/webapp/index.jsp

Версионный контроль
$ git init
$ echo "target" 
$ git add pom.xml src 
$ git commit -m "Initial code import"
3. Добавить зависимости в pom.xml. И удалить лишний junit.

   net.jforum
   jforum
   2.1.8
   war
 

4. Можно билдить! С консоли mvn package , или средствами IDE.

5. Собственные изменения.
Для примера надо изменить страничку в шаблонах. Можно с консоли или средствами IDE.
$ mkdir -p src/main/webapp/templates
$ cp target/war/work/net.jforum/jforum/templates/default src/main/webapp/templates/default
Если необходимо изменить ява код то воспользуемся тем же приемом для jar-ника.
Сбилдим джарник ант проекта, изменив и добавив если нет дефаулт задачу в buil.xml исходников такого вида :

     

Потом с консоли :
$ ant clean jar

Получится jar-ник в папке /build. Его аналогичным образом помещаем в локальный репозиторий мавена.
$ mvn install:install-file -Dpackaging=jar -DartifactId=jforum -Dversion=2.1.8
-Dfile=jforum-2.1.8.jar -DgroupId=net.jforum -DgeneratePom=true -Dpackaging=jar
Так же добавляем зависимость в pom.xml и можно править.

P.S. В результате дальнейшей деятельности и объективной оценки плюсов и минусов различных решений для форума , было отдано предпочтение в пользу phpbb.