Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
1
Ingénierie dirigée par les modèlesCas du projet de la plateforme OpenUSS
Outil : AndroMDAPlateforme : OpenUSS
Alain Corbière
2
● Le contexte ;● Une ingénierie dirigée par les modèles ;
● Des modèles ;● Le processus dirigé par les modèles ;● Un cas d'illustration.
● Évolution du projet OpenUSS/Évolution du projet AndroMDA.
3
● Le contexte
4
● Le contexte● Projets de plateformes de formation à distance
– Moodle (GPL): ingénierie centrée activité pédagogique ;● http://moodle.org/stats/ (703 114 utilisateurs)
– Sakai project/foundation (ECL): ingénierie centrée fléxibilité ;● http://bugs.sakaiproject.org/confluence/display/SBCO/Sakai+Partners+Program+2005+Budget (Budget de $820,000)
– LAMS foundation (GPL): ingénierie centrée scénario d'apprentissage ;● http://lamsfoundation.org/ (142 sénarios)
– OpenUSS (GPL*): ingénierie dirigée par les modèles ;● http://openuss.svn.sourceforge.net/viewvc /openuss/tags/openuss-plexus-3.0-M1
/openuss-plexus/plexus/plexus-model/src/main/uml/ (29 diagrammes de classes/d'implémentation/de cas d'utilisation/d'état)
– ...
5
● Le contexte● De faire collaborer les acteurs des différents projets
de plateformes de formation ;– Informaticiens ;– Administrateurs ;– Concepteurs de cours ;– Étudiants.
6
● Ingénierie dirigée par les modèles: une réponse● Des modèles ;
– Spécifier différents aspects/points de vue ;– Positionner à un niveau d'abstraction donné ;– Utiliser différents langages/formalismes de représentation ;– Définir de nouveaux aspects.
● Un processus dirigé par les modèles.– Comprendre cette ingénierie ;– Intégrer de nouveaux aspects/points de vue ;– Négocier/diffuser ces modifications.
7
● Des modèles / un processus dirigé par les modèles ;
8
● Un processus dirigé par les modèles ;
CodeTnModèle
9
Modèle
TnTn
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
● Un processus dirigé par les modèles ;
10
● Cas d'illustration:● Besoin d'observer le comportement de l'activité Discussion ;● Intégration d'un composant dans OpenUSS ;
– En considérant le modèle de conception ;– En considérant le processus dirigé par les modèles .
11
● Cas d'illustration:● En considérant le modèle de conception d'OpenUSS
– Nous agissons au premier niveau de transformation (T6) ;
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
12
● Cas d'illustration:● En considérant le modèle de conception d'OpenUSS
– Nous ajoutons une règle dans le processus de transformation ;● context.xml.vsl (génère le fichier applicationContext.xml)
– http://openuss.svn.sourceforge.net/viewvc/openuss/tags/openuss-plexus-3.0-M1 /openuss-plexus/tools/andromda/templates/spring/context.xml.vsl
<list> ...#if ($entity.getBeanName(false).equals("discussionService")) <value>jamonPerformanceMonitorInterceptor</value>#end </list>
13
● Cas d'illustration:● En considérant le modèle de conception d'OpenUSS
– Nous ajoutons une règle dans le processus de transformation ;● context.xml.vsl (génère le fichier applicationContext.xml)
– http://openuss.svn.sourceforge.net/viewvc/openuss/tags/openuss-plexus-3.0-M1 /openuss-plexus/tools/andromda/templates/spring/context.xml.vsl
Couplage faible : Principe d'architecture logicielle pour minimiser l'impact d'une modification dans la structure d'un système.
<list> ...#if ($entity.getBeanName(false).equals("discussionService")) <value>jamonPerformanceMonitorInterceptor</value>#end </list>
14
● Cas d'illustration: ● En considérant le modèle de conception d'OpenUSS
<list> ...#if ($entity.getBeanName(false).equals("discussionService")) <value>jamonPerformanceMonitorInterceptor</value>#end </list>
Annotation Modèle Applicationmétier
Spring
Hibernate
Java
applicationContext.xml
*.hbm.xml
*.java
T2
T6
T3T3
T1
15
● Cas d'illustration:● Le processus dirigé par les modèles d'OpenUSS (AndroMDA)
intègre un ensemble de composants (Cartridge) pour définir les éléments transformés et les règles à respecter ;
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
16
● Cas d'illustration: ● Le processus dirigé par les modèles d'OpenUSS (AndroMDA) utilise
un modèle de représentation : Les diagrammes UML ;
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
17
● Cas d'illustration:● Le processus dirigé par les modèles d'OpenUSS (AndroMDA) utilise
le système d'annotation des diagrammes UML (stéréotypes/balises/.) ;
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
18
● Cas d'illustration:● Processus dirigé par les modèles d'OpenUSS ;
– http://openuss.svn.sourceforge.net/viewvc/openuss/tags/openuss-plexus-3.0-M1
/openuss-plexus/plexus/plexus-model/pom.xml
<properties><andromda.config>andromda.xml</andromda.config><model.uri>
jar:file:${project.build.sourceDirectory}/plexus.xml.zip!/plexus.xml</model.uri><filter></filter><validation>true</validation><conf.dir>${pom.basedir}/src/main/config</conf.dir><web.application.name>openuss</web.application.name><!-- cartridge output locations --><api.generated.dir>
${pom.basedir}/../plexus-api/target/src</api.generated.dir>...
<properties>
T3 T4 T5
T6 T7 T8
T1 T2
²
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
19
²
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java● Cas d'illustration:● En considérant le processus dirigé par les modèles d'OpenUSS
– Nous agissons au niveau de la transformation (T1) ;● http://galaxy.andromda.org/docs-3.2/andromda-spring-cartridge/profile.html
20
● Cas d'illustration:● Observer le comportement de l'activité Discussion ;
²
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
21
● Cas d'illustration: ● Comprendre le modèle ;
<<Service>>DiscussionService
{@andromda.spring.service.interceptors=jamonPerformanceMonitorInterceptor, }
+getForum( domainObject : DomainObject ) : ForumInfo
+removeAttachment( post : PostInfo, file : FileInfo ) : void
+createTopic( post : PostInfo, forum : ForumInfo ) : void
+addAttachment( post : PostInfo, file : FileInfo ) : void
+addPost( post : PostInfo, topic : TopicInfo ) : void
+removeForumWatch( forum : ForumInfo ) : void
+watchesForum( forum : ForumInfo ) : boolean
+removeTopicWatch( topic : TopicInfo ) : void+addForumWatch( forum : ForumInfo ) : void
+changeEditState( forum : ForumInfo ) : void
+watchesTopic( topic : TopicInfo ) : boolean
+changeEditState( topic : TopicInfo ) : void
+addTopicWatch( topic : TopicInfo ) : void
+getAttachments( post : PostInfo ) : List
+getTopic( topic : TopicInfo ) : TopicInfo
+addForum( forum : ForumInfo ) : void
+deleteTopic( topic : TopicInfo ) : void
+getTopics( forum : ForumInfo ) : List
+getPost( post : PostInfo ) : PostInfo+updatePost( post : PostInfo ) : void+deletePost( post : PostInfo ) : void
+getPosts( topic : TopicInfo ) : List
+addHit( topic : TopicInfo ) : void
²
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
22
● Cas d'illustration: ● Comprendre le modèle (dépendances) ;
<<Service>>DiscussionService
{@andromda.spring.service.interceptors=jamonPerformanceMonitorInterceptor, }
+getForum( domainObject : DomainObject ) : ForumInfo
+removeAttachment( post : PostInfo, file : FileInfo ) : void
+createTopic( post : PostInfo, forum : ForumInfo ) : void
+addAttachment( post : PostInfo, file : FileInfo ) : void
+addPost( post : PostInfo, topic : TopicInfo ) : void
+removeForumWatch( forum : ForumInfo ) : void
+watchesForum( forum : ForumInfo ) : boolean
+removeTopicWatch( topic : TopicInfo ) : void+addForumWatch( forum : ForumInfo ) : void
+changeEditState( forum : ForumInfo ) : void
+watchesTopic( topic : TopicInfo ) : boolean
+changeEditState( topic : TopicInfo ) : void
+addTopicWatch( topic : TopicInfo ) : void
+getAttachments( post : PostInfo ) : List
+getTopic( topic : TopicInfo ) : TopicInfo
+addForum( forum : ForumInfo ) : void
+deleteTopic( topic : TopicInfo ) : void
+getTopics( forum : ForumInfo ) : List
+getPost( post : PostInfo ) : PostInfo+updatePost( post : PostInfo ) : void+deletePost( post : PostInfo ) : void
+getPosts( topic : TopicInfo ) : List
+addHit( topic : TopicInfo ) : void <<Service>>DocumentService
<<Service>>MessageService
<<Service>>TrackingService
<<Service>>SecurityService
<<Service>>SystemService
²
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
23
● Cas d'illustration: ● Comprendre le modèle (dépendances) ;
²
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
<<Service>>DocumentService
+getFolderEntries( domainObject : DomainObject, folder : FolderInfo ) : List
+createFileEntries( fileEntries : Collection, parentInfo : FolderInfo ) : void
+getFolder( owner : DomainObject, folderInfo : FolderInfo ) : FolderInfo
+getFileEntry( fileId : Long, withInputStream : boolean ) : FileInfo
+diffSave( domainObject : DomainObject, fileInfos : List ) : void
+createFileEntry( fileInfo : FileInfo, parent : FolderInfo ) : void+createFolder( folder : FolderInfo, parent : FolderInfo ) : void
+getFolder( domainObject : DomainObject ) : FolderInfo
+removeFolderEntries( folderEntries : Collection ) : void
+getFileEntries( domainObject : DomainObject ) : List
+removeFolderEntry( folderEntryId : Long ) : void
+getFolder( folder : FolderEntryInfo ) : FolderInfo
+remove( domainObject : DomainObject ) : void
+removeFileEntries( entries : Collection ) : void
+getFolder( folder : FolderInfo ) : FolderInfo
+allFileEntries( entries : Collection ) : List
+getFolderPath( folder : FolderInfo ) : List
+saveFileEntry( fileInfo : FileInfo ) : void
+saveFolder( folder : FolderInfo ) : void
24
● Cas d'illustration: ● Comprendre le modèle
(entités concernées) ;<<Service>>
DiscussionService{@andromda.spring.service.interceptors=jamonPerformanceMonitorInterceptor, }
+getForum( domainObject : DomainObject ) : ForumInfo
+removeAttachment( post : PostInfo, file : FileInfo ) : void
+createTopic( post : PostInfo, forum : ForumInfo ) : void
+addAttachment( post : PostInfo, file : FileInfo ) : void
+addPost( post : PostInfo, topic : TopicInfo ) : void
+removeForumWatch( forum : ForumInfo ) : void
+watchesForum( forum : ForumInfo ) : boolean
+removeTopicWatch( topic : TopicInfo ) : void+addForumWatch( forum : ForumInfo ) : void
+changeEditState( forum : ForumInfo ) : void
+watchesTopic( topic : TopicInfo ) : boolean
+changeEditState( topic : TopicInfo ) : void
+addTopicWatch( topic : TopicInfo ) : void
+getAttachments( post : PostInfo ) : List
+getTopic( topic : TopicInfo ) : TopicInfo
+addForum( forum : ForumInfo ) : void
+deleteTopic( topic : TopicInfo ) : void
+getTopics( forum : ForumInfo ) : List
+getPost( post : PostInfo ) : PostInfo+updatePost( post : PostInfo ) : void+deletePost( post : PostInfo ) : void
+getPosts( topic : TopicInfo ) : List
+addHit( topic : TopicInfo ) : void
<<Entity>>ForumWatch
{@andromda.persistence.table=DISCUSSION_FORUMWATCH, @andromda.hibernate.entity.cache=read-write}
<<Entity>>DiscussionWatch
{@andromda.persistence.table=DISCUSSION_TOPICWATCH, @andromda.hibernate.entity.cache=read-write}
<<Entity>>Forum
{@andromda.persistence.table=DISCUSSION_FORUM, @andromda.hibernate.entity.cache=read-write}
<<Entity>>Topic
{@andromda.persistence.table=DISCUSSION_TOPIC, @andromda.hibernate.entity.cache=read-write}
<<Entity>>Post
{@andromda.persistence.table=DISCUSSION_POST, @andromda.hibernate.entity.cache=read-write}
²
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
25
● Cas d'illustration: ● Confronter le modèle OpenUSS / le modèle Moodle ;
²
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
0..1
<<Entity>>Forum
<<Entity>>Topic
+topics*
+forum
<<Entity>>Post
0..1
+topic
*
+posts
- Diagramme de classe UML - - Modèle logique de la base de données -
26
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
● Bilan sur le projet OpenUSS/AndroMDA:● Extension du processus dirigé par les modèles ;
Ajouter un nouveau composant
Séparation des responsabilités : Principe d'architecturelogicielle s'obligeant de séparer clairement le rôle de chacun des composants.
27
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
● Bilan sur le projet OpenUSS/AndroMDA:● Comprendre/Simuler un modèle ;
Expérimenter les balises
28
Annotation T1 Modèle T2 Applicationmétier T4
SpringT3
Hibernate
JavaT5
T3
T6 applicationContext.xml
T7 *.hbm.xml
T8 *.java
● Bilan sur le projet OpenUSS/AndroMDA:● Évoluer vers de nouveaux paradigmes ;
Évoluer d'un langage statique vers un langage dynamique (Grails/GORM)
29
● ConclusionÉvolution du projet OpenUSS = Évolution du projet AndroMDA
● Plus d'agilité ...● ... dynamique …● … définir de nouveau formalisme ... ● … facile à lire … à maintenir ...● … facile à tester …● … intègre les pratiques des professionnelles ...
?