1 Taha BEN SALAH [email protected] Version 1.02 / 2006-2008 NEORMF… New Entreprise Object...

80
1 Taha BEN SALAH [email protected] Version 1.02 / 2006-2008 NEORMF… NEORMF… New Entreprise Object Relational Mapping New Entreprise Object Relational Mapping Framework Framework .Net .Net http:// neormf.dev.java.net http:// neormf.sourceforge. net

Transcript of 1 Taha BEN SALAH [email protected] Version 1.02 / 2006-2008 NEORMF… New Entreprise Object...

Page 1: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

11

Taha BEN [email protected]

Version 1.02 / 2006-2008

NEORMF…NEORMF… New Entreprise Object Relational Mapping New Entreprise Object Relational Mapping

FrameworkFramework

.Net.Net

http://neormf.dev.java.net

http://neormf.sourceforge.net

Page 2: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

22

AgendaAgenda1.1. Design PatternsDesign Patterns

2.2. Mapping Objet/RelationnelMapping Objet/Relationnel

3.3. Présentation NEORMFPrésentation NEORMF

4.4. Génération de CodeGénération de Code

5.5. ConclusionConclusion

Page 3: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

33

«entre perspicacité et éloquence? »…!«entre perspicacité et éloquence? »…!

Design Patterns…Design Patterns…

Page 4: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

44

Design PatternsDesign Patterns

Synonymes Synonymes Design Pattern Design Pattern Blue PrintBlue Print

C’est C’est Un « Modèle Conceptuel » est une Un « Modèle Conceptuel » est une

«façon» de «façon» de concevoirconcevoir ou de ou de développerdévelopper Une organisation particulière « Une organisation particulière «

standardisée »standardisée »

Page 5: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

55

Design PatternsDesign Patterns

Ce n’est pas Ce n’est pas Du codeDu code Une implémentationUne implémentation Une bibliothèqueUne bibliothèque FrameworkFramework PlateformePlateforme ArchitectureArchitecture SpécificationSpécification

Page 6: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

66

Design PatternsDesign Patterns

Non obligatoires mais fortement Non obligatoires mais fortement recommandésrecommandés

Au même titre que Au même titre que Les règles de codageLes règles de codage Les « cartouches » de commentairesLes « cartouches » de commentaires

Applicables à tous les niveauxApplicables à tous les niveaux

Page 7: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

77

Règles de nommagesRègles de nommages

Constantes en MajusculesConstantes en Majuscules Les fonctions/méthodes en verbesLes fonctions/méthodes en verbes

bool hasChildren()bool hasChildren() void validate()void validate() Mais pasMais pas validation()validation()

Les accesseurs avec un getXXX et les Les accesseurs avec un getXXX et les modificateurs en setXXXmodificateurs en setXXX getName()getName() setName(String name)setName(String name) Mais pasMais pas String validate()String validate()

Page 8: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

88

Design Patterns : IntérêtDesign Patterns : Intérêt

Augmenter Augmenter Lisibilité Lisibilité

Du codeDu code De la conceptionDe la conception

CohésionCohésion CohérenceCohérence

Diminuer Diminuer les dépendances / couplageles dépendances / couplage Les références croiséesLes références croisées

Page 9: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

99

Design Patterns : IntérêtDesign Patterns : Intérêt

Spécialisation des « unités de Spécialisation des « unités de compilation »compilation »

Une unité de compilation correspond àUne unité de compilation correspond à une classe dans un langage Objetune classe dans un langage Objet Un fichier code dans un langage non objetUn fichier code dans un langage non objet Dans certains langages Objet une classe Dans certains langages Objet une classe

correspond bien à un fichier (Java, C# 1.1)correspond bien à un fichier (Java, C# 1.1)

Page 10: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1010

Design Patterns : IntérêtDesign Patterns : Intérêt

Tout langage prévoit nécessairement 4 Tout langage prévoit nécessairement 4 types opérationstypes opérations Opérations Arithmétiques et logiquesOpérations Arithmétiques et logiques Opérations Entrées/SortiesOpérations Entrées/Sorties Opérations de contrôle de flux (si, sinon)Opérations de contrôle de flux (si, sinon) Opération de saut (jump, while, for, etc)Opération de saut (jump, while, for, etc)

Ce serait bien de trouver Ce serait bien de trouver exhaustivement les types de « modèles exhaustivement les types de « modèles conceptuels » pouvant répondre à conceptuels » pouvant répondre à tous les problèmestous les problèmes

Page 11: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1111

IntérêtIntérêt

Dans un monde idéal Dans un monde idéal « l’homme » conçoit « l’homme » conçoit et la « machine » réaliseet la « machine » réalise

Rêve encore lointain parce queRêve encore lointain parce que Il y’a plusieurs façon de résoudre un Il y’a plusieurs façon de résoudre un

même problèmemême problème Meilleure façon ?Meilleure façon ?

Page 12: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1212

IntérêtIntérêt

Diminuer le gap entre conception et Diminuer le gap entre conception et implémentationimplémentation 1ere étape vers l’automatisation de 1ere étape vers l’automatisation de

l’implémentation l’implémentation Rêve suprême Rêve suprême

Augmenter la modularitéAugmenter la modularité Mieux séparer les rôlesMieux séparer les rôles

Des intervenants humainsDes intervenants humains Des composants logicielsDes composants logiciels

Page 13: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1313

Domaines d’applicationDomaines d’application

Peuvent intervenir au niveauPeuvent intervenir au niveau Architecture physiqueArchitecture physique Architecture logiqueArchitecture logique ConceptionConception Artifice et astuces de développementArtifice et astuces de développement

Page 14: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1414

Domaines d’applicationDomaines d’application

Architecture physiqueArchitecture physique Définissent les entités de déploiementDéfinissent les entités de déploiement

Nombre de serveurs de clientsNombre de serveurs de clients

Définissent les rôles de chaque entitéDéfinissent les rôles de chaque entité Rôles de serveurs Rôles de serveurs

FrontalFrontal BackofficeBackoffice ClustersClusters

Définissent les modèles de communicationDéfinissent les modèles de communication Client ServeurClient Serveur Business to BusinessBusiness to Business Peer to PeerPeer to Peer Call BackCall Back

Page 15: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1515

Domaines d’applicationDomaines d’application

Architecture LogiqueArchitecture Logique Spécialisation des « unités de compilation Spécialisation des « unités de compilation

»» Une unité de compilation correspond àUne unité de compilation correspond à

une classe dans un langage Objetune classe dans un langage Objet Un fichier code dans un langage non objetUn fichier code dans un langage non objet Dans certains langages Objet une classe Dans certains langages Objet une classe

correspond bien à un fichier (Java, C# 1.1)correspond bien à un fichier (Java, C# 1.1)

Unités de compilationUnités de compilation Métiers : fortement couplées au projetMétiers : fortement couplées au projet Services : faiblement couplées au projet Services : faiblement couplées au projet

(d’ordre général, réutilisables)(d’ordre général, réutilisables) Accessoires : fortement couplées au projet Accessoires : fortement couplées au projet

mais font partie des besoins fonctionnelsmais font partie des besoins fonctionnels

Page 16: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1616

Domaines d’applicationDomaines d’application

Architecture LogiqueArchitecture Logique Proche de las Programmation orientée Proche de las Programmation orientée

ComposantsComposants Rappellent les composants électroniquesRappellent les composants électroniques Exemple : Plugins WinampExemple : Plugins Winamp

Page 17: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1717

Domaines d’applicationDomaines d’application

ConceptuelConceptuel Définit Définit

les stéréotypesles stéréotypes les composants les composants

Les types de relations entre composantsLes types de relations entre composants Les types de messages (méthodes)Les types de messages (méthodes)

Page 18: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1818

Domaines d’applicationDomaines d’application

Codages/RéalisationCodages/Réalisation Garantir une « bonne » implémentation de Garantir une « bonne » implémentation de

la conceptionla conception Augmenter les performancesAugmenter les performances Optimiser l’utilisation des ressourcesOptimiser l’utilisation des ressources

MémoireMémoire ProcesseurProcesseur Ressources Logicielles (Fichiers, sockets, …) Ressources Logicielles (Fichiers, sockets, …)

Page 19: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

1919

Design PatternsDesign Patterns Client/ServeurClient/Serveur N TiersN Tiers Composite EntityComposite Entity DAO (Data Access Object)DAO (Data Access Object) DTO (Data Transfert Object)DTO (Data Transfert Object) BO (Business Object)BO (Business Object) Session FacadeSession Facade Business DelegateBusiness Delegate Value List HandlerValue List Handler Chain of ResponsibilityChain of Responsibility Model View ControllerModel View Controller Flyweight OO patternFlyweight OO pattern

Page 20: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2020

Design PatternsDesign Patterns

Divide And ConquerDivide And Conquer FactoryFactory SingletonSingleton Service LocatorService Locator PrototypePrototype IteratorIterator StrategyStrategy BridgeBridge AdapterAdapter

Page 21: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2121

Page 22: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2222

« de la terre à la lune, par Vernes »…!« de la terre à la lune, par Vernes »…!

Mapping Objet Mapping Objet Relationel…Relationel…

Page 23: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2323

Persistance applicativePersistance applicative

La persistance doit être non La persistance doit être non directement visible au développeurdirectement visible au développeur

Les mécanismes de persistance doit Les mécanismes de persistance doit être configurable au niveau être configurable au niveau architecturalarchitectural

Les mécanismes de persistance Les mécanismes de persistance doivent être réutilisables dans d’autres doivent être réutilisables dans d’autres projetsprojets

Les mécanismes de persistance Les mécanismes de persistance doivent être indépendants des doivent être indépendants des serveurs (de données/d’application)serveurs (de données/d’application)

Page 24: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2424

Mapping O/RMapping O/R

Correspondance entreCorrespondance entre Objet, Classe, Attributs/Accesseur, types Objet, Classe, Attributs/Accesseur, types

et structures de données du langage de et structures de données du langage de programmation d’une partprogrammation d’une part

Table, Enregistrement, Vue, Procédure Table, Enregistrement, Vue, Procédure stockée, fonction types et structures de stockée, fonction types et structures de données du serveur de la base de données du serveur de la base de données d’autre partdonnées d’autre part

Page 25: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2525

ProblèmesProblèmes

Dépend du langageDépend du langage Java, C# …Java, C# …

Dépend de la technologieDépend de la technologie Serveur d’application dans le cas J2EEServeur d’application dans le cas J2EE EJB, Corba, MTS, RMIEJB, Corba, MTS, RMI

Dépend de du serveur de la base de Dépend de du serveur de la base de donnéesdonnées MSSQL Server, Oracle, DB2, etc…MSSQL Server, Oracle, DB2, etc…

Page 26: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2626

ProblèmesProblèmes

Problème d’héritageProblème d’héritage Relationnel Relationnel ?? Héritage Héritage Héritage par duplicationHéritage par duplication Héritage par fusionHéritage par fusion Héritage par concaténationHéritage par concaténation

class A{class A{ X,YX,Y}}

class B : A{class B : A{ V,WV,W}}

class C : A{class C : A{ M,NM,N}}

Page 27: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2727

ProblèmesProblèmes

Héritage par duplicationHéritage par duplication Deux tables Deux tables

Table B{X,Y,V,W} Table B{X,Y,V,W} et Table C{X,Y,M;N} et Table C{X,Y,M;N}

contenants une duplication des champs contenants une duplication des champs communscommuns plus une Vue A{X,Y} plus une Vue A{X,Y}

contenant l’union des deux tables sur les contenant l’union des deux tables sur les champs communschamps communs

Page 28: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2828

ProblèmesProblèmes

Héritage par fusionHéritage par fusion Une seule table globaleUne seule table globale

Table A{X,Y,V,W,M,N, Table A{X,Y,V,W,M,N, Type<B ou C>Type<B ou C>} } contenants tous les champs en plus d’un nouveau contenants tous les champs en plus d’un nouveau

champ type qui permet de différentier le typechamp type qui permet de différentier le type

Page 29: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

2929

ProblèmesProblèmes

Héritage par concaténationHéritage par concaténation Trois tables Trois tables

Table A{X,Y} Table A{X,Y} Table BTable B00{V,W} {V,W} et Table Cet Table C00{M,N} {M,N}

Deux vues Deux vues B jointure sur A et BB jointure sur A et B00 avec toutes les colonnes avec toutes les colonnes C jointure sur A et CC jointure sur A et C00 avec toutes les colonnes avec toutes les colonnes

Page 30: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3030

ProblèmesProblèmes

Problèmes d’optimisationProblèmes d’optimisation On peut être contraint d’ajouter des On peut être contraint d’ajouter des

champs calculés contenant des valeurs champs calculés contenant des valeurs intermédiaires ou qui simplifient les intermédiaires ou qui simplifient les jointuresjointures

Le choix du type de mapping peut Le choix du type de mapping peut changer pour des raisons d’optimisationchanger pour des raisons d’optimisation

Le choix d’implémentation Le choix d’implémentation Table/Vue/Procédure/Fonction peut Table/Vue/Procédure/Fonction peut changer pour des raisons d’optimisationchanger pour des raisons d’optimisation

Page 31: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3131

ProblèmesProblèmes

Problèmes d’implémentationProblèmes d’implémentation Dialecte et objets SQL différents pour les Dialecte et objets SQL différents pour les

différentes Basesdifférentes Bases Séquences(ORACLE)Séquences(ORACLE) Vues (matérialisées)Vues (matérialisées) Procédures stockées …Procédures stockées … TOP (MSSQL), ROWS(ORACLE)TOP (MSSQL), ROWS(ORACLE)

Page 32: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3232

« Qu’est ce que Matrix a à faire la dedans? »…!« Qu’est ce que Matrix a à faire la dedans? »…!

NEORMFNEORMF

Page 33: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3333

NEORMFNEORMF

Beaucoup de technologiesBeaucoup de technologies Beaucoup de Design PatternsBeaucoup de Design Patterns Simplifier, Minimiser le codeSimplifier, Minimiser le code Refactoring et Génération de Code par Refactoring et Génération de Code par

les IDEles IDE Frameworks Frameworks

propriétaires propriétaires open sources open sources selon la technologieselon la technologie

Page 34: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3434

NEORMFNEORMF

New Entreprise Object Relational New Entreprise Object Relational Mapping FrameworkMapping Framework

FrameworkFramework API (donc extensible)API (donc extensible) Implémentation (donc utilisable)Implémentation (donc utilisable) Générateur de code (donc rapide)Générateur de code (donc rapide)

SupporteSupporte JavaJava J2EE (Serveurs d’application)J2EE (Serveurs d’application) C# DotNetC# DotNet

Page 35: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3535

NEORMF : BundleNEORMF : Bundle Quatre projets (en publication Open Sources)Quatre projets (en publication Open Sources)

NEORMF-COMMONSNEORMF-COMMONS API implémentée en Java et C#API implémentée en Java et C#

NEORMF-JBGENNEORMF-JBGEN « Java Bean Generator »« Java Bean Generator » Générateur de Code; les classes générées héritent et utilisent de Générateur de Code; les classes générées héritent et utilisent de

classes de COMMONSclasses de COMMONS

NEORMF-WWSNEORMF-WWS « Wise Web Support » actuellement pour Java, une implémentation en « Wise Web Support » actuellement pour Java, une implémentation en

cours pour C#cours pour C# Contient des contrôles web directement mappés aux colonnes de la Contient des contrôles web directement mappés aux colonnes de la

base de donnéesbase de données Utilsable conjointement avec Struts ou JSFUtilsable conjointement avec Struts ou JSF

NEORMF-WFSNEORMF-WFS « Wise Forms Support » actuellement pour CSharp, une « Wise Forms Support » actuellement pour CSharp, une

implémentation en cours pour Javaimplémentation en cours pour Java Contient des contrôles Desktop directement mappés aux colonnes de Contient des contrôles Desktop directement mappés aux colonnes de

la base de donnéesla base de données

Page 36: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3636

NEORMFNEORMF

IdéeIdée Réaliser un Mapping Objet Relationnel Réaliser un Mapping Objet Relationnel

OptimalOptimal Écrire le minimum en générant le code selon Écrire le minimum en générant le code selon

Une conception particulièreUne conception particulière Un ensemble de Design PatternsUn ensemble de Design Patterns Un ensemble de frameworks standardsUn ensemble de frameworks standards

Page 37: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3737

NEORMFNEORMF

Supporte un ensemble de Design Supporte un ensemble de Design Patterns ArchitecturauxPatterns Architecturaux Composite EntityComposite Entity DAO (Data Access Object)DAO (Data Access Object) DTO (Data Transfert Object)DTO (Data Transfert Object) BO (Business Object)BO (Business Object) Session FacadeSession Facade Business DelegateBusiness Delegate Value List HandlerValue List Handler Chain of ResponsibilityChain of Responsibility Model View ControllerModel View Controller

Page 38: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3838

NEORMFNEORMF

Implémente un ensemble de Design Implémente un ensemble de Design PatternsPatterns FactoryFactory SingletonSingleton Service LocatorService Locator CompositeComposite PrototypePrototype

Page 39: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

3939

NEORMFNEORMF Supporte d’autres frameworksSupporte d’autres frameworks

JavaJava Log4j (généré)Log4j (généré) Struts (dockable)Struts (dockable) JSF (dockable)JSF (dockable) ICEfaces (dockable, génération en encours)ICEfaces (dockable, génération en encours)

C#C# log4net (généré)log4net (généré)

Page 40: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4040

NEORMFNEORMF

Supporte Plusieurs Serveurs d’applicationSupporte Plusieurs Serveurs d’application JBOSSJBOSS GlassfishGlassfish OC4JOC4J Weblogic...Weblogic...

Supporte plusieurs Bases de donnéesSupporte plusieurs Bases de données OracleOracle MSSQL ServerMSSQL Server Derby...Derby...

Page 41: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4141

NEORMFNEORMF

DescriptionDescription Design Pattern NTIERS : Séparation nette Design Pattern NTIERS : Séparation nette

entre les couchesentre les couches Données (DAL : Data Access Layer)Données (DAL : Data Access Layer) Métier (BL : Business Layer)Métier (BL : Business Layer) Présentation (UI : Presentation Layer)Présentation (UI : Presentation Layer)

Page 42: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4242

NEORMFNEORMF

Buttom-Up FrameworkButtom-Up Framework De la base de données ‘Couche Données’ De la base de données ‘Couche Données’

vers les couches les couches supérieuresvers les couches les couches supérieures Pourquoi ?Pourquoi ?

Modèle OO Modèle OO depuis quelques 15 ans depuis quelques 15 ans laisse sa place pour l’orienté composant (EJB/COM) laisse sa place pour l’orienté composant (EJB/COM)

et orienté service (Web Service) et orienté service (Web Service) Susceptible de changer en cours de routeSusceptible de changer en cours de route

Modèle Relationnel Modèle Relationnel depuis +30ansdepuis +30ans Un bon MCD ne change pasUn bon MCD ne change pas

Page 43: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4343

NEORMFNEORMF

Design pattern PyramideDesign pattern Pyramide

ApplicationApplication

BLBL

DALDAL

RLRL

Page 44: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4444

NEORMFNEORMF

InstallationInstallation Installer JDK 1.5Installer JDK 1.5 Décompresser neormf.zip dans un Décompresser neormf.zip dans un

répertoire qu’on nommera désormais $répertoire qu’on nommera désormais ${NEORMF_ROOT}{NEORMF_ROOT}

Page 45: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4545

NEORMFNEORMF

PrincipePrincipe Décrire dans des fichiers xml Décrire dans des fichiers xml

l’architecture de l’application et les design l’architecture de l’application et les design patterns utiliséspatterns utilisés jbgen-config.xmljbgen-config.xml jbgen-defaults.xmljbgen-defaults.xml XYZXYZ.do.xml.do.xml XYZXYZ.bo.xml.bo.xml

Page 46: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4646

NEORMFNEORMF

jbgen-config.xmljbgen-config.xml : contient la configuration : contient la configuration de l’application ainsi que les propriétés de l’application ainsi que les propriétés applicables à tous les composants de applicables à tous les composants de l’applicationl’application Unique par projetUnique par projet

jbgen-defaults.xmljbgen-defaults.xml : contient les règles de : contient les règles de nommages et les paramètres par défautsnommages et les paramètres par défauts rarement modifié et unique par entrepriserarement modifié et unique par entreprise

XYZXYZ.do.xml.do.xml : contient les règles applicables : contient les règles applicables uniquement l’entité (Data Object) XYZ (de la uniquement l’entité (Data Object) XYZ (de la couche DAL)couche DAL)

XYZXYZ.bo.xml.bo.xml : contient les règles applicables : contient les règles applicables uniquement au BO XYZ (de la couche BL)uniquement au BO XYZ (de la couche BL)

Page 47: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4747

NEORMFNEORMF

ÉtapesÉtapes 1. Concevoir la base correctement 1. Concevoir la base correctement

En raisonnant Objet (possibilité d’héritage)En raisonnant Objet (possibilité d’héritage) En dissociant les tablesEn dissociant les tables

DonnéesDonnées Opérations (horodatée)Opérations (horodatée)

Créer le modèle physique avec un outil Créer le modèle physique avec un outil approprié ou un script sur un serveur de approprié ou un script sur un serveur de référenceréférence

Règles de nommage : Noms en Majuscules Règles de nommage : Noms en Majuscules avec ‘_‘ comme séparateuravec ‘_‘ comme séparateur

Page 48: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4848

NEORMFNEORMF

2. Regrouper les Tables en Entités2. Regrouper les Tables en Entités Une Entité défini la couche DALUne Entité défini la couche DAL Regrouper Les tables à multiplicité simpleRegrouper Les tables à multiplicité simple Regrouper les Tables implémentant un Regrouper les Tables implémentant un

HéritageHéritage Définir les colonnes calculéesDéfinir les colonnes calculées

Ex :Ex : Client et ClientInfo (1-0/1)Client et ClientInfo (1-0/1) Engin et Voiture (Impl Héritage)Engin et Voiture (Impl Héritage)

Page 49: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

4949

Colonnes calculéesColonnes calculées

Types d’implémentation Types d’implémentation sql-query-field-expressionsql-query-field-expression

Expression SQLExpression SQL

sql-call-field-expressionsql-call-field-expression Procédure stockéeProcédure stockée

sql-relation-field-expressionsql-relation-field-expression Collection par application d’une RelatinoCollection par application d’une Relatino

sql-view-field-expressionsql-view-field-expression Champ d’une VueChamp d’une Vue

sql-function-field-expressionsql-function-field-expression Fonction SQLFonction SQL

code-field-expressioncode-field-expression Code Java/C#Code Java/C#

Page 50: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5050

Colonnes calculéesColonnes calculées

Persistance des colonnesPersistance des colonnes LiveLive StoredStored Stored OnceStored Once

Page 51: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5151

Triggers ApplicatifsTriggers Applicatifs

Triggers ApplicatifsTriggers Applicatifs preInsertpreInsert postInsertpostInsert preDeletepreDelete postDeletepostDelete preUpdatepreUpdate postUpdatepostUpdate

Page 52: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5252

NEORMFNEORMF

Une Entité définitUne Entité définit DTO : structure modélisant l’enregistrementDTO : structure modélisant l’enregistrement

Champ pour chaque colonne (réelle ou calculée)Champ pour chaque colonne (réelle ou calculée)

DAO : structure modélisant la tableDAO : structure modélisant la table Opérations (Insert, Update, Select, Delete)Opérations (Insert, Update, Select, Delete)

Meta DataMeta Data Structures pour modéliser Structures pour modéliser

les colonnes/attributsles colonnes/attributs la clef uniquela clef unique ……

Page 53: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5353

NEORMFNEORMF

3. Regrouper les Entités en Modules3. Regrouper les Entités en Modules Un module est un Business Object (BO)Un module est un Business Object (BO) Un BO fait partie de la couche BLUn BO fait partie de la couche BL Un BO ne peut manipuler que les Entités qu’il Un BO ne peut manipuler que les Entités qu’il

englobeenglobe Si un BO nécessite l’utilisation d’une autre Si un BO nécessite l’utilisation d’une autre

Entité, il fait appel à un service d’un autre BOEntité, il fait appel à un service d’un autre BO Deux BO ne doivent jamais s’appeler Deux BO ne doivent jamais s’appeler

mutuellement car dans ce cas on pourra soit mutuellement car dans ce cas on pourra soit fusionner les deux BO soit déplacer la fusionner les deux BO soit déplacer la méthode de référence croisée vers le méthode de référence croisée vers le deuxième BO.deuxième BO.

Ex : Module PaieEx : Module Paie Ex : Engin et Voiture (Impl Héritage)Ex : Engin et Voiture (Impl Héritage)

Page 54: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5454

NEORMFNEORMF

Écrire les fichiers de configuration Écrire les fichiers de configuration JBGENJBGEN

Par défaut NEORMF fait un mapping Par défaut NEORMF fait un mapping Vertical c’est à dire Vertical c’est à dire à chaque Table il associe un DO à chaque Table il associe un DO

(DAO/EJB Entité)(DAO/EJB Entité) à chaque DO il associe un BO (EJB à chaque DO il associe un BO (EJB

Session)Session)

Il ne faut spécifier que les particularitésIl ne faut spécifier que les particularités

Page 55: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5555

«garçon… un exemple svp, pas trop serré »…!«garçon… un exemple svp, pas trop serré »…!

Exemple…Exemple…

Page 56: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5656

Page 57: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5757

NEORMFNEORMF

ExempleExemple

ApplicationApplication

BLBL

DALDAL

RLRL CLIENTCLIENTCLIENT_INFOCLIENT_INFO

FACTUREFACTURE

LigneFactureDAOLigneFactureDAOFactureDAOFactureDAO

FacturationBOFacturationBO

ApplicationApplication

ClientBOClientBO

ClientDAOClientDAO

LIGNE_FACTURELIGNE_FACTURE

Page 58: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5858

jbgen-config.xmljbgen-config.xml<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><jbgen><jbgen> <source><source> … </source>… </source> <object-mappings> … </object-mappings><object-mappings> … </object-mappings> <target> … </target><target> … </target> <object-definition> … </object-definition><object-definition> … </object-definition></jbgen></jbgen>

Page 59: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

5959

jbgen-config.xmljbgen-config.xml<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><jbgen><jbgen> <source><source>

<driver value=<driver value="com.microsoft.jdbc.sqlserver.SQLServerDriver""com.microsoft.jdbc.sqlserver.SQLServerDriver"/>/> <url value=<url value="jdbc:microsoft:sqlserver://localhost;databaseName=sicar10""jdbc:microsoft:sqlserver://localhost;databaseName=sicar10"/>/> <user value<user value=“sa"=“sa"/>/> <password value=<password value=“"“"/>/> <schema value=<schema value=“dbo"“dbo"/>/> <include type=<include type="TABLE|VIEW""TABLE|VIEW" name= name="*""*"/>/> <exclude type=<exclude type="*""*" name= name=“sys*|dtprop*"“sys*|dtprop*"/>/> </source></source> <object-mappings><object-mappings>

…… </object-mappings></object-mappings> <target><target> … … </target></target> <object-definition> … </object-definition><object-definition> … </object-definition></jbgen></jbgen>

Page 60: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6060

jbgen-config.xmljbgen-config.xml<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><jbgen><jbgen> <source><source> … </source>… </source> <object-mappings><object-mappings> <data-objects><data-objects> <do name=<do name="Client""Client" table-list= table-list="CLIENT*""CLIENT*"/>/> </data-objects></data-objects> <business-objects><business-objects> <bo name<bo name="FacturationBO"="FacturationBO" do-list= do-list="*Facture*""*Facture*"/>/> </business-objects></business-objects> </object-mappings></object-mappings> <target> … </target><target> … </target> <object-definition> … </object-definition><object-definition> … </object-definition>

</jbgen></jbgen>

Page 61: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6161

jbgen-config.xmljbgen-config.xml<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><jbgen><jbgen> <source><source> … </source>… </source> <object-mappings> … </object-mappings><object-mappings> … </object-mappings> <target><target> <csharp-dao-target enabled=<csharp-dao-target enabled="true""true">> <datasource name=<datasource name="MyDataSource""MyDataSource"/>/> <package><package>org.vpc.neormf.testjbgenorg.vpc.neormf.testjbgen</package></package> <root-path><root-path>generated/csharp-dao-target/srcgenerated/csharp-dao-target/src</root-path></root-path> <log-generation enable=<log-generation enable="true""true" api= api="log4net""log4net" layers= layers="db""db">> <log-option name=<log-option name="layers""layers" value= value="db""db"/>/> </log-generation></log-generation> <dto-module><dto-module> <include type=<include type="*""*" name= name="*""*"/>/> <exclude type=<exclude type="none""none" name= name="none""none"/>/> </dto-module></dto-module> <dao-module/><dao-module/>

</csharp-dao-target></csharp-dao-target> </target></target> <object-definition> … </object-definition><object-definition> … </object-definition></jbgen></jbgen>

Page 62: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6262

jbgen-config.xmljbgen-config.xml<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><jbgen><jbgen> <source><source> … </source> <object-mappings> … </object-mappings>… </source> <object-mappings> … </object-mappings> <target> …</target><target> …</target> <object-definition><object-definition> <do name=<do name="Client""Client" title-field= title-field="cliName""cliName"/>/>

<do name="Facture"><do name="Facture"> <field name=<field name="facValid""facValid" isForbiddenOnInsert= isForbiddenOnInsert="true""true">> <converter><converter>INTEGER_TO_BOOLEANINTEGER_TO_BOOLEAN</converter></converter> </field></field> <field name=<field name="facMnt""facMnt">> <definition type=<definition type="FLOAT""FLOAT" nullable= nullable="false""false"/>/> <expression><expression> <sql-query-field-expression><sql-query-field-expression> Select Sum(LNF_PRIX*LNF_QTE) From Select Sum(LNF_PRIX*LNF_QTE) From

LIGNE_FACTURE Where FAC_ID=LNF_FAC_IDLIGNE_FACTURE Where FAC_ID=LNF_FAC_ID </sql-query-field-expression></sql-query-field-expression> </expression></expression>

</field></field> </do></do> </object-definition></object-definition></jbgen></jbgen>

Page 63: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6363

jbgen-defaultsjbgen-defaults

Page 64: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6464

GénérationGénération

Vérifier que le jdk1.5 est bien installé et Vérifier que le jdk1.5 est bien installé et mettez à jour le chemin dans « run-mettez à jour le chemin dans « run-jbgen.bat »jbgen.bat »

1- Lancer le générateur1- Lancer le générateur

Page 65: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6565

GénérationGénération

Sélectionner le répertoire contenant les Sélectionner le répertoire contenant les fichier de configurationfichier de configuration

Page 66: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6666

Code généréCode généré

Page 67: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6767

Code généré : DAOCode généré : DAO

Page 68: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6868

Code généré : DTOCode généré : DTO

Page 69: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

6969

Code C#Code C#

Pour InsérerPour Insérer Les Identifiants auto et les séquences Les Identifiants auto et les séquences

sont gérés automatiquement sont gérés automatiquement (indépendamment de la base)(indépendamment de la base)

ClientDTOClientDTO client= client=newnew ClientDTO (); ClientDTO ();Client.cliName=Client.cliName="IER""IER" Client.cliAddress=Client.cliAddress="Paris""Paris" ClientDAOClientDAO dao= dao=newnew ClientDAO(); ClientDAO();ClientKeyClientKey key=dao.Insert(client); key=dao.Insert(client);

Page 70: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7070

Code C#Code C#

Pour Mettre à jourPour Mettre à jour Uniquement les colonnes spécifiées sont Uniquement les colonnes spécifiées sont

mises à jourmises à jour

ClientDTOClientDTO client= client=newnew ClientDTO (); ClientDTO ();Client.cliId=Client.cliId=1212;;Client.cliAddress=Client.cliAddress="Paris""Paris";;ClientDAOClientDAO dao= dao=newnew ClientDAO(); ClientDAO();dao.Update(client);dao.Update(client);

Page 71: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7171

Code JavaCode Java

Pour Mettre à jourPour Mettre à jour Uniquement les colonnes spécifiées sont Uniquement les colonnes spécifiées sont

mises à jourmises à jour

ClientDTOClientDTO client= client=newnew ClientDTO (); ClientDTO ();Client.Client.setsetCliId(CliId(1212); ); Client.Client.setsetCliAddress(CliAddress("Paris""Paris"););ClientDAOClientDAO dao= dao=newnew ClientDAO(); ClientDAO();ClientKeyClientKey key=dao. key=dao.setDatasetData(client);(client);

Page 72: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7272

Code C#Code C#

Pour SupprimerPour Supprimer

ClientKeyClientKey client= client=newnew ClientKey (3); ClientKey (3);ClientDAOClientDAO dao= dao=newnew ClientDAO(); ClientDAO();dao.Delete(client);dao.Delete(client);

Page 73: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7373

Code C#Code C#

Pour Récupérer un enregistrementPour Récupérer un enregistrement

ClientKeyClientKey id= id=newnew ClientKey (3); ClientKey (3);ClientDAOClientDAO dao= dao=newnew ClientDAO(); ClientDAO();ClientPropertiesClientProperties colonnes= colonnes=newnew ClientProperties(); ClientProperties();colonnes.addCliName().addCliId();colonnes.addCliName().addCliId();ClientDTOClientDTO client=dao.GetData(colonnes,id); client=dao.GetData(colonnes,id);

Page 74: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7474

Code C#Code C#

Pour Récupérer plusieurs Pour Récupérer plusieurs enregistrements par design Pattern « enregistrements par design Pattern « Prototype »Prototype »

ClientDTOClientDTO prototype= prototype=newnew ClientDTO(); ClientDTO();prototype.cliName=prototype.cliName="%to%""%to%" ; ;ClientPropertiesClientProperties colonnes= colonnes=newnew ClientProperties(); ClientProperties();colonnes.addCliName().addCliId();colonnes.addCliName().addCliId();ICollectionICollection tous=dao.Select( tous=dao.Select(

colonnes,prototype,null colonnes,prototype,null //ordre//ordre););

Page 75: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7575

ExtensibilitéExtensibilité

Code modifiable après générationCode modifiable après génération Tags intelligentsTags intelligents

/*@user_code:begin*//*@user_code:begin*/ /*@user_code:end*//*@user_code:end*/

Tout ce qui est entre ces deux lignes sera Tout ce qui est entre ces deux lignes sera conservé même après régénérationconservé même après régénération

Paramétrage du code généréParamétrage du code généré Règles de nommageRègles de nommage Possibilité de renommer une méthodePossibilité de renommer une méthode Possibilité de supprimer la génération d’une Possibilité de supprimer la génération d’une

méthodeméthode Possibilité de remplacer la génération d’une Possibilité de remplacer la génération d’une

méthodeméthode

Page 76: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7676

Outil graphiqueOutil graphique Désormais un plugin pour dbclient Désormais un plugin pour dbclient

(dbclient.dev.java.net) est disponible (dbclient.dev.java.net) est disponible pour ne plus avoir à écrire les fichiers pour ne plus avoir à écrire les fichiers XML manuellementXML manuellement

Page 77: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7777

« et le dessert? »…!« et le dessert? »…!

Conclusion…Conclusion…

Page 78: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7878

ConclusionConclusion

Intérêts:Intérêts: Design PatternsDesign Patterns Mapping Objet/RelationnelMapping Objet/Relationnel Génération de CodeGénération de Code

NEORMFNEORMF Pluri plateformes (java/j2ee/c#.net)Pluri plateformes (java/j2ee/c#.net) Pluri base de données (MSSQL, Oracle)Pluri base de données (MSSQL, Oracle) Une seule interface de configUne seule interface de config Génération de codeGénération de code

Optimisée pour les performancesOptimisée pour les performances Minimise les anomaliesMinimise les anomalies ExhaustivitéExhaustivité ExtensibilitéExtensibilité

Page 79: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

7979

RéférencesRéférences

http://neormf.sourceforge.nethttp://neormf.sourceforge.net http://dbclient.dev.java.nethttp://dbclient.dev.java.net http://msdn.microsoft.com/practiceshttp://msdn.microsoft.com/practices http://msdn.microsoft.com/architecturehttp://msdn.microsoft.com/architecture http://shop.microsoft.com/practiceshttp://shop.microsoft.com/practices http://java.sun.comhttp://java.sun.com http://www.microsoft.comhttp://www.microsoft.com http://dotnet.developpez.nethttp://dotnet.developpez.net http://www.dotnet247.comhttp://www.dotnet247.com http://www.dotnetguru.orghttp://www.dotnetguru.org http://www.dotnet-fr.orghttp://www.dotnet-fr.org http://application-servers.comhttp://application-servers.com http://www.theserverside.comhttp://www.theserverside.com http://www.freeroller.nethttp://www.freeroller.net http://staff.develop.comhttp://staff.develop.com http://www.bytonic.dehttp://www.bytonic.de http://ils.unc.edu/blaze/java/javahist.htmlhttp://ils.unc.edu/blaze/java/javahist.html

Page 80: 1 Taha BEN SALAH taha.bensalah@laposte.net Version 1.02 / 2006-2008 NEORMF… New Entreprise Object Relational Mapping Framework.Net .

8080

Merci !Merci !

Questions?