|
|
|||||||||||||||||||||||||||||
|
Создание порталов JSR 168 для DominoИсточник: IBM developerWorks Россия
В данной статье мы рассмотрим создание портала 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 показан начальный экран интерфейса приложения. Вы можете выбрать документ из списка в портлете DXL Notes View для просмотра детальной информации по нему (см. рисунок 3). Рисунок 3. Детальная информация о документе При нажатии кнопки "create" появится экран, изображенный на рисунке 4. Рисунок 4. Экран Create Document При нажатии кнопки "edit" отобразится экран, показанный на рисунке 5. Основной алгоритм работы программы выглядит следующим образом:
Несколько слов о разработке портлетовДля того чтобы охватить как можно более широкую аудиторию, в данной статье мы создаем портлет-приложение, используя чистый Eclipse, а не более изощренные инструментальные средства, например Rational Application Developer. Мы использовали Xdoclet и Maven в качестве средств компоновки и развертывания. Мы также разработали и протестировали приложение на Apache Jetspeed Portal 2. Проектирование портлетовДва JSR 168 портлета используют метод doView для отображения различных JSP-документов на основе текущего состояния и действия, выполненного пользователем. Действия захватываются методом processAction соответствующих портлетов. Далее выполняется визуализация (как часть doView) для отображения JSP-документа на основе действия, установленного/обрабатываемого в processAction. На рисунке 6 изображена блок-схема JSP/состояние работы нашего приложения. Рисунок 6. Блок схема 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).
Детальная информация о документеТеперь мы рассмотрим, как портлет DXLDoc отображает детальную информацию о документе.
Процесс редактирования документа аналогичен по работе. Просто используется другой URL и метод POST HttpConnect для сохранения данных из портлета Doc. Операция создания документа аналогична редактированию, но для нее не требуется какая-либо информация из портлета View. Также для этой функции используется другой URL. Если вы хотите отобразить другое поле (например, в портлете Doc) для просмотра, вот алгоритм действий:
РезюмеВ этой статье мы рассмотрели использование пользовательской интегрированной среды DXL при создании JSR 168 портала для доступа к Domino Directory. Основой метода доступа из Java-платформ является использование Data Access Objects (DAO), представленных в данной статье. Ссылки по теме
|
|