Даний посібник детально описує процес створення портлету для Liferay порталу Засоби фреймворка Wicket.
Всі частини керівництва:
Вихідний код розробляється прикладу доступний на GitHub.
Вітаю тебе, шановний користувач фреймворка Wicket!
Наскільки я розумію, у тебе виникла нагальна потреба розробити один-два невибагливих портлету для Liferay порталу, і саме тому ти вирішив почитати це керівництво? Якщо так, то я постараюся показати тобі в деталях, яким чином можна створити невеликий притулити за допомогою Wicket.
Відразу хочу попередити, що Wicket - далеко не найкращий вибір серед фреймворків для створення портлетів. Розробники Wicket самі портлет не використовують, тому не варто очікувати від Wicket багатих інструментів для швидкої і зручної реалізації всіх можливостей, описаних в портлетной специфікації. Чого варто очікувати, так це деякої кількості недокументованих "пасток", і на зміну найближчим часом цієї ситуації навряд чи варто розраховувати. Але, незважаючи на всі перепони, створення повнофункціонального портлету на базі Wicket цілком можливо. Так що якщо ти багато днів і ночей присвятив розробці Wicket'овскіх Panel'ей, Page'й і інших Component'ов, то можеш продовжувати в тому ж дусі і при розробці для Liferay. Чим більше складнощів, тим цінніше, сподіваюся, буде для тебе це керівництво.
Май також на увазі, що далі мова піде про наступних версіях інструментів і специфікацій:
- Портлетная специфікація JSR-286.
- Фреймворк Apache Wicket 1.4.x.
Справа в тому, що в Wicket 1.4.x на відміну від 1.5.x класи для створення портлетів знаходяться ще в ядрі фреймворка. У Wicket 1.5.x вони винесені в окремий проект - wicketstuff-portlet-1.5.x.jar. Так що можна розробляти портлет і за допомогою Wicket 1.5.x, але при цьому доведеться мати в CLASSPATH ще парочку додаткових JAR-ників.
Думаю, цим керівництвом можна користуватися і при розробці портлетів для Liferay версії 6.1.0. Однак потрібно мати на увазі, що на момент написання цього керівництва Wicket-портлет не працювали на Liferay 6.1.0 у зв'язку з помилкою: java.lang.IllegalArgumentException: Error initializing WicketFilter - you have no element with a url-pattern that uses filter: AchievementPortlet щоб усунути цю проблему можна спробувати використовувати підхід, запропонований ось тут. Суть його полягає в тому, що потрібно просто додати рядок liferay-web-xml-enabled = false в файл liferay-plugin-package.properties. Це відключить добру пачку web-фільтрів, які використовуються Liferay для внутрішніх потреб, але ми ж все одно в них не потребували, чи не так? Так чи інакше, опція відключає лише автоматичне створення фільтрів, і завжди можна мануально їх в файл liferay-web.xml, як тільки вони будуть потрібні! Але це вже зовсім інша історія ...
Що ж все-таки розробляємо?
Як, сподіваюся, вже стало зрозуміло, створення портлету для Liferay за допомогою Wicket буде досить непростим завданням. А виконання будь-непростого завдання можна вважати в деякому роді досягненням. Це і буде темою нашого портлету: він буде відображати у вигляді тексту на сторінці інформацію про деяке досягненні (achievement). Інформація про досягнення буде заповнюватися в режимі редагування портлету тією людиною, яка додасть притулити на сторінку, і в подальшому буде нагадувати йому про його успіх.
Готуємося до розробки
Для початку розробки нам буде потрібно мати встановленими і налаштованими наступні речі:
Розпакуємо вміст архіву, наприклад, в папку /home/user/liferay/liferay-portal-6.0.6 (надалі - LIFERAY_HOME). Тоді шлях до портального сервера буде чимось на зразок /home/user/liferay/liferay-portal-6.0.6/tomcat-6.0.29 (надалі - LIFERAY_TOMCAT_HOME).
Розпакуємо вміст архіву, наприклад, в папку /home/user/liferay/liferay-plugins-sdk-6.0.6 (надалі - LIFERAY_SDK_HOME).
3. Не обов'язковим, але бажаним пунктом є Liferay IDE - плагін для Eclipse. Знайти його можна, наприклад, в Eclipse Marketplace. Даний плагін допоможе скоротити час при виконанні рутинних операцій.
Налаштовуємо середу розробки
Ну, так що, признавайся, встановив ти Liferay IDE for Eclipse? Поставив? Молодець! Я думаю, ти зможеш і це досягнення відобразити в якості портлету після того, як ми його розробимо.
Але всьому свій час, а поки зверни увагу на панель з трьома синіми кнопочками, яка з'явилася в Eclipse після установки плагіна:
Спочатку повідомимо LIferay IDE, де знаходиться Plugins SDK:
- Викликаємо контекстне меню для третьої з кнопок на панелі, вибираємо в ньому пункт "New Liferay SDK".
- Вводимо в діалоговому вікні в полі "Location" шлях до директорії, в якій раположен SDK. У нашому випадку це значення LIFERAY_SDK_HOME.
- Закриваємо діалог властивостей "Prerefences" натисканням на кнопку "OK".
Також додаємо сервер для запуску Liferay з Eclipse:
- У контекстному меню для третьої з кнопок вибираємо пункт "New Liferay Server".
- У вікні вибираємо тип сервера, який використовується для запуску Liferay. У нашому випадку це "Liferay v6.0 CE Server (Tomcat 6)". Натискаємо кнопку "Next".
- В поле "Liferay Tomcat directory" вводимо шлях до сервера Tomcat, використовуваного для запуску Liferay, тобто в нашому випадку значення LIFERAY_TOMCAT_HOME.
- Натискаємо кнопку "Finish".
Як бути, якщо немає можливості встановити плагін? Можливо, у тебе в офісі проблеми з Інтернетом, або ти просто терпіти не можеш встановлювати плагіни? Не біда! Просто потрібно зробити наступне:
- Створити в директорії LIFERAY_SDK_HOME файл build.user.properties, де user - ім'я твого користувача ОС, з єдиною рядком:
- Додати сервер з LIFERAY_TOMCAT_HOME як звичайний Tomcat-сервер в Eclipse.
- Після того, як сервер з'явиться на вкладці "Servers", вибрати в контекстному меню для цього сервера пункт "Open".
- У вікні налаштувань сервера потрібно змінити наступне:
- У розділі "Server Locations" вибрати "Use Tomcat installation".
- В поле "Deploy path" трохи нижче вказати шлях до папки $ / webapps.
- У розділі "Publishing" вибрати "Never publish automatically".
- У розділі "Timeouts" для обох таймаутів ( "Start (in seconds)" і "Stop (in seconds)") вказати значення 300 секунд.
- Натиснути на посилання "Open launch configuration", і у вікні, на вкладці "Arguments" вказати наступні додаткові агрумент для запуску JVM:
Справу зроблено. Тепер ти теж можеш запускати і зупиняти Liferay.
Налаштування середовища розробки в тому випадку, якщо використовується не-Tomcat'овская збірка Liferay порталу, нічого очікувати настільки ж простий, як описано вище - як з використанням плагіна Liferay IDE for Eclipse, так і без нього. Крім того, використання будь-якого сервера, крім Tomcat, при розробці для Liferay загрожує деякими обмеженнями (наприклад, втратою можливості налагоджувати портлет). Деякі поради з організації розробки з використання не-Tomcat'овской збірки Liferay описані, наприклад, ось тут.
Отже, час прийшов - створимо ж наш портлетний проект.
Створюємо притулити за допомогою Liferay IDE for Eclipse
- Натискаємо на першу кнопку на панелі Liferay IDE "Create a new Liferay Plugin Project".
- У вікні:
- Вводимо "achievement" в поле "Project name".
- Вводимо "Achievement" в поле "Display name".
- В якості типу проекту (поле "Plugin Type") вибираємо "Portlet".
В результаті вікно створення портлетного проекту буде виглядати якось ось так:
- Після натискання на кнопку "Finish" наш проект буде створений.
Створюємо притулити без допомоги Liferay IDE for Eclipse
Тут все трохи складніше. Однак ж, іноді потрібно створити притулити саме таким чином, наприклад, якщо потрібно зберігати свій проект де-небудь, крім однієї з папок Liferay Plugins SDK (чого плагін Liferay IDE вимагає в обов'язковому порядку). Виконання наступного алгоритму призведе нас до заданої мети:
- Переходимо в $ / portlets і створюємо проект за допомогою команди
в залежності від того, яка з команд спрацює на твоїй операційній системі.
- Додаємо проект в Eclipse без допомоги плагіна "Liferay IDE for Eclipse". Для цього:
- Вибираємо в меню "File"> "New"> "Dynamic Web Project". Як ім'я проекту ( "Project name") вводимо achievement-portlet, знімаємо галочку "Use default location".
- Вказуємо місцезнаходження проекту в поле "Location".
- Вказуємо цільової сервер ( "Target runtime") і версію web-модуля ( "Dynamic web module version") для нашого проекту, натискаємо "Next".
- На наступній вкладці видаляємо стару директорію початкових кодів в поле "Source folders on build path" і додаємо туди docroot / WEB-INF / src. В поле "Default output folder" вводимо docroot / WEB-INF / classes. Натискаємо "Next".
- На наступній вкладці в поле "Content Directory" друкуємо docroot. Знімаємо галочку "Generate web.xml deployment descriptor".
- Натискаємо "Finish".
- Щоб не було помилок компіляції, у властивостях проекту на вкладці "Java Build Path" -> "Libraries" повинні бути вказані такі бібліотеки:
- Бібліотеки Tomcat, що використовується для запуску Liferay (розташованого по шляху LIFERAY_TOMCAT_HOME).
- Наступні бібліотеки, розташовані по шляху $ / webapps / ROOT / WEB-INF / lib:
- commons-logging.jar
- util-java.jar
- util-taglib.jar
- util-bridges.jar
В результаті отримуємо
У підсумку наш проект achievement-portlet матиме наступну структуру:
Помилки в даному випадку пов'язані з тим, що Eclipse не зміг розпарсити структуру JSP-файлу. Нічого страшного в цьому немає, тим більше, що цей JSP-файл нам все одно не знадобиться.
Встановити притулити на Liferay можна за допомогою Ant-таска "deploy". Після запуску сервера Liferay зсередини Eclipse, притулити можна буде додати на сторінку порталу, і він буде мати наступний вигляд:
Для повного щастя додаємо в папку lib проекту кілька JAR-файлів:
- wicket-1.4.x.jar
- wicket-extensions-1.4.x.jar
- slf4j-api-1.y.z.jar
- slf4j-log4j12-1.y.z.jar
Замість x, y і z підставте номера тих версій бібліотек, які вам найбільше припадуть до душі. Бібліотека wicket-extensions-1.4.x.jar потрібна нам через деякій міститься в ній AJAX-функціональності.
Все, тепер можна і розробку почати.