| Джустин Локиц
Построение на открытых стандартах портлетов для информации о местоположении
(Building Open-Standard Portlets for Location Information
by Justin Lokitz)
Источник: Oracle Technical Articles, http://www.oracle.com/technology/pub/articles/lokitz_portlets.html
Узучаем, как интегрировать географические карты с портлетами на открытых стандартах.
В бизнесе информация – главное. С появлением производственных порталов получить нужную информацию стало также легко, как зарегистрироваться на Web-сайте с использованием единственного пароля. Назначение производственного портала сместилось с простого информирования к обязательной составляющей, через которую все конечные пользователи (сотрудники, население и, конечно, клиенты) могут получить нужную на данный момент информацию без необходимости установки специального программного обеспечения (отличного от стандартного браузера), использования специальной операционной системы или устройства или же задействования более одного окна.
Тоже самое можно сказать и о информации о местоположении (location information). В предыдущей статье
("Using Location Information in Enterprise Reporting" – “Использование информации о местоположении в производственных отчетах” -
перевод публикуется в этом же выпуске OM/RE) я говорил, что “информация о местоположении есть везде; она может быть найдена в любом бизнесе, в любой отрасли промышленности и, фактически, в каждой организации и подразделении в мире”.
После выхода той статьи и взлета исследований по пространственному анализу, например, конференция “Location Technology & Business Intelligence” в 2005г., стало как никогда более очевидно, что нахождение моделей данных местоположения, коль скоро они существуют совместно с реляционными данными, столь же важно, если даже не безусловно. Сегодня и исполнители, и аналитики, и пользователи нуждаются в том, чтобы видеть информацию такой, какой она представляется атрибутами местоположения, и они хотят осязаемо получать эту информацию.
Сегодня у нас есть возможность реализовать эти потребности. Поскольку порталы предприятий стали нормой для всех организаций и ветвей бизнеса, необходимо найти новые пути интеграции огромных объемов информации и приложений во все структуры портала. В некотором смысле, это точное определение портала: “место, чтобы объединить содержимое, приложения и сервисы” (Laura Ramos, Forrester Research, "Portal Definition Update: Evolving to the Collaborative Business Platform," December 18, 2002), без переопределения или перестроения содержимого (контента), приложений и/или сервисов.
Поэтому для того, чтобы воспользоваться и контентом, и приложениями, и сервисами, интегрированными в портал, сообщество поставщиков промышленных порталов содействовало ратифицикации двух новых стандартов порталов, которые относятся к совсместному использованию этого контента посредством портлетов: OASIS Web Services for Remote Portlets (WSRP) and Java Specification Request 168 (JSR 168). Поскольку эти новые стандарты облегчают совместное использование всей информации и приложений в виде портлетов, становится легко встроить местоположение в уравнение (equation) – а именно, построение портлетов местоположения (карт) рядом с портлетами бизнес-анализа.
В этой статье я расскажу, как разработать порлеты, используя открытые стандарты, такие как WSRP и JSR 168, которые объединяют информацию о местоположении, и такие приложения, как географические карты. Коды всех портлетов, приведенные в этой статье, могут быть зарегистрированы в портале любого поставщика, поддерживающего стандарты портлетов WSRP и JSR 168.
Определение Карты
В следующих примерах используются Oracle Application Server MapViewer (Oracle MapViewer) и Oracle JDeveloper 10g для определения и разработки динамических Web-карт. Хотя в теории любая технология Web-карт может быть использована для получения аналогичного результата, Oracle MapViewer позволяет делать это проще, так как поддерживает Java и XML API, также как и JavaServer Page Tag Library. Таким образом, любой разработчик, от начинающего до продвинутого, может воспользоваться этим простым (и весьма мощным) средством интеграции карт в существующие и новые разрабатываемые проекты. Для подробной информации, включая загрузочные и справочные материалы, смотрите
В уже упоминавшейся статье “Use Location Information in Enterprise Reporting” я объяснял, как определять карты для Oracle MapViewer, используя инструмент определения карт и/или Oracle SQL*Plus. Для непрерывности и простоты в этой статье используется пример, содержащий образцы данных, находящихся в поставляющийся с Oracle схеме OE (Order Entry – ввод заказов), приведенной, например в "Performing Location-Based Analysis".
Подобно другим инструментам, MapViewer использует концепцию стилей (цвета, маркеры, линии, области, текст, символика и расширенные стили) и тем (иногда называемых слоями) для создания динамических карт. Определение этих атрибутов, также как и фактическое определение карты, сохраняются в базе данных, как XML, наряду с информацией о местоположении.
Для создания атрибутов и/или определений карты, вы можете использовать стандартные SQL-операторы добавления/обновления в базе данных, как, например, показано далее.
SQL> insert into USER_SDO_STYLES values(
'V.PIECHART1', 'ADVANCED', null,
'<?xml version="1.0" ?>
<AdvancedStyle>
<PieChartStyle pieradius="10">
<PieSlice name="A" color="#ffff00" />
<PieSlice name="B" color="#000000" />
<PieSlice name="H" color="#ff00ff" />
<PieSlice name="I" color="#0000ff" />
<PieSlice name="W" color="#ffffff" />
</PieChartStyle>
</AdvancedStyle>', null, null);
Или вы можете использовать поставляемый Map Definition Tool (см. рис. 1), который сделает большую часть работы за вас.
Рисунок 1. Инструментарий определения карты
Стандартный Oracle MapViewer, загруженный или полученный вместе с Oracle Internet Application Server, имеет набор стилей, тем, базовых карт и типовой код. Однако, для нашего примера нужно будет скопировать одну базовую карту и добавить две темы. Так как вы имеете и SQL, и инструментальный доступ к определению карты в базе данных, то самый простой способ скопировать определение карты - это запустить SQL-предложение, похожее на следующее. (Перед тем, как сделать это, исследуйте следующие представления для лучшего понимания того, как они работают: user_sdo_styles, user_sdo_themes и user_sdo_maps).
SQL> insert into user_sdo_maps
2 values('WAREHOUSES_AND_CUSTOMERS', 'customers and warehouses',
3 (select definition from user_sdo_maps where name='DENSITY_MAP'));
1 row created.
SQL> commit;
Commit complete.
Теперь у вас есть новая базовая карта с именем WAREHOUSES_AND_CUSTOMERS, в которую вы будете добавлять темы, используя Map Definition Tool. Во-первых, измените директорию, содержащую mapdef.jar, и выполните следующую команду для подключения к экземпляру Oracle Database, который хранит определение нашей карты:
java -classpath mapdef.jar;d:\oracle\ora92\jdbc\lib\classes12.jar
-Dhost="localhost" -Dsid="orcl" -Dport="1521"
oracle.eLocation.console.GeneralManager
Далее создайте две темы CUSTOMERS и WAREHOUSES (см. рис. 2 и 3).
Рисунок 2. Создание темы CUSTOMERS
Рисунок 3. Создание темы WAREHOUSES
После создания тем добавьте их к нашей новой базовой карте WAREHOUSES_AND_CUSTOMERS (см. рис. 4).
Рисунок 4. Создание определения карты WAREHOUSES_AND_CUSTOMERS
Обратите внимание на элементы Min Scale и Max Scale, необходимые для определения, какая из тем появится на данной диаграмме, в зависимости от уровня приближения. После обновления определений карты (нажимая на кнопку Update), вы можете начать использовать их для построения динамических карт, основанных на запросах клиента. Простым способом проверки работоспособности карты является подключение этого нового имени определения карты к одному из демонстрационных приложений Oracle MapViewer. Чтобы сделать это, направьте простой клиент карты на Oracle MapViewer (mapclient.jar в URL Oracle MapViewer) и введите необходимые значения (см. рис. 5).
Рисунок 5. Демонстрационная клиентская карта
Обратите внимание, что выбранное приложение mapclient.jar отображает заданный серверу Oracle MapViewer запрос– это такой же XML-запрос, который может быть сделан на любом языке клиента или разработчика. Если все определения и значения подключения верны, то карта (или URL с изображением карты) будет строится, опираясь на запрос.
Построение структуры портлета
Разработка портлетов с использованием новейших стандартов, как JSR 168 и WSRP, может быть достаточно безболезненной, если вы используете правильный инструмент. К счастью, группа Oracle Internet Application Server Portal разработала такой инструмент для Oracle JDeveloper 10g – “portal-addin”. Portal-addin – это расширение Oracle JDeveloper 10g, которое позволяет быстро и легко формировать структуру Java (JSR 168) портлетов при помощи визардов (wizards). Единожды сделав портлеты с использованием спецификации JSR 168, вы можете развернуть их на любом сервере, поддерживающим этот стандарт, включая Oracle Internet Application Server, и вызывать их через WSRP. Для информации о portal-addin или о стандартах портлетов см.: http://portalstandards.oracle.com.
Для построения нашей структуры портлета с использованием JDeveloper 10g первое, что вы должны сделать, это создать новое рабочее пространство WSRPMapPortlet. Для этого рабочего пространства вы используете шаблон Web приложения (см. рис. 6).
Рисунок 6. Создание нового рабочего пространства приложения
Щелкнув правой кнопкой мыши на ViewController в пределах созданного рабочего пространства, вы можете выбрать “new” для старта одного из многих расширений. Хотя вы не сможете увидеть визарды портлетов в секции Web Tier. Визарды портлетов появятся, если вы выберете фильтрацию по “all technologies”, а не “project technologies”. Здесь вы выбираете Java Portlet Wizard, который поведет процесс создания стандартного Java-портлета (см. рис. 7).
Рисунок 7. Создание Java-портлета
Также существует множество предопределенных опций в Java Portlet Wizard. Для этого примера вы в большинстве случаев выбираете значения по умолчанию (см. рис. 8-11). Полное документирование других опций Java Portlet Wizard приведно в руководстве “Oracle Internet Application Server Portal Developer's Guide”.
Рисунок 8. Специфицируем класс портлета
Рисунок 9. Специфицируем имя портлета
Рисунок 10. Исследуем виды портлетов
Рисунок 11. Страница портлета view.jsp
Теперь, когда наша открытая структура портлета готова, к ней можно добавить наш код Oracle MapViewer.
Интегрирование Oracle MapViewer с Open Standard Portlet
Также как и в предыдущих примерах Oracle MapViewer, для простоты будем использовать MapViewer JSP Tag Library для вызова образца MapViewer и возврата динамических web-карт в наш портлет. В целом работа с MapViewer JSP Tag Library не только проста, но и хорошо документирована, что позволяет принимать гибкие решения http://www.oracle.com/technology/products/jdev/howtos/10g/map/mv_jdev_howto.htm.
Теперь, чтобы добавить код в нашу недавно созданную структуру портлета, открываем файл view.jsp, кликнув по нему два раза в JDeveloper. В режиме редактирования вы можете добавлять любое форматирование или содержание, не погружаясь глубоко в HTML. Для этого проекта отцентруйте содержимое, используя центральный значок. Пока вы находитесь в режиме редактирования, можно также перетаскивать, удалять и определять теги. Чтобы использовать теги Oracle MapViewer, выберете MapViewer из Component Palette (обычно справа вверху в JDeveloper 10g). Из MapViewer Tag Library перетащите тег init на страницу сразу за тегом defineObjects, добавленным Portlet Wizard. Как можно видеть, тег init имеет три поля, два из которых должны быть заполнены. Вы заполняете все три следующей информацией: URL (http://www.yourserver.com/mapviewer/omserver), datasource (mvdemo), и user-defined ID (mvHandle) - см. рис. 12.
Рисунок 12. Добавление тега init и соответствующих спецификаций
Следующим шагом будет добавление на страницу тега setParam. Заметьте, что хотя тег setParam не развернул информационное окно, но если выбрать тег на странице, то можно устанавливать параметры Oracle MapViewer в Property Inspector (обычно справа внизу JDeveloper 10g). Пока выбран тег setParam, внесите следующие параметры: antialiasing (true), basemap (WAREHOUSES_AND_CUSTOMERS), centerX (-122.4), centerY (37.8), height (450), size (10), title (My Map Portlet) и width (600) - см. рис. 13.
Рисунок 13. Добавление тега setParam и соответствующех спецификаций
Закончив заполнять параметры в тег setParam, перетащите на страницу тег run, который не требует параметров (см. рис. 14).
Рисунок 14. Добавление тега run
Наконец, вы готовы визуализировать карту совместно с портлетом. В предыдущих вызовах экземпляра Oracle MapViewer с использованием библиотеки тегов, вы в основном настраивали полную среду карты, и впоследствии Oracle MapViewer уже формировал изображение карты после получения команды RUN. Теперь все, что вам надо сделать, это разместить изображение на странице. Чтобы сделать это, нужно перетащить на страницу стандартный HTML тег изображения (или тег объекта, если изображение формата SVG). На Component Palette выберете HTML, перетащите тег изображения на страницу и кликнете на вкладке ресурсов, чтобы посмотреть JSP/HTML ресурсы для вашей страницы. На Component Palette еще раз выберете MapViewer Tag Library и теперь перетащите тег на место между пустыми кавычками тега изображения (тег изображения теперь должен выглядеть так <img src="<mapviewer:getMapURL />"/>). Как только страница запустится и создаст это изображение, тег getMapURL переправит фактический URL изображения обратно к тегу изображения HTML (см. рис. 15).
Рисунок 15. Добавление тега изображения HTML и тега Oracle MapViewer getMapURL
Сейчас у вас имеется достаточно кода для развертывания портлета в том смысле, что любой портал может реализовать его, и мы сможем увидеть нашу карту. Это дает хорошую отправную точку для добавления следующей порции логики, создавая, таким образом, возможность добавлять различные версии карты для различных запросов. Однако, это выходит за пределы этого примера.
Регистрация и развертывание портлета в разрешенном местоположении
Сейчас вы находитесь в той точке, когда можно развернуть портлет в WSRP/JSR 168 в таком контейнере портлетов, как например, Oracle Container for J2EE (OC4J). Чтобы сделать это, кликните правой кнопкой мыши на файл web.xml и выберете "Create WAR deployment profile". В качестве имени профиля развертывания выберете WSRPMapPortlet, а также назовите корневой контекст J2EE Web таким же именем (WSRPMapPortlet) – см. рис. 16.
Рисунок 16. Создание профиля развертывания
Как только вы построили профиль развертывания, можно кликнуть по нему правой кнопкой, выбрав для развертывание проекта или файл WAR, или файл EAR, или сервер приложений по вашему выбору. В нашем случае выбираем развертывание проекта в экземпляре OC4J, где находится наш portlet_container (см. рис. 17).
Рисунок 17. Развертывание портлета на контейнере портлетов
После удачного развертывания вы можете посмотреть WSRP-WSDL страницу, набрав http://www.yourserver.com/WSRPMapPortlet/portlets?WSDL. Это тот же адрес, что вы использовали для регистрации портлета на портале (см. рис. 18).
Рисунок 18. Спецификация WSRP-портлета
Самый легкий способ протестировать недавно созданный WSRPMapPortlet - это воспользоваться Oracle Portal/WSRP Verification Server, который связывает предпусковую версию Oracle Application Server Portal с WSRP-портлетами. Пока наш портлет может вызываться из-вне нашего корпоративного брандмауэра (firewall), надо проверить, что его способность визуализировать только что вами созданное, относительно легко достигается посредством этого сервиса (см. рис. 19).
Рисунок 19. Тестирование WSRP-портлета карты
Для получения большей информации о процессе верификации обратитесь к соответствующей
документации.
Заключение
Поскольку интеграционные технологии, такие как порталы и бизнес-анализ, становятся критически важными частями бизнес-инфраструктуры, поскольку они способны совмещать и информацию, которую мы используем, и приложения (портлеты), которые мы создаем, то они, эти технологии, становятся совершенно необходимыми (если даже не юридически требуемыми). Сегодня у нас есть не только все необходимые
компоненты для создания новых приложений, которые поддерживают открытые стандарты, но у нас также есть и стандарты структуры, такие как JSR 168 и WSRP, которые позволяют интегрировать существующие технологии и данные в новые приложения. Точка пересечения новых технологий с существующими, такими как GIS и порталы, будет достигнута тогда, когда мы, наконец, сможем получать данные для анализа реального мира из всего множества сведений, не преодолевая для этого огромные сложности.
Justin Lokitz - старший консультант по продажам в Oracle Corporation, специализирующаяся на GIS и J2EE разработках. |