Contrairement à Burlaps ou Hessian qui utilisent des sérialisations binaire et XML indépendantes à Java, HttpInvoker utilise la sérialisation Java standard.
Cela implique que HttpInvoker ne fonctionne bien evidemment 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 tout les deux basés sur Spring.
Afin d'exporter un service, la classe HttpInvokerServiceExporter sera utilisée :
< bean id = " monService " class = " com.developpez.spring.remoting.MonServiceImpl " >
< / bean >
< bean name = " /MonServiceHttpInvoker " class = " org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter " >
< property name = " service " >
< ref bean = " monService " / >
< / property >
< 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'information ).
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 :
< 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 :
< bean id = " monServiceProxy " class = " org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean " >
< property name = " serviceUrl " >
< value > http://localhost:8080/MonApplication/remoting/MonServiceHttpInvoker< / value >
< / property >
< 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 ).
|