Пример использования XPFE/J2EE и SOAP для построения распределенных приложений
Для построения распределенных и переносимых приложений очень часто бывает удобно использовать технологию web-сервисов и протокол SOAP. Рассмотрим пример такого приложения, серверная часть которого построена на платформе J2EE, а клиентская часть - на платформе XPFE.
Для того, чтобы скомпилировать и запустить тестовое распределенное приложение, выполните следующую последовательность действий:
- Установите J2SE Development Kit (JDK) (приложение будет работать как с JDK 1.4, так и с JDK 1.5) и создайте переменную окружения JAVA_HOME, указывающую на каталог, в который был установлен JDK
- Установите сервлет-контейнер (например, Tomcat или Jetty). Минимальный дистрибутив Jetty, достаточный для запуска тестового приложения, можно взять здесь, его достаточно распаковать в любой каталог и создать переменную окружения JETTY_HOME, указывающую на этот каталог
- Распакуйте в любой каталог содержимое архива с исходным кодом тестового приложения
- Перейдите в созданный каталог и выполните ./build.sh deploy (для UNIX) или build.bat deploy (для Windows)
- Перейдите в каталог Jetty и запустите его, выполнив ./start.sh (для UNIX) или start.bat (для Windows)
- Установите и запустите Firefox (версии не ниже, чем 1.0)
- Наберите в адресной строке http://localhost:8080/wsapp
- Следуя появившимся инструкциям, установите приложение, затем в адресной строке наберите about:config и создайте строковое свойство wsclient.services_url со значением http://localhost:8080/wsapp/services/
- После перезапуска Firefox в меню Tools (Инструменты) выберите Test Web Service Application
Теперь немного о самом приложении
Серверная часть является стандартным J2EE web-приложением, упакованным в war-архив. Она использует Axis для экспортирования web-сервиса PeopleService и Spring для реализации внутренней логики. Для интеграции Spring и Axis используется Apache Axis dependency injection. В качестве СУБД используется встраиваемая HSQLDB. Для подключения к БД указывается относительный путь db/mydatabase, поэтому каталог db должен находиться в текущем каталоге JVM, внутри которой исполняется сервлет-контейнер и web-приложение. Для сборки используется Ant. Нет никаких препятствий к тому, чтобы вместо Jetty использовать Tomcat, для этого нужно только переписать цель deploy или выполнить ее вручную.
Клиентская часть является расширением Firefox в формате XPI: пользовательский интерфейс описан на языке XUL, для обработки событий и общения с серверной частью используется JavaScript. Для приложений, использующих платформу XPFE, доступен класс WebServiceProxyFactory, позволяющий автоматически создать прокси для web-сервиса по его wsdl-описанию (такое описание Axis создает автоматически - http://localhost:8080/wsapp/services/PeopleService?wsdl). Однако этот класс заставляет писать код, который по громоздкости немногим уступает прямому использованию Mozilla SOAP API. Поэтому клиентская часть использует собственную реализацию прокси, позволяющую сосредоточиться на предметной области и писать более компактный код.
И серверная, и клиентская часть являются настолько простыми, насколько это возможно, но при этом они используют основные стандарные средства платформ J2EE и XPFE и могут служить основой для построения значительно более сложных приложений.
Ссылки:
Платформа XPFE:
Платформа J2EE:
- http://ws.apache.org/axis/
- http://springframework.org/
- http://opensource.atlassian.com/projects/spring/browse/SPR-371