Опубликован: 10.10.2010 | Уровень: специалист | Доступ: платный
Лекция 11:

Web-сервисы. Компиляция и развертывание

< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Аннотация: В лекции дается развернутое описание разработки компиляции и развертывания Web-сервиса и клиента

Рабочий каталог расположен в Practice.

Как это работает

При написании Web -сервисов с помощью инструментария, предоставляемого java, не оставляет ощущение какого-то подвоха - уж слишком просто оказывается это сделать! На самом деле, как и при использовании любого другого хорошего промежуточного программного обеспечения ( middleware ), простота эта кажущаяся - очень много действий за разработчика делает сама среда. И в данном случае процесс взаимодействия между клиентом и Web -сервисом в реальности выглядит следующим образом1Схема взята из комплекта документации The Java Web Services Tutorial фирмы Sun (см. рис. 11.1)

Процесс взаимодействия между клиентом и Web-сервисом

Рис. 11.1. Процесс взаимодействия между клиентом и Web-сервисом

Причем разработчик реализует только функциональную начинку (на схеме - слои, находящиеся над красной линией). Stubs и Ties формируются автоматически утилитами wsgen и wsimport.Сгенерированные этими утилитами классы используют библиотеки поддержки jax-rpc,входящие в состав java. Сервлет, который принимает http -запросы, содержащие SOAP -пакеты, генерируется автоматически сервером приложений.

Компиляция и инсталляция вручную

Следующим шагом мы должны были бы создать клиентское приложение, обращающееся к этому Web -сервису. Однако прежде чем это сделать, видимо, стоит подробнее разобраться с процессом компиляции и установки Web -сервисов. В самом деле, поскольку мы воспользовались скриптами, предоставленными разработчиками The Java Web Services Tutorial,реальные шаги, которые необходимо выполнить при создании Web -сервиса, оказались скрыты2Конечно, при создании собственных Web -сервисов можно модифицировать предоставленные скрипты, или, изучив ant, создавать свои собственные, однако всегда лучше понимать, что на самом деле происходит при выполнении той или иной команды . Таким образом, сейчас мы собираемся проделать те же самые действия - компиляция, генерация вспомогательных файлов, подготовка модуля развертывания и инсталляция сервиса, только теперь уже "вручную".

Первое, что мы проделаем, - деинсталлируем сервис и уничтожим все ранее созданные откомпилированные файлы.

Для деинсталляции выполняем команду:

asant undeploy

или пользуемся интерфейсом административной консоли (рис. 11.2).

Деинсталляция

Рис. 11.2. Деинсталляция

Выбираем, соответственно, пункт меню "Web Applications*, указав в правой части экрана нужное приложение и нажав кнопку Undeploy.

После деинсталляции список установленных Web -сервисов станет пустым.

Команда

asant clean

удаляет вместе со всем содержимым директории ./build и ./assemble,приводя таким образом наш проект в исходное состояние.

Итак, первый шаг, который мы должны сделать, - откомпилировать исходный файл с нашим классом. Чтобы не смешивать результирующие файлы с исходными, по примеру разработчиков исходных скриптов компиляции создадим директорию newbuild.

Тогда команда компиляции будет выглядеть примерно следующим образом:

H:\Java\AppServer\jdk\bin\javac -classpath
H:\Java\AppServer\lib\activation.jar;H:\Java\AppServer\lib\
admin-cli.jar;H:\Java\AppServer\lib\appserv-admin.jar;
H:\Java\AppServer\lib\appserv-cmp.jar;H:\Java\AppServer\lib\
appserv-deployment-client.jar;H:\Java\AppServer\lib\appserv-ext.jar;
H:\Java\AppServer\lib\appserv-jstl.jar;H:\Java\AppServer\lib\
appserv-jwsacc.jar;H:\Java\AppServer\lib\appserv-launch.jar;H:\
Java\AppServer\lib\appserv-rt.jar;H:\Java\AppServer\lib\appserv-
tags.jar;H:\Java\AppServer\lib\appserv-upgrade.jar;H:\Java\
AppServer\lib\appserv-ws.jar;H:\Java\AppServer\lib\
com-sun-commons-launcher.jar;H:\Java\AppServer\lib\
com-sun-commons-logging.jar;H:\Java\AppServer\lib\dbschema.jar;
H:\Java\AppServer\lib\]2ee-svc.jar;H:\Java\AppServer\lib\]2ee.]ar;
H:\Java\AppServer\lib\javaee.]ar;H:\Java\AppServer\lib\]hall.]ar;
H:\Java\AppServer\lib\jmxremote_optional.jar;H:\Java\AppServer\
lib\jsf-impl.jar;H:\Java\AppServer\lib\mail.jar;H:\Java\
AppServer\lib\sun-appserv-ant.jar;H:\Java\AppServer\lib\
toplink-essentials-agent.jar;H:\Java\AppServer\lib\
toplink-essentials.jar;H:\Java\AppServer\jdk\lib\tools.jar;
H:\Java\jwstutorial20_new\examples\jaxws\helloservice\new_build -d
H:\Java\jwstutorial20_new\examples\jaxws\helloservice\new_build
./src/Hello.java

Выглядит, конечно, несколько устрашающе, но на самом деле ничего страшного не происходит - вызывается компилятор javac,в качестве classpath3Переменную classpath можно определить как переменную окружения, в этом случае ее не придется указывать каждый раз перечисляются все библиотеки, входящие в комплект j2ee, с помощью ключа - d указывается, что результат компиляции нужно разместить во вновь созданной папке newbuild,а компилировать нужно файл ./src/Hello.java.

В результате выполнения компиляции в директории newbuild будет создана соответствующая нашей структуре пакетов структура каталогов и в нее будет помещен файл Hello.class.

Следующим шагом необходимо выполнить запуск утилиты wsgen,которая сгенерирует необходимые вспомогательные модули.

Эта команда выглядит следующим образом:

H:\Java\AppServer\bin\wsgen -classpath 
H:\Java\AppServer\lib\activation.jar;
H:\Java\AppServer\lib\admin-cli.jar;
H:\Java\AppServer\lib\appserv-admin.jar;
H:\Java\AppServer\lib\appserv-cmp.jar; 
H:\Java\AppServer\lib\appserv-deployment-client.jar;
H:\Java\AppServer\lib\appserv-ext.jar;
H:\Java\AppServer\lib\appserv-jstl.jar;
H:\Java\AppServer\lib\appserv-jwsacc.jar;
H:\Java\AppServer\lib\appserv-launch.jar;
H:\Java\AppServer\lib\appserv-rt.jar; 
H:\Java\AppServer\lib\appserv-tags.jar;
H:\Java\AppServer\lib\appserv-upgrade.jar;
H:\Java\AppServer\lib\appserv-ws.jar; 
H:\Java\AppServer\lib\com-sun-commons-launcher.jar;
H:\Java\AppServer\lib\com-sun-commons-logging.jar;
H:\Java\AppServer\lib\dbschema.jar;
H:\Java\AppServer\lib\j2ee-svc.jar;
H:\Java\AppServer\lib\j2ee.jar;
H:\Java\AppServer\lib\javaee.jar; 
H:\Java\AppServer\lib\jhall.jar;
H:\Java\AppServer\lib\jmxremote_optional.jar;
H:\Java\AppServer\lib\]sf-impl.]ar; 
H:\Java\AppServer\lib\mail.jar;
H:\Java\AppServer\lib\sun-appserv-ant.jar;
H:\Java\AppServer\lib\toplink-essentials-agent.jar; 
H:\Java\AppServer\lib\toplink-essentials.jar;
H:\Java\AppServer\jdk\lib\ tools.jar;
H:\Java\jwstutorial20_new\examples\]axws\helloservice\ new_bild -d 
H:\Java\jwstutorial20_new\examples\jaxws\helloservice\ new_build -keep -s 
H:\Java\jwstutorial20_new\examples\jaxws\helloservice\new_build 
-verbose helloservice.endpoint.Hello

и должна выполняться в директории newbuild.

По-прежнему в качестве classpath указываются все библиотеки, а также наша директория, в которой лежит откомпилированный класс с Web -сервисом. Ключ -d указывает каталог, в который необходимо разместить результирующие файлы; ключ -s указывает директорию для размещения сгенерированных исходных кодов; ключ -keep указывает на то, что после компиляции файлы с исходными кодами нужно сохранить; ключ -verbose обязывает утилиту генерировать отчет о своих действиях. Последний параметр задает обрабатываемый класс. В результате работы утилиты мы получаем два дополнительных сервисных класса, расположенных в пакете helloservice.endpoint.jaxws.

Следующим этапом будет инсталляция нашего Web -сервиса в сервер приложений. Для этого сначала нужно создать стандартную структуру каталогов для Web -приложения. Структура эта такая:

  • в корне лежат файлы *.html, *.jsp и т.д. - файлы, которые должны быть видны и доступны клиенту при их наборе в строке адреса браузера;
  • /WEB-INF/web.xml - Web Application Deployment Descriptor для приложения. Это XML файл, описывающий сервлеты и другие компоненты приложения, их параметры инициализации и т.д.;
  • /WEB-INF/sun-web.xml - описывает параметры приложения, специфические для сервера приложений Sun ;
  • /WEB-INF/sun-jaxws.xml - описывает параметры, необходимые серверу приложений для создания Web -сервиса;
  • /WEB-INF/classes/ - директория содержит классы приложения (именно классы, а не архивы jar );
  • /WEB-INF/lib/ - директория содержит архивы jar, необходимые для работы приложения.

Создадим новую директорию newassemble и в ней соответствующую структуру каталогов:

new_assemble\WEB-INF\classes new_assemble\WEB-INF\sun-jaxws.xml 
new_assemble\WEB-INF\sun-web.xml new_assemble\WEB-INF\web.xml
new_assemble\WEB-INF\classes\helloservice\endpoint\Hello.class
new_assemble\WEB-INF\classes\helloservice\endpoint\jaxws\
SayHello.class
new_assemble\WEB-INF\classes\helloservice\endpoint\jaxws\SayHello.java
new_assemble\WEB-INF\classes\helloservice\endpoint\jaxws\SayHelloResponse.class
new_assemble\WEB-INF\classes\helloservice\endpoint\jaxws\SayHelloResponse.java

И теперь инсталлируем наш сервис командой:

asadmin deploydir H:\Java\jwstutorial20_new\examples\jaxws\ 
helloservice\new_assemble

После ее успешного завершения новый сервис инсталлирован, в чем можно убедиться, войдя в административную консоль.

< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Алмаз Мурзабеков
Алмаз Мурзабеков
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type"


Java version 1.7.0_05
Александр Хвостов
Александр Хвостов
Россия
Максим Лютов
Максим Лютов
Россия, СПб, Политех, 2012