User Tools

Site Tools


wiki:epims4_1:developer:epadminarchi

Architecture eP-Admin

Accès au Bloc Note sur la création eP-Admin sur le serveur RedMine

Ce Projet est un projet écrit en GWT. On retrouve donc l'architecture classique (je crois ;o)) des projets GWT : (référence : GWT Project)

  • Sous cea.edyp.epims.admin on trouve AdminManager.gwt.xml : définition du module utilisé pour le hosted mode.
  • package cea.edyp.epims.admin.public : contient les fichiers (css, js, html…) qui seront copié tels quel dans l'application web finale.
  • package cea.edyp.epims.admin.client : Code qui sera ensuite compilé en JS pour être exécuté coté client. Voir les restriction sur le site GWT…
  • package cea.edyp.epims.admin.server : Code Java exécuté coté serveur.
  • Sous WebContent/WEB-INF: Définition des fichiers de configuration des application Web

Hosted Mode pour le développement

GWT permet de tester son application avec un serveur embarqué.

Le fichier AdminManager.gwt.xml, qui est utilisé pour ce mode et uniquement pour ce mode, est mis à jour automatiquement lors de la création de RemoteService par CypalStudio. La définition du servlet implémentant le nouveau RemoteService est ajouté :

<servlet class="cea.edyp.epims.admin.server.DataManagmentServiceImpl" path="/data.service"/>

Or, ATTENTION, nous utilisons une architecture hibernate / spring et l'accès aux services GWT ne peut pas se faire directement ! Il est nécessaire de passer via les servelt dispatcher de spring … voir chapitre cote serveur… ce qui n'est pas possible en hosted mode. Par conséquent, lors de l'ajout de nouveau RemoteService il est nécessaire :

  • de créer, coté serveur, un FakeXXXGWTServiceImpl
  • de modifier AdminManager.gwt.xml pour référencer cette classe
<servlet class="cea.edyp.epims.admin.server.FakeDataMngtServiceImpl" path="/data.service"/>

Coté Client

Sous le package cea.edyp.admin.client on retrouve les sous-packages :

  • model : définition des objets manipulés cote client
  • service : interface des services (RemoteService) rendu par le serveur
  • ui : définition de Panel constituant l'IHM.
  • ui.component : définition de composants plus générique utilisés dans l'IHM.
  • util : icône et Class ImageBundle correspondante ainsi que la définition des ressources (messages)

RemoteService

Pour plus d'info voir le site GWT

Pour chaque Remote Service, on trouve :

  • les interfaces (XXXGWTService et XXXGWTServiceAsync) . Chaque interface XXXGWTService contient le code suivant :
public static final String SERVICE_URI = "uri.service";
public static class Util {
   public static XXXGWTServiceAsync getInstance() {
	XXXGWTServiceAsync instance = (XXXGWTServiceAsync) GWT.create(XXXGWTService.class);
ServiceDefTarget target = (ServiceDefTarget) instance;
target.setServiceEntryPoint(GWT.getModuleBaseURL() + SERVICE_URI);
return instance;
   }
}

Le ServiceURI est l'URI utilisé pour l'appel au service cote serveur. Attention, cette uri doit impérativement être terminé par .service (voir cote serveur). La classe Util permet d'obtenir la classe d'implémentation (fourni par GWT) des services.

L'utilisation des services dans le code client est simple :

XXXGWTServiceAsync xxxService = XXXGWTService.Util.getInstance();
xxxService.serviceMethod(uniqueParam, new MyOperationCallback());		

La classe MyOperationCallback défnit les méthodes onSucess et onFailure appelés par le serveur.

Coté Serveur

Pour plus d'info voir le site GWT

Dans le package cea.edyp.epims.admin.server on trouve les classes d'implémentation des RemoteService. Ces classes utilisent les services eP-Core pour l'accès aux données. L'accès aux services d'eP-Core se fait grâce à spring. ( Integrating with GWT)

  • fichier web.xml contient la définition d'un spring dispatcher. La configuration de celui-ci est dans le fichier springDispatcher-servlet.xml. Aucune modification n'est nécessaire ici lors de l'ajout de service. Attention: lors de la création de RemoteService avec CypalStudio, du code est automatiquement ajouté (servlet et servlet-mapping) et doit être supprimé !

La définition à conservée :

<servlet>
	<servlet-name>springDispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>springDispatcher</servlet-name>
	<url-pattern>*.service</url-pattern>
</servlet-mapping>
  • fichier springDispatcher-servlet.xml fichier spring permettant l'accès aux services GWT et la configuration de ceux-ci avec les services eP-Core !
    • mapping entre les url et le bean appelé :
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <value>
     /**/archive.service=archiveController
     /**/data.service=dataController
   </value>
  </property> 
</bean>
  • définition des bean appelé : tous ayant la même classe d'implémentation mais avec la propriété remoteService initialisée différemment. Ces remoteService correspondent à l'implémentation des RemoteService GWT. Attention : en plus de ce que dit la doc, GWTController doit également implémenter ServletContextAware pour être correctement initialisé !
<bean id="archiveController" class="cea.edyp.epims.admin.server.GWTController">
 <property name="remoteService">
   <ref bean="archiveGWTService" />
 </property>
</bean>

<bean id="dataController" class="cea.edyp.epims.admin.server.GWTController">
 <property name="remoteService">
   <ref bean="dataGWTService" />
 </property>
</bean>
  • Initialisation des beans services GWT avec les services eP-Core (id des beans définis dans le contexte spring d'eP-Core) :
<bean id="archiveGWTService" class="cea.edyp.epims.admin.server.ArchiveGWTServiceImpl">
   <property name="archiveService">
      <ref bean="archiveManager" />
   </property>
   
</bean>
wiki/epims4_1/developer/epadminarchi.txt · Last modified: 2009/02/19 18:16 (external edit)