MICROGAMES.RU v.2

Новости, примеры, статьи о программировании

-10
-1
-6
-7
Java Java
up C++
up PHP
up Perl

Сравнение скорости работы четырех клиентов веб сервисов Страница 1.

Зачем все это.

В процессе работы нам приходится сталкиваться с различными вариантами реализации клиентов веб сервисов. Сравнивая их по производительности и сложности разработки, мы старались найти оптимальный вариант для различных ситуаций. Мы убедились что нельзя замыкаться на каком-то одном варианте. Окончательный выбор во многом зависит от конкретных условий.

В этом примере мы покажем как сделать простой тестовый веб сервис и сравним скорость работы 4 различных клиентов.

Веб сервис.

Для теста мы не станем придумывать ничего сложного. Клиент будет посылать строку, сервер поменяет слова местами и вернет обратно.
Начнем проектирование веб сервиса с написания WSDL файла. В нем опишем интерфейс сервиса и объекты таким образом:

Интерфейс сервиса:


 <message name="jokerRequest">
  <part name="rq" element="tws:methodRequest"/>
 </message>

 <message name="jokerResponse">
  <part name="rs" element="tws:methodResponse"/>
 </message>

Объекты запроса и ответа:


 <xsd:element name="methodRequest">
  <xsd:annotation>
   <xsd:documentation xml:lang="en">Joker request.</xsd:documentation>
  </xsd:annotation>
  <xsd:complexType>
   <xsd:attribute name="reqString" type="xsd:string" use="required" />
  </xsd:complexType>
 </xsd:element>
 			
 <xsd:element name="methodResponse">
  <xsd:annotation>
   <xsd:documentation xml:lang="en">Joker response.</xsd:documentation>
  </xsd:annotation>
  <xsd:complexType>
   <xsd:attribute name="resString" type="xsd:string" use="required" />
  </xsd:complexType>
 </xsd:element>

Описание сервиса. Пусть будет на 80 порту:


 <service name="Joker">
  <port name="Joker" binding="tws:jokerSOAPBinding">
   <soap:address location="http://localhost"/>
  </port>
 </service>

Полный WSDL можно скачать ниже.

Теперь, точно так же, как написано в предыдущей статье, сгенерируем объекты и интерфейс сервиса:

%JAVA_HOME%\bin\wsimport.exe test.wsdl -s src -d classes

Готово. Вот такой список файлов получился:

	
  localhost
   Joker_Service.java
   Joker.java
   MethodRequest.java
   MethodResponse.java
   ObjectFactory.java
   package-info.java

Самое страшное позади. Осталось написать имплементацию сервиса и выложить все на сервер.
Делаем файл JokerImpl.java реализующий интерфейс Joker:

	
 package localhost;
 
 import java.util.StringTokenizer;
 import javax.ejb.TransactionAttribute;
 import javax.ejb.TransactionAttributeType;
 import javax.jws.WebMethod;
 import javax.jws.WebParam;
 import javax.jws.WebResult;
 import javax.jws.WebService;
 import javax.jws.soap.SOAPBinding;
 import org.jboss.wsf.spi.annotation.WebContext;

 @WebService(serviceName = "Joker", name = "Joker", targetNamespace = "http://localhost")
 @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
 @WebContext( contextRoot = "/joker" , urlPattern="/wsbase" )
 public class JokerImpl implements Joker {

  @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
  @WebMethod
  @WebResult(name = "methodResponse", targetNamespace = "http://localhost", partName = "rs")
  public MethodResponse shift(@WebParam(name = "methodRequest", targetNamespace = "http://localhost", partName = "rq") MethodRequest rq) {
   String ret = "";
   StringTokenizer tokenizer = new StringTokenizer(rq.getReqString(), "+");
   while (tokenizer.hasMoreTokens()) {
    ret = tokenizer.nextToken() + "+" + ret;
   }
   MethodResponse res = new MethodResponse();
   res.setResString(ret);
   return res;
  
  }
 }	

Добавление нескольких аннотаций потребует подключения к проекту пары библиотек из набора сервера JBoss. Это jboss-ejb3x.jar и jbossws-spi.jar.
Как видно из кода, после публикации мы сможем найти WSDL нашего сервиса по следующему адресу: http://localhost/joker/wsbase?wsdl

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

	
  joker.ear
   joker.jar
    localhost
     Joker_Service.class
     Joker.class
     JokerImpl.class
     MethodRequest.class
     MethodResponse.class
     ObjectFactory.class
      package-info.class
    META-INF
     MANIFEST.MF
   META-INF
    application.xml

Содержание application.xml:


 <application>
  <display-name>joker</display-name>
  <module>
   <java>joker.jar</java>
  </module>
 </application>

Совсем не обязательно паковать joker.ear. Во всяком случае, нам намного удобнее вносить изменения в проект в таком виде. А серверу все равно.
Поместим папку joker.ear сюда: jboss/server/default/deploy/. При запуске необходимо убедиться, что все порты, необходимые серверу JBoss свободны. Если все прошло успешно, то, как и планировали, WSDL появиться тут: http://localhost/joker/wsbase?wsdl

Страницы: 1234

Новое сообщение

  Имя
  Email (не обязательно)
  Номер

Microgames.ru v.2 - Новости, примеры, статьи о программировании.
Сделано в 2006 году. Перевыпущен в 2008 году.
Сайт содержит оригинальные материалы и переводы.
Сообщения об ошибках просьба присылать по адресу: contact@microgames.ru