- Установка і настройка середовища
- Створюємо базу і таблиці
- Створена сервіс для роботи з даними
- Створення web-додатки
- Робота з базою
- На закінчення
Не так давно на сайті WSO2 був опублікований цикл статей, присвячених розробці веб-додатків із застосуванням продуктів і технологій WSO2. Мені з одного боку сподобався цей приклад - так як він дає уявлення про особливості WSO2, з іншого боку не дуже сподобався (ну зовсім вже відвертим ігноруванням елементарних best practices). І я вирішив написати свій tutorial, виправивши або Додатк деякі місця вихідного.
Вихідний цикл статей доступний за адресами:
У нашому випадку ми будемо використовувати сдедует продукти і версії:
- WSO2 Developer Studio 3.7.1 (але я постараюся мінімально використовувати фішки IDE - що б можна було реалізувати приклади без прив'язки до конкретного середовища програмування)
- WSO2 Application Server 5.2.1 - сервер додатків (по суті справи Tomcat 7.x на базі платформи Carbon)
- WSO2 Data Services Server 3.2.2 - сервер для роботи з базою даних (в нашому випадку буде реалізовувати DAO-рівень замість стандартних JPA / Hibernate)
Тексти програм доступні в github: https://github.com/akakunin/wso-health-tutorial/tree/1.0.0
Установка і настройка середовища
Почнемо з установки продуктів. WSO2 Developer Studio - це по суті справи Eclipse + набір плагінів WSO2 - не думаю що варто опісиват установку і настройку Eclipse.
Розгортання продуктів WSO2 робиться одноманітно (по суті справи розпакувати zip) - можна використовувати опис на базі WSO2 ESB , Яке я опублікував раніше.
Тут їсть тільки один важливий момент - так як нам буде необхідно запускати одночасно кілька продуктів WSO2 - нам треба "розвести" їх по портам. Для цього необхідно прописати різні значення в тезі <Offset> файлу carbon.xml
Для WSO2 AS залишимо це значення рівним 0 (тобто він буде доступний по портах 8280, 8243, 9443), для WSO2 DSS пропишемо 2 (тобто він буде використовувати порти 8282, 8245, 9445).
Підключимо зазначені сервіси до WSO2 DevStudio (знову-таки як це робити можна подивитися на прикладі ESB) - що б можна було запускати і дивитися логи відразу з середовища програмування.
Створюємо базу і таблиці
Для початку роботи нам треба створити базу даних і таблиці в ній. Для цього використовуємо MySQL і скрипт patiens.sql з вихідних:
DROP DATABASE IF EXISTS patientdb; CREATE DATABASE patientdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL ON patientdb. * TO patientdb @ '%' IDENTIFIED BY "patientdb"; GRANT ALL ON patientdb. * TO patientdb @ 'localhost' IDENTIFIED BY "patientdb"; USE patientdb; SOURCE patients.sql;
Створена сервіс для роботи з даними
За роботи з даними у нас буде відповідати сервер WSO2 DSS.
Для того, що б сервер міг працювати з базою MySQL необхідно в Капков <DSS_HOME> / repository / components / lib покласти jar з драйвером MySQL.
Далі запускаємо його (можна прямо з Eclipse) і після запуску заходимо в його адмінку за адресою https: // localhost: 9445 / carbon (Як ми пам'ятаємо - ми налаштували Offset Для цього сервера в 2, так що всі порти зрушені на 2 від стандартних значень). Ім'я користувача-пароль за замовчуванням - admin / admin.
В консолі йдемо в Services -> Add -> Data Services -> Create
Створюємо сервіс "WSO2HealthIT" з namespace-му "http://ws.wso2.org/dataservice/samples/health"
Тиснемо Next і додаємо новий DataSource для роботи з нашою базою
Тиснемо "Test Connection" - що б переконатися що все пройшло як треба, після чого "Save".
Йдемо далі і додаємо 2 запити.
Перший запит - "registerPatientQuery", вибираємо створений DataSource, вставляємо SQL:
insert into patient (patientNumber, patientLastName, patientFirstName, phone, city, streetname, country) values (: patientNumber,: patientLastName,: patientFirstName,: phone,: city,: streetname,: country)
Після чого натискаємо "Generate Input Mappings" (що б DSS сам згенерував нам необхідні вхідні параметри).
Другий запит буде отримувати інформацію по пацієнту, називається "patientDetailsByNumberSQL" і використовує SQL:
select patientNumber, patientLastName, patientFirstName, phone, city, streetName, country from patient where patientNumber =?
Для даного сервісу потрібно буде ручками додати вхідний параметр "patientNumber".
Для генерації вихідних параметрів тиснемо "Generate Response" - нам будуть створені Output Mapping-й. Для соотвествующих споконвічного tutorial поміняємо імена у відповідності з наведеною нижче таблицею (наприклад в xml буде використовуватися теги patient-first-name і patient-last-name, streetname йде маленькими буквами)
Далі створюємо operations - які будуть працювати з створеними запитами.
Спочатку створюємо "registerPatient" Для роботи із запитом "registerPatientQuery"
Потім і operation "patientDetailsByNumber" яка звертається до запиту "patientDetailsByNumberSQL"
Все - можна натиснути Finish. Готово - через пару секунд в списку сервісів повинен з'явиться новий сервіс (WSO2HealthIT) який можна навіть протестувати через вбудований в DSS SOAP UI (натискаємо на "Try this service")
Для ледачих - насправді можна було б і не проходити весь цей виснажливий Wizard - а просто натиснути Upload - і завантажити WSO2HealthIT.dbs з вихідних - тільки попередньо перевірте настройки DataSource (ім'я користувача, пароль, ім'я бази).
Створення web-додатки
Важливо розуміти, що WSO2 AS - це по суті справи Tomcat 7 + Carbon (в принципі як і більшість інших продуктів WSO2 представляють собою той чи інший Open Source проект "посаджені" поверх їх OSGI платформи Carbon). В цьому плані розробка веб-додатки для WSO2 AS не відрізняється від розробка для того ж Tomcat.
В оригінальному tutorial проект створювався засобами IDE (Eclipse) - але тут у мене все-таки здригнулася рука - з цього проект був перероблений на використання Maven. Сам код поки не міняв - він "індійський" - його ми будемо покращувати в наступних "випусках". Зрештою - мета цього посібника - не навчилися правильно писати Java-додатка на JEE, а показати нюанси саме розробки під WSO2.
Так як додаток тепер використовуємо maven - то його можна легко імпортувати в Eclipse (або будь-яку іншу IDE).
Після складання програми (mvn clean install) йдемо в адмінку WSO2 AS ( https: // localhost: 9443 / carbon / admin ) І деплоім отриманий war-файл (Applications -> Add -> Web Applications). При Деплой можна вказати версію додатка (в моєму випадку я вказав 1.0.0 - це дозволяє запускати на сервері одновленменно кілька версій однієї програми).
Після деплоя ми повинні побачити наше програму зі списку доступних і сам додаток буде доступно за адресою http: // localhost: 9763 / wso2-health / 1.0.0 /
Можна спробувати отримати пацієнта за номером, або зареєструвати нового пацієнта.
Робота з базою
Вихідний код програми не так цікавий - це більш менш стандартне просте веб-додаток. Цікаво, як здійснюється робота з базою. У WSO2 так, де в звичайному JEE додатку використовувався JPA, пропонується обращатсья до заздалегідь створеним Data Services (які ми створили на початку цього tutorial-а). Дане рішення виглядає не найефективнішим (насправді немає ніяких проблем з використанням того ж Hibernate в WSO2 AS) - однак при побудові "true" SOA додатків (особливо з огляду на модні зараз microservices) це рішення виглядає більш "іделогіческі" правильним. Якщо нам буде потрібно робота з пацієнтами з якогось іншого застосування, робота з даними буде здійснюватися через одні й ті ж, заздалегідь написані сервіси.
Отже, в коді програми найцікавішим виглядає класи QueryPatientDetailServlet і RegisterPatientServlet - а саме їх методи createPayload (в якому формується запит до сервера) і parseResultFromDSS - де відбувається розбір результату. Поки що ніяких клієнтів по WSDL не генерується, формування запиту, як і розбір результату відбуваються в ручну.
На закінчення
Отже, для першого разу досить. Ми розібралися що таке WSO2 AS (tomcat), що таке web application for WSO2 (звичайне веб-додаток), як створити сервіс для роботи з даними (за допомогою WSO2 DSS) і як працювати з цим сервісом з веб-додатки.
Далі ми додамо авторизацію (з використанням WSO2 Indentity Server), перевірку прав доступу до сервісу даних (додавши в ланцюжок WSO2 ESB) і ряд інших поліпшень.
21.03.2015