This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
wiki:epims4_0:developer:ep-admin [2009/01/21 07:32] 132.168.73.247 |
wiki:epims4_0:developer:ep-admin [2009/01/21 07:49] (current) 132.168.73.247 |
||
---|---|---|---|
Line 6: | Line 6: | ||
FIXME: Il faut mettre en place un "make" ant ou maven pour génération automatique et indépendant de l'IDE... | FIXME: Il faut mettre en place un "make" ant ou maven pour génération automatique et indépendant de l'IDE... | ||
- | Un fichier ReadMe.txt , à la racine du projet, décrit la compilation et l'intégration dans eP-EAR : | + | Un fichier ReadMe.txt , à la racine du projet, décrit la compilation et l'intégration dans eP-EAR. |
- | **__Remarque__** : | + | ===== Chapitres ===== |
- | Vous trouverez dans cette doc quelques TipsAndTrics pour le développement GWt / Spring / eP-Core | + | * [[ePAdminArchi]] |
+ | * Vous trouverez dans cette partie des informations sur l'architecture générale d'eP-Admin ainsi que quelques TipsAndTrics spécifique au développement GWT / Spring / eP-Core | ||
+ | * [[ePAdminArchivage]] | ||
- | ===== Architecture ===== | ||
- | [[https://bioproj.extra.cea.fr/redmine/wiki/epims/BlocNote_creation_eP-Admin | Block 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 : [[http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=GettingStartedCreateProject| 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. | ||
- | |||
- | |||
- | ==== Hosted Mode pour le développement 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"/> | ||
- | |||
- | |||
- | ==== Code Client ==== | ||
- | Sous le package cea.edyp.admin.client on retrouve les sous-packages : | ||
- | * data : défintion des objets manipulés cote client | ||
- | * images : icone et Class ImageBundle correspondante | ||
- | * service : interface des services (RemoteService) rendu par le serveur | ||
- | |||
- | === RemoteService === | ||
- | Pour plus d'info voir le [[http://code.google.com/webtoolkit/|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. | ||
- | |||
- | ==== Code Serveur ==== | ||
- | Pour plus d'info voir le [[http://code.google.com/webtoolkit/|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 grace à spring. ([[http://code.google.com/p/google-web-toolkit-incubator/wiki/IntegratingWithSpring | 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 creationde RemoteService avec CypalStudio, du code est **automatiquement ajouté** (servlet et servlet-mapping) et **doit être supprimé** ! | ||
- | |||
- | <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érement. 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 context spring d'eP-Core) : | ||
- | |||
- | <bean id="archiveGWTService" class="cea.edyp.epims.admin.server.ArchiveGWTServiceImpl"> | ||
- | <property name="archiveService"> | ||
- | <ref bean="archiveManager" /> | ||
- | </property> | ||
- | |||
- | </bean> | ||