IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Performances d'utilisation couche DTO dans une application web j2ee


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultant OpenERP /J2EE
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Par défaut Performances d'utilisation couche DTO dans une application web j2ee
    Salut,
    Dans mon application java web j'ai implémenté un couche DTO pour cela j'a utilisé Dozer mapper.
    dozer vous aide à gagner beaucoup de temps en effet une seul ligne vous permet de copier un bean 1 dans un bean 2.
    mais le problème c'est que le temps de réponse de dozer est très lent para-port à une méthode copy(bean1,bean2) que j'ai codé manuellement .
    y'at'il une autre librairie ayant le même fonctionnement que dozer mais plus rapide ?
    et merci.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par bonapart002 Voir le message
    Salut,
    Dans mon application java web j'ai implémenté un couche DTO pour cela j'a utilisé Dozer mapper.
    dozer vous aide à gagner beaucoup de temps en effet une seul ligne vous permet de copier un bean 1 dans un bean 2.
    mais le problème c'est que le temps de réponse de dozer est très lent para-port à une méthode copy(bean1,bean2) que j'ai codé manuellement .
    y'at'il une autre librairie ayant le même fonctionnement que dozer mais plus rapide ?
    et merci.
    Bonjour, nous aussi nous utilisons Dozer dans nos projets, il facilite en effet le codage pour ce qui est des copies entre objets, mais hélas un peu long, mais tout dépend de comment vous avez configuré vos fichiers de mapping dozer.Il faut savoir que lorsque Dozer rencontre un OneToMany il va systématiquement chercher la collection associée, ce même si vous aviez expréssement mis la relation en Lazy, c'est pourquoi il faut bien penser à retirer du mapping les objets qui ne sont pas requis lors de la recopie.J'espère me faire comprendre .

  3. #3
    Membre averti
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultant OpenERP /J2EE
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Par défaut
    Bonjour,
    merci beaucoup ,une réponse très claire.
    En effet j'a laissé dozer tous faire : j'ai pas codé des fichiers mapping pour dozer ,donc par défaut il mappe tous les attributs ayant le même nom et type dans les deux beans à copiés.
    j'ai à titre d'exemple un bean Client (objet pour mapping ORM hibernate ) et dans la couche présentation j'utilise le bean ClientDto et dozer pour faire correspondance entre Client et ClientDto.
    Et si je veux afficher la liste de mes clients : j'ai récupéré une listeClients par hibernate et pour chaque client de la liste je doit créer un clientDto pour l'utiliser dans la couche présentation et là le catastrophe . pour afficher une liste de 10 client je veux attendre presque 35 ou 40 secondes ou plus.
    lorsque Dozer rencontre un OneToMany il va systématiquement chercher la collection associée.
    c'est là le problème car chaque client a une collection des emails,une collection des téléphones , une collection des fax et d'autres collections.
    dans la configuration j'ai seulement ajouté dans applicationContext :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <bean id="dozerBeanMapperFactoryBean" class="org.dozer.spring.DozerBeanMapperFactoryBean" lazy-init="true">
    <property name="mappingFiles">
    <list>
     // j'ai pas codé des fichiers de mapping , dozer les detecte .
    </list>
    </property>
    </bean>
    et si je veux faire le mappage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Mapper mapper = (Mapper) BeanUtil.getBean("dozerBeanMapperFactoryBean");
    ClientDto client_dto = (ClientDto) mapper.map(client,ClientDto.class);
    mais je peux pas
    retirer du mapping les objets
    ca j'ai besoin des ces collections lorsque je veux faire un save ou update.
    Donc faut t'il écrire des méthode à la main pour copier les beans ?
    ou comment peut on améliorer la configuration de dozer(avec le mappage des collectoin) ? sachant que le facteur temps de réponse est très important dans mon applications.
    merci beaucoup pour votre aide.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Peut on voir le code de ton entité Client? Et egalement le code des entités associées à ce client ?

  5. #5
    Membre averti
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultant OpenERP /J2EE
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Par défaut
    Peut on voir le code de ton entité Client?
    Entité Partenaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    package com.partenaire.objects;
    // Generated 4 févr. 2013 23:34:39 by Hibernate Tools 3.4.0.CR1
    import java.math.BigDecimal;
    import java.util.Date;
    import java.util.HashSet;
    import java.util.Set;
    import com.base.objects.BaseLangue;
    import com.base.objects.BasePays;
    import com.croisiere.objects.CroDocument;
    import com.croisiere.objects.CroPaiement;
    /**
     * PartPartenaire generated by hbm2java
     */
    public class PartPartenaire implements java.io.Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 7487407509774094725L;
    	private int idPartenaire;
    	private BaseLangue baseLangue;
    	private PartGroupePartenaire partGroupePartenaire;
    	private BasePays basePays;
    	private int codePartenaire;
    	private String nomPartenaire;
    	private String prenom;
    	private BigDecimal remisePartenaire;
    	private String creerPar;
    	private String modifierPar;
    	private Date dateCreation;
    	private Date dateModification;
    	private String adresse;	
    	private String numRC;	
    	private String numMF;	
    	private Set<CroPaiement> croPaiements = new HashSet<CroPaiement>(0);
    	private Set<CroDocument> croDocuments = new HashSet<CroDocument>(0);
    	private Set<PartAdresse> partAdresses = new HashSet<PartAdresse>(0);
    	private Set<PartTelephone> partTelephones = new HashSet<PartTelephone>(0);
    	private Set<PartSiteWeb> partSiteWebs = new HashSet<PartSiteWeb>(0);
    	private Set<PartFax> partFaxes = new HashSet<PartFax>(0);
    	private Set<PartContact> partContacts = new HashSet<PartContact>(0);
    	private Set<PartEmail> partEmails = new HashSet<PartEmail>(0);
     
    	public PartPartenaire() {
    	}	
     
           //all geter and setter 
           //exemple geter and setter de la collection partTelephones 
           public Set<PartTelephone> getPartTelephones() {
    		return this.partTelephones;
    	}
     
    	public void setPartTelephones(Set<PartTelephone> partTelephones) {
    		this.partTelephones = partTelephones;
    	}
    	@Override
    	public String toString() {
    		return  nomPartenaire  + " " + prenom ;
    	}
     
     
    }
    Et le PartenaireDto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package com.partenaire.dto;
    import java.io.Serializable;
    import java.math.BigDecimal;
    import java.util.ArrayList;
    import java.util.List;
    import com.base.objects.BaseLangue;
    import com.base.objects.BasePays;
    import com.partenaire.objects.PartEmail;
    import com.partenaire.objects.PartFax;
    import com.partenaire.objects.PartGroupePartenaire;
    import com.partenaire.objects.PartTelephone;
    public class PartPartenaireDto implements Serializable {
    	private static final long serialVersionUID = 6951956151232176321L;
    	private int idPartenaire;
    	private int codePartenaire;
    	private String nomPartenaire;
    	private String prenom;
    	private String adresse;
    	private BigDecimal remisePartenaire;
    	private String numRC;	
    	private String numMF;
     
            private BaseLangue baseLangue;
    	private BasePays basePays;
            private PartGroupePartenaire partGroupePartenaire;
     
     
    	private List<PartEmail> partEmails =new ArrayList<PartEmail>();		
    	private List<PartTelephone> partTelephones =new ArrayList<PartTelephone>();
            private List<PartFax> partFaxes =new ArrayList<PartFax>();	 
            private List<PartGroupePartenaire> itemsGroupePartenaire;
     
            //utilisé pour affiches la liste (non mappées)
    	private List<PartPartenaireDto> partPartenairesDto;
    	private PartPartenaireDto[] selectedPartPartenaireDto;
    	private List<PartPartenaireDto> filteredPartPartenaireDto;
     
    }
    Et egalement le code des entités associées à ce client ?
    PartTelephone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    package com.partenaire.objects;
    // Generated 4 févr. 2013 23:34:39 by Hibernate Tools 3.4.0.CR1
    import java.util.Date;
    /**
     * PartTelephone generated by hbm2java
     */
    public class PartTelephone implements java.io.Serializable {
     
    	private static final long serialVersionUID = 2956513640867915524L;
    	private int idTelephone;
    	private PartPartenaire partPartenaire;
    	private String numeroTelephone;
    	private String creerPar;
    	private String modifierPar;
    	private Date dateCreation;
    	private Date dateModification;
     
    	public PartTelephone() {
    	}
     
           // all getter and setter
    	public int hashCode() {
    	//--
    	}
     
    	@Override
    	public boolean equals(Object obj) {
    	//--
    	}
    }
    PartEmail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    package com.partenaire.objects;
    // Generated 4 févr. 2013 23:34:39 by Hibernate Tools 3.4.0.CR1
    import java.util.Date;
    /**
     * PartEmail generated by hbm2java
     */
    public class PartEmail implements java.io.Serializable {
     
    	private int idEmail;
    	private PartPartenaire partPartenaire;
    	private String libelleEmail;
    	private String creerPar;
    	private String modifierPar;
    	private Date dateCreation;
    	private Date dateModification;
     
    	public PartEmail() {
    	}
     
    	public PartEmail(int idEmail) {
    		this.idEmail = idEmail;
    	}
     
    	// all getter and setter
    	public int hashCode() {
    	//--
    	}
    	public boolean equals(Object obj) {
    	//--
    	}
    }
    et de même les autres objets.
    Mapping hibernate De mon entité PartPartenaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 4 f??vr. 2013 23:34:40 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
    	<class name="com.partenaire.objects.PartPartenaire" table="part_partenaire"
    		schema="public">
    		<id name="idPartenaire" type="int">
    			<column name="id_partenaire" default="1" />
    			<generator class="increment" />
    		</id>
     
    		<property name="codePartenaire"  >
    			<column name="code_partenaire"   />
    		</property>
    		<property name="nomPartenaire" type="string">
    			<column name="nom_partenaire" length="128" />
    		</property>
    		<property name="prenom" type="string">
    			<column name="prenom" length="128" />
    		</property>
     
    		<property name="adresse" type="string">
    			<column name="adresse" length="256" />
    		</property>
     
    		<property name="numRC" type="string">
    			<column name="num_rc" length="64" />
    		</property>
     
    		<property name="numMF" type="string">
    			<column name="num_mf" length="64" />
    		</property>
     
     
    		<property name="remisePartenaire" type="big_decimal">
    			<column name="remise_partenaire" precision="3" />
    		</property>
    		<property name="creerPar" type="integer">
    			<column name="creer_par" />
    		</property>
    		<property name="modifierPar" type="integer">
    			<column name="modifier_par" />
    		</property>
    		<property name="dateCreation" type="date">
    			<column name="date_creation" length="13" />
    		</property>
    		<property name="dateModification" type="date">
    			<column name="date_modification" length="13" />
    		</property>
     
    		<many-to-one name="baseLangue" class="com.base.objects.BaseLangue"
    			>
    			<column name="id_langue" not-null="true" />
    		</many-to-one>
     
    		<many-to-one name="basePays" class="com.base.objects.BasePays"
    			>
    			<column name="id_pays"  />
    		</many-to-one>
     
     
    		<many-to-one name="partGroupePartenaire"
    			class="com.partenaire.objects.PartGroupePartenaire" >
    			<column name="id_groupe" />
    		</many-to-one>
     
     
    		<set name="partAdresses" table="base_adresse_partenaire" inverse="false"
    			lazy="true" >
    			<key>
    				<column name="id_partenaire" not-null="true" />
    			</key>
    			<many-to-many entity-name="com.partenaire.objects.PartAdresse">
    				<column name="id_adresse" not-null="true" />
    			</many-to-many>
    		</set>
     
    		<set name="partTelephones" table="part_telephone" cascade="all,delete-orphan"
    			order-by="id_telephone">
    			<key>
    				<column name="id_partenaire" />
    			</key>
    			<one-to-many class="com.partenaire.objects.PartTelephone" />
    		</set>
     
    		<set name="partSiteWebs" table="part_site_web" inverse="true"
    			lazy="true" >
    			<key>
    				<column name="id_partenaire" />
    			</key>
    			<one-to-many class="com.partenaire.objects.PartSiteWeb" />
    		</set>
     
    		<set name="partFaxes" table="part_fax" cascade="all,delete-orphan"
    			order-by="id_fax">
    			<key>
    				<column name="id_partenaire" />
    			</key>
    			<one-to-many class="com.partenaire.objects.PartFax" />
    		</set>
     
    		<set name="partContacts" table="part_contact" inverse="true" lazy="true"
    		>
    			<key>
    				<column name="id_partenaire" not-null="true" />
    			</key>
    			<one-to-many class="com.partenaire.objects.PartContact" />
    		</set>
     
    		<set name="partEmails" table="part_email" cascade="all,delete-orphan"
    			order-by="id_email">
    			<key>
    				<column name="id_partenaire" />
    			</key>
    			<one-to-many class="com.partenaire.objects.PartEmail" />
    		</set>
     
    		<joined-subclass name="com.partenaire.objects.PartFournisseur"
    			table="part_fournisseur">
    			<key column="id_partenaire" on-delete="noaction" unique="true" />
    		</joined-subclass>
     
    		<joined-subclass name="com.partenaire.objects.PartClient"
    			table="part_client">
    			<key column="id_partenaire" on-delete="noaction" unique="true" />
    		</joined-subclass>
     
    	</class>
    </hibernate-mapping>
    merci d'avance.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Ah oui quand même . Alors j'aurais une question, quand tu "copiais à la main" comme tu dis, les Objets ClientDTO etaient ils aussi complets que ceux fournis par Dozer? Je veux dire avec toutes les collections d'entités associées? Et pour chaque CientDTO as tu besoin de toutes les collections associations? L'optimisation va se jouer sur les collections dont t'as systèmatiquement besoin par appel, tout en sachant que tu peux spécifier plusieurs mapping par entité selon ton besoin.

Discussions similaires

  1. Intégration d'un webmail dans une application Web J2EE
    Par javabreaker dans le forum Développement Web en Java
    Réponses: 6
    Dernier message: 21/06/2013, 15h09
  2. Utilisation de plugin dans une application Web
    Par loopx dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 21/01/2008, 23h06
  3. Utilisation de GStreamer dans une application
    Par bouncebounce dans le forum C
    Réponses: 1
    Dernier message: 13/04/2007, 08h24
  4. Utiliser Remoting dans une application web
    Par loran974 dans le forum Flash
    Réponses: 1
    Dernier message: 04/10/2006, 09h48
  5. Utiliser un timer dans une application console
    Par chavers dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2005, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo