Archive
Eclipse RCP/RAP with Spring DM, Spring Data JPA and Remoting [step11]
In [step10] we have created RAP Application from the RCP Application. At this step we have several Client Layer :
- OSGi Bundle Activator (simpleclient)
- RCP Application
- RAP Application
which consumes Service Layer : UserService (from Mock Dao, JPA Dao) to retrieve list of User :
package fr.opensagres.services; import java.util.Collection; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import fr.opensagres.domain.User; public interface UserService { Collection<User> findAll(); Page<User> findAll(Pageable pageable); Collection<User> findByFirstNameLikeAndLastNameLike(String firstName, String lastName); Page<User> findByFirstNameLikeAndLastNameLike(String firstName, String lastName, Pageable pageable); User saveUser(User user); }
Here, The Client and Service Layer are in the same OSGi container. Now we wish manage Client/Server architecture to have :
- Client Layer in an OSGi container
- Service Layer in an other OSGi container
the Client Layer will consume Service Layer with remoting mean.
Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step11]
Dans le billet précédant [step10] nous avons mis en place Spring Remoting coté client (client avec/sans OSGi) qui fait appel (via Remoting HTTP Invoker) au service UserService exposé par l’application WEB classique dynaresume-server. Dans ce billet nous allons transformer l’application WEB classique en bundle OSGi.
Voici un schéma de ce que nous allons effectuer dans ce billet concernant le bundle OSGi org.dyanresume.remoting.exporter.http qui va remplacer l’application WEB classique dynaresume-server :
Ce schéma montre que nous allons :
- créer le bundle org.dyanresume.remoting.exporter.http qui s’occupe de :
- récupérer du registre de services OSGi, le service UserService qui a été enregistré par le bundle org.dynaresume.services.impl. Ceci s’effectue déclarativement dans le fichier XML Spring module-osgi-context.xml.
- exposer via Remoting HTTP Invoker le service UserService. Ceci s’effectue déclarativement dans le fichier XML Spring module-context.xml.
- enrichir la Target Platform avec les bundles Spring WEB Extender, Tomcat et/ou Jetty. Le serveur Tomcat/Jetty est un bundle OSGi. Il n’y a pas besoin d’installer un Tomcat ou Jetty classique.
On peut remarquer dans ce schéma que l’implémentation des services ne se trouvent pas dans l’application WEB. Il est récupéré via le registe de services OSGi. Ce procédé permet ainsi d’arrêter/lancer ou d’installer un nouveau bundle qui fournit l’implémentation des services sans arrêter l’application WEB.
Nous verrons ensuite comment utiliser nos différents bundles OSGi à travers des launch (Run) pour avoir :
- une architecture Client / Serveur. Le client appelle les services exportés par le bundle OSGi qui tourne dans un serveur de type :
- Tomcat. Le launch OSGi DynaResume – Server Tomcat 5.5.launch permettra de déployer le bundle application WEB org.dyanresume.remoting.exporter.http dans un serveur Tomcat.
- Jetty. Le launch OSGi DynaResume – Server Jetty 6.1.9.launch permettra de déployer le bundle application WEB org.dyanresume.remoting.exporter.http dans un serveur Jetty.
Le launch OSGi DynaResume – Client (Server).launch permettra de lancer le client qui recherche le services via Remoting HTTP Invoker.
- une architecture Full Client. Tous les bundles client et services (API et Implémentation) se retrouvent dans le même conteneur OSGi. Le launch OSGi DynaResume – Full Client.launch mettra en œuvre cette architecture.
Vous pouvez télécharger org.dynaresume_step11-spring-osgi-remoting.zip qui contient les projets expliqués dans ce billet :
- tous les projets (bundles OSGi + Target Platform créés jusqu’à maintenant) expliqués dans le pré-requis.
- org.dyanresume.remoting.exporter.http, bundle de remoting serveur qui est l’application WEB qui expose les services via Remoting HTTP Invoker.
- le projet spring-target-platform est enrichi :
- avec les bundles OSGi WEB, serveur Tomcat et Jetty.
- les launch (Run) des diverses architectures.
Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step10]
Dans le billet précédant [step9] nous avons mis en place Spring Remoting, coté serveur dans l’application WEB dynaresume-server. Dans ce billet nous allons mettre en place Spring Remoting coté client dans un Client sans OSGi et un Client OSGi.
Voici un schéma de ce que nous allons effectuer dans ce billet concernant le client OSGi :
Ce schéma montre que nous allons :
- créer le bundle org.dyanresume.remoting.importer.http qui s’occupe de :
- récupérer le service UserService exposé par le serveur à l’aide HtppInvoker de Spring remoting. Ceci s’effectue déclarativement dans le fichier XML Spring module-context.xml.
- enregistrer dans le registre de services OSGi le service UserService récupéré du serveur. Ceci s’effectue déclarativement dans le fichier XML Spring module-osgi-context.xml.
- créer le fragment org.dynaresume.config.remoting.importer.http qui stocke le fichier client.properties qui permet de configurer les paramètres de connexion au serveur.
- enrichir la Target Platform avec le bundle Spring WEB.
Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step9]
Dans les billets précédants [step7] et [step8] nous avons utilisé Spring Dynamic Module pour déclarer la consommation/l’enregistrement du service OSGi UserService dans le registre de services OSGi.
A partir de ce billet nous allons nous concentrer sur la mise en place d’une architecture Client/Serveur, autrement dit :
- Serveur : les services seront hébergés dans une application WEB (classique, bundle OSGi…) qui exposera le service UserService.
- Client : le client (main classique, bundle OSGi, Eclipse RCP) appelera le UserService pour récupérer la liste des User qui seront transmis du serveur au client. Le service UserService sera accéssible via l’URL http://localhost:8080/dynaresume-server/remoting/UserService.
Dans ce billet nous allons nous occuper de la partie Serveur en mettant en place une application WEB classique qui expose le service UserService à l’aide de Spring Remoting. Dans le prochain billet nous décrirons comment mettre en place un client (sans OSGi et avec OSGi) qui fera appel au serveur en appelant le service UserService exposé par l’application WEB. Dans les billets futurs nous verrons comment transformer notre application WEB en bundle OSGi pour bénéficier de la technologie OSGi coté serveur.
Voici un schéma de ce que nous allons effectuer dans ce billet :
Ce schéma montre que :
- nous allons créer une application WEB classique de contexte dynaresume-server. Pour cela nous utiliserons un Dynamic Web Project .
- le service UserService est accéssible via HTTP en utilisant HttpInvoker de Spring Remoting. Pour gérer cela, :
- un Listener Spring ContextLoaderListener doit ête défini pour charger le fichier XML Spring de configuration WEB-INF/applicationContext.xml qui joue le rôle de factory de services.
- une Servlet Spring DispatcherServlet doit être défini pour charger le fichier XML Spring de configuration WEB-INF/remoting-servlet.xml qui permet d’exposer via HTTP le service UserService.
- l’interface UserService et la classe User doivent être communes au client et au serveur.
Nous utiliserons un serveur Tomcat pour hébérger notre application WEB.