Разработка веб-служб средствами Java. Ильдар ХабибуллинРазработкаWebслужбсредствами
Скачать 9.24 Mb.
|
318 Разработка Web-служб средствами Java Глава 7. Web Services как часть J2EE 319 /> > 320 Разработка Web-служб средствами Java /> /> Глава 7. Web Services как часть J2EE 321 Размещение Web-служб на У Web-службы, работающей в составе J2EE-cepBepa, есть возможность ис- пользовать компоненты EJB. Реализовать эту возможность можно самыми разными способами. Можно отвести компонентам роль только вспомо- гательных классов, разгружающих сервлеты и страницы JSP. Схема такой реализации показана на рис. 7.1. Адресат Web-службы или страница JSP Рис 7 . 1 . Компоненты EJB в составе Web-службы Другой способ использования компонентов EJB — реализовать ими саму Web-службу, отказавшись от сервлетов, как показано на рис. 7.2. Между этими двумя крайними схемами лежит множество промежуточных решений, использующих компоненты EJB в качестве адресата Web-службы наряду с сервлетами и страницами JSP. Зак. 748 322 Разработка Web-служб средствами Java EJB-контейнер Адресат (Endpoint) Web-службы Entity данных Рис 7.2. Реализация Web-службы компонентами EJB Реализуя Web-службу на по той или иной схеме, следует пом- нить о возможности ее переноса на другой сервер. Ценность созданной ва- ми Web-службы резко возрастет, если она, будучи упакована в EAR-архив, установится на любом J2EE-cepBepe без всяких изменений. Кроме того, следует обеспечить одинаковый доступ клиентам, независимый от способа реализации Web-службы на Для того чтобы обеспечить выполнение этих двух условий, группой ве- дущих компаний под патронажем фирмы IBM разработана специфика- ция "Web Services for J2EE". Она доступна по адресу http://www- Мы будем называть ее сокра- щенно спецификацией "WS4EE". Спецификация WS4EE предлагает свою обобщенную схему реализации Web-службы на основанную на средствах пакета JAX-RPC. Эта схема показана на рис. 7.3. По этой схеме Web-служба помещается в контейнер, которым может служить Web- или EJB-контейнер. Контейнер создает и регистрирует в системе именования JNDI объект, реализующий интерфейс из пакета JAX-RPC. Этот объект содержит адрес Web- службы и служит фабрикой классов, реализующих Web- службы. Клиент находит его средствами JNDI, создает с его помощью объ- ект SEI-интерфейса и через него получает Web-услуги. Такая схема дает одинаковый доступ к Web-службам, построенным самыми разными сочетаниями сервлетов, страниц JSP и компонентов EJB. Саму Web-службу, называемую в спецификации WS4EE портом (port), предлагается реализовать либо классом-служителем (tie) системы JAX- RPC, следовательно, с помощью сервлета либо session- компонентом без сохранения состояния. В первом случае Web-служба будет работать под управлением Web-контейнера, во втором — под управлением EJB-контейнера. Глава 7. Web Services как часть J2EE 323 Клиент Контейнер (Web или EJB) Интерфейс Service Web-служба (Порт) Рис. 7 . 3 . Схема, предлагаемая спецификацией "WS for J2EE" Название "порт" идет от описания WSDL (см. главу 4). Порт включает в се- бя и соответствующий WSDL-элементу и класс-служитель, чьи методы описаны элементом и вспо- могательные классы. У каждого порта есть свой адрес но два порта с разными адресами мо- гут разделять одни и те же классы Web-службы. Адрес порта хранится в объекте-фабрике типа service, который прямо соответствует элементу исходит из описания и строит Web-службу как воплощение такого описания. Реализация порта Поскольку описание WSDL ничего не говорит о способах реализации пор- та, спецификация WS4EE предлагает для этого две модели. • Модель системы JAX-RPC, описанная в главе 6. Она основана на SEI- интерфейсах, классах-служителях и сервлетах и работает в Web- контейнере. • Модель компонентов EJB, основанная на session-компонентах без сохра- нения состояния, предоставляющих Она работает в EJB-контейнере. Спецификация WS4EE ничего не говорит о других моделях, например, мо- дели, основанной на службе сообщений, системе JAXM и MDB- компонентах. Однако она не ограничивает реализацию Web-службы указан- ными в ней двумя моделями. Разработчик может выбрать и другую модель. Обе модели, описанные в спецификации WS4EE, предполагают наличие в составе порта двух обязательных компонентов. • Первый компонент — это интерфейс, предоставляемый клиенту, кото- рый спецификация называет так же как в системе JAX- 324 Разработка Web-служб средствами Java RPC. Этот интерфейс реализует WSDL-описания порта, сделанные эле- ментами И • Второй компонент — это класс, воплощающий методы Его адрес указан элементом WSDL-описания. Он может быть классом-служителем системы JAX-RPC, session-компонентом или каким-то другим классом. Спецификация WS4EE называет этот класс "Service Implementation Bean". Мы будем называть его порт-компонентом. Этот класс обязан реализовать все методы SEI-интерфейса, хотя не обя- зан реализовать сам У каждого порта есть свой адрес указанный в элементе Несколько портов с разными адресами могут разделять один порт- компонент, но они считаются разными портами Web-службы. Поскольку WSDL-файла недостаточно для точного описания реализации порта, а конфигурационные файлы Web-приложения web.xml и EJB- приложения описывают только отдельные сервлеты и отдельные компоненты EJB, необходим дополнительный конфигурационный файл порта. Спецификация WS4EE предлагает написать целых три конфигураци- онных файла. • Первый файл с именем webservices.xml описывает Web-службу. • Второй файл с именем webservicesclient.xml содержит ссылки на другие Web-службы. Он предназначен клиенту Web-службы. • Третий файл, имя которого не фиксировано, описывает соответствие типов Java и по правилам системы JAX-RPC. Будем называть его условно Рассмотрим подробнее каждый из трех конфигурационных файлов. Конфигурационный файл Web-службы Для каждого Web- или EJB-контейнера записывается один конфигурацион- ный файл, описывающий все Web-службы, установленные в этом контейне- ре. Это XML-файл webservices.xml с корневым элементом Web-контейнере этот файл хранится вместе с файлом web.xml в каталоге в EJB-контейнере — вместе с файлом ear-jar.xml в каталоге В корневой элемент — записывается полный путь к WSDL-файлу, начинающийся от корневого Глава 7. Web Services как часть J2EE 325 каталога Web- или Элементом указы- вается полный путь к JAX-RPC-файлу. Один или несколько элементов вложенных в элемент описывают каждый порт-компонент Web- службы. При описании порт-компоненту дается имя в элементе Оно не связано с именем порта в WSDL-файле, и должно быть уникально в пределах модуля. В элементе двумя вложен- ными элементами и записывается префикс и имя XML-элемента, описывающего порт в WSDL-файле. Элемент элемент — полное имя порт-компонента. Имя порт-компонента указывается в одном из двух элементов, вложенных в элемент Имя сервлета записывается во вложенном элементе Оно должно соответствовать имени, записанном в элементе файла Имя session-компонента запи- сывается во вложенном элементе и должно соответствовать ло- гическому имени компонента, записанному в элементе файла Кроме этого, в необязательных элементах следует описать клас- сы-обработчики системы JAX-RPC, если они есть в составе Web-службы, указав при этом их логическое имя, полное имя класса, начальные парамет- ры и блоки заголовка SOAP-послания, которые они обрабатывают. В листинге 7.8 приведена полная схема файла webservices.xml. Значки в квадратных скобках не входят в файл, они, как и в предыдущих главах, от- мечают обязательность и повторяемость элемента. Атрибут id во всех эле- ментах необязателен, он применяется для ссылки на элемент из другого файла. j Листинг 7.8. Структура конфигурационного файла Web-службы id=""> id=""> [?] id=""> [?] id=""> [?] |