Створення порталів JSR 168 для Domino, Інтеграція додатків і даних, Бази даних, статті

У даній статті ми розглянемо створення порталу JSR 168, що працює як інтерфейс до бази даних Domino.


У даній статті передбачається, що ви є досвідченим розробником додатків для Domino і Web, а також прочитали попередню статтю по середовищу DXL.


Портлет JSR 168


Інтерфейс користувача для прикладів, розглянутих у цій статті, є набором портлетів JSR 168, що надає зовнішній інтерфейс для доступу до Domino-додатком. Для правильного застосування коду в цій статті ми будемо використовувати передовий досвід створення класів доступу до програм / даними. У цій статті представлені портлет, засновані на JSR 168, які будуть використовувати класи доступу до даними. Класи розроблені таким чином, що вони не пов’язані з дизайном інтерфейсу або платформою і не залежать від них. Точно так же, одні й ті ж класи можуть бути легко використані для доступу до будь-якого Domino-додатком.


На малюнку 1 зображені різні компоненти і взаємодії, розглянуті в цій статті, на системному рівні.


Рисунок 1. Компоненти та взаємодії
Компоненти і взаємодії

Звичайний користувач звертається до додатка через Web-браузер. Додаток являє собою JSR 168 портлет, розміщений на Tomcat 5.0.30, який виконує контейнер портлетів Jetspeed 2. У фоновому режимі виконується сервер Domino версії 6.5.1, на якому працює цільове Domino-додаток (dxlnab.nsf), каталог Domino з одними DXL-агентами.


Інтерфейсна частина


Давайте почнемо з розгляду інтерфейсної частини. На наступних малюнках показані різні стани кінцевого працюючого програми, що звертається до Domino Directory, з трьома додатковими користувацькими агентами. Для цілей цієї статті ми розглянемо ключові поля (First Name, Last Name і Full Name) з серверного документа. Пізніше ми розглянемо, як додати додаткові поля.


На малюнку 2 показаний початковий екран інтерфейсу програми.


Рисунок 2. Початковий екран
Початковий екран

Ви можете вибрати документ зі списку в портлет DXL Notes View для перегляду детальної інформації по ньому (див. малюнок 3).


Рисунок 3. Детальна інформація про документ
Детальна інформація про документ

При натисканні кнопки “create” з’явиться екран, зображений на малюнку 4.


Рисунок 4. Екран Create Document
Екран Create Document

При натисканні кнопки “edit” відобразиться екран, показаний на малюнку 5.


Рисунок 5. Екран Edit
Екран Edit

Основний алгоритм роботи програми виглядає наступним чином:


  1. Ви заходите на сторінку з двома портлет, View і Doc. Портлет View відображає 10 рядків представлення даних з Domino Directory сервера. Кнопки Previous і Next використовуються для навігації за поданням.
  2. Потім ви можете натиснути посилання у вигляді стрілки (->) в кожного запису для перегляду додаткових подробиць про документ. У нашому прикладі ми показуємо тільки кілька полів, але обмежень ніяких немає.
  3. Потім ви можете вибрати для редагування поточний документ, або створити новий.
  4. Якщо ви вибираєте редагування поточного документа, вам надаються області редагування для даних полів (див. малюнок 5). Тут ви можете зробити зміни і зберегти їх, при цьому вони негайно відобразяться в портлет View. Також у вас є варіант відмовитися від змін.
  5. Якщо ви вибираєте створення нового документа, в портлет Doc з’являється екран Create Document (рисунок 4). Тут ви можете ввести нове ім’я / прізвище та повне ім’я і зберегти новий запис. Портлет View буде оновлено для відображення змін. Знову ж таки, у вас є варіант відмовитися від проведених змін.

Кілька слів про розробку портлетів


Для того щоб охопити якомога ширшу аудиторію, у даній статті ми створюємо портлет-додаток, використовуючи чистий Eclipse, а не більш витончені інструментальні засоби, наприклад Rational Application Developer. Ми використовували Xdoclet і Maven в якості засобів компонування і розгортання. Ми також розробили і протестували додаток на Apache Jetspeed Portal 2.


Проектування портлетів


Два JSR 168 портлет використовують метод doView для відображення різних JSP-документів на основі поточного стану і дії, виконаного користувачем. Дії захоплюються методом processAction відповідних портлетів. Далі виконується візуалізація (як частина doView) для відображення JSP-документа на основі дії, встановленого / оброблюваного в processAction. На малюнку 6 зображено блок-схема JSP / стан роботи нашого додатки.


Малюнок 6. Блок схема JSP / стан
Блок схема JSP / стан

Два портлет взаємодіють між собою з використанням PortletSession. Портлет View встановлює об’єкт документа у вигляді змінної в PortletSession з областю дії – додаток (PortletSession.APPLICATION_SCOPE). Портлет Doc шукає цю змінну перед візуалізацією і, якщо вона існує, візуалізує документ. Якщо змінна не існує, портлет відображає загальне повідомлення.


Самі портлет розроблені за шаблонами Facade і Value Object. Клас portlet в обох портлет виступає як контролер, що делегує всю службову роботу фасаду (facade). Фасад, в свою чергу, повертає або використовує відповідний значимий об’єкт (value object) на основі виконуваного дії. Всі види для портлетів створені з використанням JSP. Такий дизайн ізолює нас від майбутніх змін на серверах – Ми тільки повинні будемо переписати наш фасад. На малюнку 7 показана діаграма класів, що ілюструє різні класи та їх взаємодії.


Малюнок 7. Класи та взаємодії
Класи і взаємодії

Пакети dxlobj і dxldao є загальними класами доступу до даних, розробленими для даної статті. Ми спроектували ці два пакети таким чином, щоб ви могли використовувати їх для доступу до Team Room або користувача NSF-додатком. Ці Data Access Objects (DAO) спроектовані в загальній формі і незалежні від серверного додатку.


Вся робота по доступу до серверного Domino-додатком у двох портлет, View (raj.portlets.DXLView) і Doc (raj.portlets.DXLDoc), залежить від фасаду (raj.facade.NABFront). Їх дизайн залежить від програми, оскільки вид – це інтегрована частина даних, які відображає додаток. Фасад, в свою чергу, повертає значимий об’єкт people (raj.vo.People) для портлет View або значимий об’єкт person (raj.vo.Person) для портлет Doc. Фасад також бере значимий об’єкт person для оновлення або створення запису person на сервері. Два значущих об’єкта містять атрибути, пов’язані з полями в серверному Domino-документі. Наприклад, атрибут fname в raj.vo.Person відповідає полю FirstName форми Person в серверній базі даних Domino. Як ми стверджували раніше, для даної статті ми використовуємо тільки три поля з серверного додатки. Ми покажемо, як відобразити Company Name в портлет як в режимі створення, так і в режимі редагування, ще глибше занурюючись в дизайн портлет і класу.


Як ви можете помітити, дизайн портлетів дуже залежить від програми. Отже, якщо у вас є база даних Teamroom, і ви хочете мати два портлет для доступу до Domino Teamroom, ви могли б мати портлет Teamroom View і Teamroom Doc з відповідними значущими об’єктами, що відображають поля (дані) цікавить вас серверної бази даних Domino.


Дизайн DAO


Давайте коротко розглянемо дизайн засоби доступу до даних. Основною причиною, по якій ми вирішили мати службовий клас для доступу до даних, була впевненість в тому, що ці ж самі класи могли б використовуватися для підключення до баз даних Domino-якого типу. Дизайн був незалежний від бази даних. Малася також можливість підтримки різних типів аутентифікації. Реалізовані в даний час класи є базовими і засновані на сесіях (LTPA). Якщо вам потрібна підтримка SSL, ви можете змінити службові класи і додати її, в той час як ваш вид (як в MVC) залишиться незмінним.


Об’єднання всього разом


Набір портлетів JSR 168 (raj.portlets.DXLDoc і raj.portlets.DXLView) делегує завантаження і оновлення даних класу raj.facade.NABFront, який, у свою чергу, делегує цю роботу DAO-інструменту. Самі портлет використовують контекст портлетів для отримання параметрів часу виконання для підключення до бази даних Domino (ім’я, вид, тип аутентифікації, повноваження, сервер Domino, порт і т.д.). Ніщо не заважає нам зберігати ці параметри, виконавчі в контексті програми, використовуючи їх, таким чином, спільно в обох портлетів.


Портлет View


У демонстраційних цілях ми розглянемо роботу портлет View (raj.portlets.DXLView).


  1. Портлет ініціалізується під час його завантаження в контейнер портлетів. Частиною ініціалізації є завантаження параметрів, виконавчі з контексту портлет. Як частина цього методу, з контексту портлет ініціалізується і заповнюється об’єкт DAOConfig.
  2. Коли користувач звертається до сторінки, яка містить портлет, контейнер портлетів викликає метод doView портлет, який ініціалізує робочий клас NABFront, передаючи йому об’єкт DAOConfig. Метод doView портлет View викликає метод getPeople класу NABFront.
  3. NABFront ініціалізує DXLDAOFactory і отримує описувач (handle) для DXLViewObject.
  4. DXLDAOFactory ініціалізує ViewXML і викликає метод ViewXML process.
  5. Метод process в ViewXML використовує метод getData HttpConnect для отримання XML з цільового сервера Domino. Об’єкт DAOConfig має детальну інформацію про сервер, порте, бази даних, поданні і т.д., які буде використовувати.
  6. ViewXML обробляє XML, використовуючи SAX-аналізатор, створює DXLViewObject і передає його в DXLDAOFactory.
  7. DXLDAOFactory передає DXLViewObject в NABFront.
  8. NABFront витягує специфічні дані з DXLViewObject і передає локалізований об’єкт People назад в портлет.
  9. Метод doView портлет поміщає об’єкт People в атрибут запиту і передає запит до подання jsp (page / view.jsp).
  10. Користувач бачить відображення подання в портлетів.

Детальна інформація про документ


Тепер ми розглянемо, як портлет DXLDoc відображає детальну інформацію про документ.


  1. Портлет ініціалізується під час його завантаження в контейнер портлетів. Частиною ініціалізації є завантаження параметрів, виконавчі з контексту портлет. Як частина цього методу, з контексту портлет ініціалізується і заповнюється об’єкт DAOConfig.
  2. Коли користувач переглядає список документів в портлет View і вибирає документ для перегляду детальної інформації, активізується метод processAction, який викликає метод getPerson ініціалізованої NABFront, передаючи UNID обраного документа.
  3. NABFront викликає getDocObject.
  4. DXLDAOFactory ініціалізує DocDXL і викликає метод parseXML.
  5. Метод parseXML в DocDXL використовує метод getData HttpConnect для отримання XML (DXL документа) з цільового сервера Domino. Об’єкт DAOConfig має детальну інформацію про сервер, порте, бази даних, поданні і т.д., які буде використовувати.
  6. DocDXL обробляє XML, використовуючи DOM-аналізатор, створює DXLViewNoteObject і передає його в DXLDAOFactory.
  7. DXLDAOFactory передає DXLViewNoteObject в NABFront.
  8. NABFront витягує специфічні дані з DXLViewNoteObject і передає локалізований об’єкт Person назад в портлет.
  9. Метод processAction портлет View поміщає об’єкт Person як параметр запиту dxlperson. Область видимості цього атрибута встановлена ​​в APPLICATION_SCOPE.
  10. Метод doView портлет Doc поміщає об’єкт People в атрибут запиту і передає його до подання jsp (page / view.jsp), яке відображає уявлення people. Користувач бачить відображення подання в портлетів.
  11. Метод doView отримує об’єкт Person з атрибуту запиту dxlperson і передає запит до подання jsp (page / viewdoc.jsp).
  12. Користувач бачить детальну інформацію про вибраний в портлет Doc документі.

Процес редагування документа аналогічний по роботі. Просто використовується інший URL і метод POST HttpConnect для збереження даних з портлет Doc. Операція створення документа аналогічна редагуванню, але для неї не потрібно будь-яка інформація з портлет View. Також для цієї функції використовується інший URL.


Якщо ви хочете відобразити інше поле (наприклад, в портлет Doc) для перегляду, ось алгоритм дій:


  1. Оновлення значимий об’єкт Person в raj.vo.Person, додавши інше поле і відповідні методи getter / setter.
  2. Змініть фасад NABFront для заповнення коректними значеннями поля з сервера, пов’язуючи його з відповідним ім’ям елемента в DXL.
  3. Змініть viewdoc.jsp в порталі для відображення відповідного значення з об’єкта Person на JSP-сторінки.

Резюме


У цій статті ми розглянули використання користувальницької інтегрованого середовища DXL при створенні JSR 168 порталу для доступу до Domino Directory. Основою методу доступу з Java-платформ є використання Data Access Objects (DAO), представлених в даній статті.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*