Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type" Java version 1.7.0_05 |
Web-сервисы. Компиляция и развертывание
Рабочий каталог расположен в Practice.
Как это работает
При написании Web -сервисов с помощью инструментария, предоставляемого java, не оставляет ощущение какого-то подвоха - уж слишком просто оказывается это сделать! На самом деле, как и при использовании любого другого хорошего промежуточного программного обеспечения ( middleware ), простота эта кажущаяся - очень много действий за разработчика делает сама среда. И в данном случае процесс взаимодействия между клиентом и Web -сервисом в реальности выглядит следующим образом1Схема взята из комплекта документации The Java Web Services Tutorial фирмы Sun (см. рис. 11.1)
Причем разработчик реализует только функциональную начинку (на схеме - слои, находящиеся над красной линией). Stubs и Ties формируются автоматически утилитами wsgen и wsimport.Сгенерированные этими утилитами классы используют библиотеки поддержки jax-rpc,входящие в состав java. Сервлет, который принимает http -запросы, содержащие SOAP -пакеты, генерируется автоматически сервером приложений.
Компиляция и инсталляция вручную
Следующим шагом мы должны были бы создать клиентское приложение, обращающееся к этому Web -сервису. Однако прежде чем это сделать, видимо, стоит подробнее разобраться с процессом компиляции и установки Web -сервисов. В самом деле, поскольку мы воспользовались скриптами, предоставленными разработчиками The Java Web Services Tutorial,реальные шаги, которые необходимо выполнить при создании Web -сервиса, оказались скрыты2Конечно, при создании собственных Web -сервисов можно модифицировать предоставленные скрипты, или, изучив ant, создавать свои собственные, однако всегда лучше понимать, что на самом деле происходит при выполнении той или иной команды . Таким образом, сейчас мы собираемся проделать те же самые действия - компиляция, генерация вспомогательных файлов, подготовка модуля развертывания и инсталляция сервиса, только теперь уже "вручную".
Первое, что мы проделаем, - деинсталлируем сервис и уничтожим все ранее созданные откомпилированные файлы.
Для деинсталляции выполняем команду:
asant undeploy
или пользуемся интерфейсом административной консоли (рис. 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
После ее успешного завершения новый сервис инсталлирован, в чем можно убедиться, войдя в административную консоль.