FAQ SpringConsultez toutes les FAQ

Nombre d'auteurs : 5, nombre de questions : 41, dernière mise à jour : 24 avril 2008  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.


Sommaire Remoting (4)
précédent sommaire suivant
 

Burlap est un protocole basé sur XML et sur http pour exporter un service. Il est normalement indépendant du langage, mais actuellement principalement utilisé pour des applications Java à Java.

Afin d'exporter un service avec Burlap, il est nécessaire que celui-ci soit composé d'une interface et d'une implémentation.
Dès lors il est très simple d'exporter un service :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- Configuration du service en lui-même --> 
<bean id="monService" class="com.developpez.spring.remoting.MonServiceImpl"> 
	<!-- Définition des propriétés --> 
</bean> 
  
<bean name="/MonServiceBurlap" class="org.springframework.remoting.caucho.BurlapServiceExporter"> 
	<!-- Spécification de l'implémentation du service --> 
	<property name="service"> 
		<ref bean="monService"/> 
	</property> 
  
	<!-- Spécification de l'interface du service à exporter --> 
	<property name="serviceInterface"> 
		<value>com.developpez.spring.remoting.MonService</value> 
	</property> 
  
</bean>
Le nom « /MonServiceBurlap » permet d'identifier l'URL d'accès à ce service, et pour cela, il est évidemment nécessaire que ces définitions soient faites dans le fichier de configuration de contexte d'une DispatcherServlet (voir Spring MVC pour plus d'informations).

Par exemple, pour une Servlet de nom remoting, c'est dans un fichier WEB-INF/remoting-servlet.xml. Le fichier web.xml correspondant pourrait être :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
<servlet> 
	<servlet-name>remoting</servlet-name> 
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
	<load-on-startup>1</load-on-startup> 
</servlet> 
  
<servlet-mapping> 
	<servlet-name>remoting</servlet-name> 
	<url-pattern>/remoting/*</url-pattern> 
</servlet-mapping>
Dès lors, si l'application Web est déployée et possède comme URL d'accès http://localhost:8080/MonApplication, le service Burlap sera accessible via http://localhost:8080/MonApplication/remoting/MonServiceBurlap.

Au niveau du client, il existe un mécanisme similaire pour se connecter au service :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
<bean id="monServiceProxy" class="org.springframework.remoting.caucho.BurlapProxyFactoryBean"> 
	<!-- Configuration de l'url d'accès  --> 
	<property name="serviceUrl"> 
		<value>http://localhost:8080/MonApplication/remoting/MonServiceBurlap</value> 
	</property> 
  
	<!-- Configuration de l'interface du service que le proxy doit implémenté  --> 
	<property name="serviceInterface"> 
		<value>com.developpez.spring.remoting.MonService</value> 
	</property> 
</bean>
Dès lors, il est possible d'injecter monProxyService de manière tout à fait standard à tout Bean nécessitant une référence au service (via son interface).

Mis à jour le 8 août 2007 Hikage

Contrairement à Burlaps ou Hessian qui utilisent des sérialisations binaires et XML indépendantes à Java, HttpInvoker utilise la sérialisation Java standard.
Cela implique que HttpInvoker ne fonctionne bien évidemment qu'entre deux applications Java, mais aussi que tous les objets qui sont transférés suivent les règles de sérialisation Java : Implémenter l'interface java.io.Serializable ainsi que de définir un serialVersionUID correctement.

De plus, HttpInvoker n'est disponible qu'avec Spring, il est donc nécessaire que le client et le serveur soient tous les deux basés sur Spring.

Afin d'exporter un service, la classe HttpInvokerServiceExporter sera utilisée :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- Configuration du service en lui-même --> 
<bean id="monService" class="com.developpez.spring.remoting.MonServiceImpl"> 
	<!-- Définition des propriétés --> 
</bean> 
  
<bean name="/MonServiceHttpInvoker" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"> 
	<!-- Spécification de l'implémentation du service --> 
	<property name="service"> 
		<ref bean="monService"/> 
	</property> 
  
	<!-- Spécification de l'interface du service à exporter --> 
	<property name="serviceInterface"> 
		<value>com.developpez.spring.remoting.MonService</value> 
	</property> 
  
</bean>
Le nom « /MonServiceHttpInvoker » permet d'identifier l'URL d'accès à ce service, et pour cela, il est évidemment nécessaire que ces définitions soient faites dans le fichier de configuration de contexte d'une DispatcherServlet (voir Spring MVC pour plus d'informations).

Par exemple, pour une Servlet de nom remoting, c'est dans un fichier WEB-INF/remoting-servlet.xml. Le fichier web.xml correspondant pourrait être :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
<servlet> 
	<servlet-name>remoting</servlet-name> 
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
	<load-on-startup>1</load-on-startup> 
</servlet> 
  
<servlet-mapping> 
	<servlet-name>remoting</servlet-name> 
	<url-pattern>/remoting/*</url-pattern> 
</servlet-mapping>
Dès lors, si l'application Web est déployée et possède comme URL d'accès http://localhost:8080/MonApplication, le service HttpInvoker sera accessible via http://localhost:8080/MonApplication/remoting/MonServiceHttpInvoker.

Au niveau du client, il existe un mécanisme similaire pour se connecter au service :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
<bean id="monServiceProxy" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> 
	<!-- Configuration de l'URL d'accès  --> 
	<property name="serviceUrl"> 
		<value>http://localhost:8080/MonApplication/remoting/MonServiceHttpInvoker</value> 
	</property> 
  
	<!-- Configuration de l'interface du service que le proxy doit implémenter  --> 
	<property name="serviceInterface"> 
		<value>com.developpez.spring.remoting.MonService</value> 
	</property> 
</bean>
Dès lors, il est possible d'injecter monProxyService de manière tout à fait standard à tout Bean nécessitant une référence au service (via son interface).

Mis à jour le 8 août 2007 Hikage

Hessian est un protocole binaire, basé sur http pour exporter un service. Il est normalement indépendant du langage, mais actuellement principalement utilisé pour des applications Java à Java.

Afin d'exporter un service avec Hessian, il est nécessaire que celui-ci soit composé d'une interface et d'une implémentation.
Dès lors il est très simple d'exporter un service :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- Configuration du service en lui-même --> 
<bean id="monService" class="com.developpez.spring.remoting.MonServiceImpl"> 
	<!-- Définition des propriétés --> 
</bean> 
  
<bean name="/MonServiceHessian" class="org.springframework.remoting.caucho.HessianerviceExporter"> 
	<!-- Spécification de l'implémentation du service --> 
	<property name="service"> 
		<ref bean="monService"/> 
	</property> 
  
	<!-- Spécification de l'interface du service à exporter --> 
	<property name="serviceInterface"> 
		<value>com.developpez.spring.remoting.MonService</value> 
	</property> 
  
</bean>
Le nom « /MonServiceHessian » permet d'identifier l'URL d'accès à ce service, et pour cela, il est évidemment nécessaire que ces définitions soient faites dans le fichier de configuration de contexte d'une DispatcherServlet (voir Spring MVC pour plus d'informations).

Par exemple, pour une Servlet de nom remoting, c'est dans un fichier WEB-INF/remoting-servlet.xml. Le fichier web.xml correspondant pourrait être :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
<servlet> 
	<servlet-name>remoting</servlet-name> 
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
	<load-on-startup>1</load-on-startup> 
</servlet> 
  
<servlet-mapping> 
	<servlet-name>remoting</servlet-name> 
	<url-pattern>/remoting/*</url-pattern> 
</servlet-mapping>
Dès lors, si l'application Web est déployée et possède comme URL d'accès http://localhost:8080/MonApplication, le service Hessian sera accessible via http://localhost:8080/MonApplication/remoting/MonServiceHessian.

Au niveau du client, il existe un mécanisme similaire pour se connecter au service :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
<bean id="monServiceProxy" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> 
	<!-- Configuration de l'URL d'accès  --> 
	<property name="serviceUrl"> 
		<value>http://localhost:8080/MonApplication/remoting/MonServiceHessian</value> 
	</property> 
  
	<!-- Configuration de l'interface du service que le proxy doit implémenter  --> 
	<property name="serviceInterface"> 
		<value>com.developpez.spring.remoting.MonService</value> 
	</property> 
</bean>
Dès lors, il est possible d'injecter monProxyService de manière tout à fait standard à tout Bean nécessitant une référence au service (via son interface).

Mis à jour le 8 août 2007 Hikage

Pour intégrer Apache Axis2 et Spring de manière à ce que ce dernier gère les instances des web services, il faut déclarer le bean qui représente le web service dans le fichier de configuration du web service, c'est-à-dire dans le fichier « services.xml » via le tag « SpringBeanName ».

Code xml : Sélectionner tout
<parameter name="SpringBeanName" locked="false">monBeanWebService</parameter>
ET indiquer à Axis que Spring est le fournisseur d'instances, via le tag « ServiceObjectSupplier » dans le fichier « services.xml ».

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
<service name="MonService"> 
    <description> 
        Mon super service 
    </description> 
    <messageReceivers> 
        <messageReceiver 
            mep="http://www.w3.org/2004/08/wsdl/in-out" 
    		class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> 
    </messageReceivers> 
    <parameter name="ServiceObjectSupplier" locked="false">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter> 
    <parameter name="SpringBeanName" locked="false">monBeanWebService</parameter> 
    <parameter name="useOriginalwsdl">true</parameter> 
</service>
Les lignes importantes dans ce fichier sont :

Code xml : Sélectionner tout
1
2
<parameter name="ServiceObjectSupplier" locked="false">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter> 
<parameter name="SpringBeanName" locked="false">monBeanWebService</parameter>
« monBeanWebService » est un bean (une classe publique non abstraite non finale avec des méthodes publiques qui représentent les services exposés) qui est déclaré dans un fichier de configuration Spring.

Mis à jour le 24 avril 2008 Righetto Dominique

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Spring : Mickael Baron - Robin56 -