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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    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
    Points : 3 938
    Points
    3 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 .
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

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

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

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    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
    Points : 3 938
    Points
    3 938
    Par défaut
    Peut on voir le code de ton entité Client? Et egalement le code des entités associées à ce client ?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

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

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

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    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
    Points : 3 938
    Points
    3 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.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  7. #7
    Membre à l'essai
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    deux cas :
    1er cas:
    Pour afficher la liste des clients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         for (Client clt : listeClients) {
         ClientDTO clt_dto=mapper(clt)
         }
    j'ai besoin de parcourir tous les clients et j'ai pas besoin d’aucune collection.
    2eme cas
    Sélectionner un clientDto de la liste pour update , ou ajouter un nouveau client.
    là j'ai besoin de tous les collections pour que je peut faire add/delete/update sur un téléphone ou faxe ou email ou ...
    et si j'ai une base un peu chargé dozer va chercher les collections associée à cet client et donc parcourir tous les objets tél,faxe,email,contact ce qui provoque une dégradation de performances de l'application passer 1 minute pour enregistrer un nouveau client.
    tout en sachant que tu peux spécifier plusieurs mapping par entité selon ton besoin
    donc dans le 1er cas je peux spécifier un mapping sans collection. mais dans le 2eme j'ai obligé de les spécifier et donc toujours le même problème de temps de réponse .
    y'a t'il une façon d'optimiser les choses?
    et merci.

  8. #8
    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
    Points : 3 938
    Points
    3 938
    Par défaut
    Dans ton fichier de mapping, tu déclares donc plusieurs Mappers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <bean id="mapperClientDTOSansCollection" class="org.dozer.DozerBeanMapper">
          <property name="mappingFiles">
             <list>
    	    <value>mapping/client-dto-sans-collection-mapping.xml</value>
    	 </list>
          </property>
    </bean>
    ...
    Et le fichier client-dto-sans-collection-mapping.xml ressemblerait à ça :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <mappings xmlns="http://dozer.sourceforge.net"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://dozer.sourceforge.net
              http://dozer.sourceforge.net/schema/beanmapping.xsd">
     
       <mapping>
          <class-a>com.partenaire.objects.Partenaire</class-a>
          <class-b>com.partenaire.dto.PartenaireDto</class-b>
    <!--Attributs qu'on veut exclure -->
          <field-exclude> 
    		  <a>partEmails</a> 
    		  <b>partEmails </b> 
         </field-exclude>
    ...
       </mapping>
    </mappings>
    Et avec ça Dozer comprendra qu'il ne doit pas se préoccuper de la collection Email.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  9. #9
    Membre à l'essai
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Ok merci beaucoup pour votre explication .
    donc je ferai les test nécessaires et je partagerai les résultat de comparaison .

  10. #10
    Membre à l'essai
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Salut,
    j'ai utilisé les <field-exclude> comme ce qui tu a décrit , il fonctionne bien si je veux récupérer une liste des clients sans collections (donc mon mapperClientDTOSansCollection est util en cas où je veux récupérer des objets sans collection) .

    maintenant si je veux cliquer sur un clientDto de la liste pour faire une update là je suis obliger d'utiliser le mappage normal ( mapperClientDTO ) pour récupérer le client et tous ces adresse et emails et contacts donc dozzer va parcourir tous les objets et on revient au même problème de début;

    le problème que j'ai travaillé toute mon application sous ma machine local qui possède des bonnes caractéristiques RAM ,processeur et aussi sous linux et avec une base contenant seulement quelque élément .et Lorsque j'ai l'installé chez mon client avec un serveur intranet ce problème de lenteur apparaît.

    Est ce sue je suis obligé de réécrire tous mon application en supprimant la couche DTO?ou il'ya une solution de ce problème de lenteur?

    et merci d'avance.

  11. #11
    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
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par bonapart002 Voir le message
    Salut,
    j'ai utilisé les <field-exclude> comme ce qui tu a décrit , il fonctionne bien si je veux récupérer une liste des clients sans collections (donc mon mapperClientDTOSansCollection est util en cas où je veux récupérer des objets sans collection) .

    maintenant si je veux cliquer sur un clientDto de la liste pour faire une update là je suis obliger d'utiliser le mappage normal ( mapperClientDTO ) pour récupérer le client et tous ces adresse et emails et contacts donc dozzer va parcourir tous les objets et on revient au même problème de début;

    le problème que j'ai travaillé toute mon application sous ma machine local qui possède des bonnes caractéristiques RAM ,processeur et aussi sous linux et avec une base contenant seulement quelque élément .et Lorsque j'ai l'installé chez mon client avec un serveur intranet ce problème de lenteur apparaît.

    Est ce sue je suis obligé de réécrire tous mon application en supprimant la couche DTO?ou il'ya une solution de ce problème de lenteur?

    et merci d'avance.
    Bonjour,
    Quand tu parles de mise à jour. C'est la mise à jour de quelle entité exactement? Puis je avoir un exemple de scénario précis? Il faut avoir à l'esprit que si tu souhaites un Client avec toutes les informations qui lui sont rattachées (Email, etc...) Hibernate fera autant d'accès base qu'il y'a de relation liée à l'entité Partenaire. Ce, que tu constitues manuellement ton Client DTO ou via Dozer. Tu ne peux vouloir le beurre et son argent . Et qui dit Accès Base dit Lenteur.J'espère également qu'il y'a des index sur toutes les clés primaires de toutes tes tables ? Normalement Oui mais je préfère quand même te demander . Ce que je t'ai montré c'etait comment optimiser Dozer
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  12. #12
    Membre à l'essai
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Bonjour ,
    merci pour votre réponse rapide.
    Quand tu parles de mise à jour. C'est la mise à jour de quelle entité exactement? Puis je avoir un exemple de scénario précis?
    dans ma page présentation (liste.jsf) j'ai une liste des clientDto mapper par 'mapperClientDTOSansCollection ' .si je veux modifier un client de cet liste je clique sur mon client et je doit récupérer tous ces informations et ces rattachées pour les affichées dans le formulaire de modification pour que je puisse faire une update.
    Hibernate fera autant d'accès base qu'il y'a de relation liée à l'entité Partenaire.
    oui Hibernate fait tous ça mais c'est pas de cette façon .il est très lente
    J'espère également qu'il y'a des index sur toutes les clés primaires de toutes tes tables ?
    oui les indexes sont bien placées et étudier.
    et enfin voiçi ce que faire dozer pour récupérer un client et ces rattachées :
    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
    INFO: Creating shared instance of singleton bean 'dozerBeanMapperFactoryBean'
    21252 [http-bio-8088-exec-7] INFO org.dozer.DozerBeanMapper - Initializing a new instance of dozer bean mapper.
    Hibernate: select partclient0_.id_partenaire as id1_22_0_, partclient0_1_.code_partenaire as code2_22_0_, partclient0_1_.nom_partenaire as nom3_22_0_, partclient0_1_.prenom as prenom22_0_, partclient0_1_.adresse as adresse22_0_, partclient0_1_.num_rc as num6_22_0_, partclient0_1_.num_mf as num7_22_0_, partclient0_1_.remise_partenaire as remise8_22_0_, partclient0_1_.creer_par as creer9_22_0_, partclient0_1_.modifier_par as modifier10_22_0_, partclient0_1_.date_creation as date11_22_0_, partclient0_1_.date_modification as date12_22_0_, partclient0_1_.id_langue as id13_22_0_, partclient0_1_.id_pays as id14_22_0_, partclient0_1_.id_groupe as id15_22_0_ from part_client partclient0_ inner join part_partenaire partclient0_1_ on partclient0_.id_partenaire=partclient0_1_.id_partenaire where partclient0_.id_partenaire=?
    Hibernate: select baselangue0_.id_langue as id1_7_0_, baselangue0_.libelle as libelle7_0_, baselangue0_.sens as sens7_0_ from base_langue baselangue0_ where baselangue0_.id_langue=?
    Hibernate: select baseutilis0_.id_langue as id8_1_, baseutilis0_.id_utilisateur as id1_1_, baseutilis0_.id_utilisateur as id1_13_0_, baseutilis0_.nom as nom13_0_, baseutilis0_.login as login13_0_, baseutilis0_.password as password13_0_, baseutilis0_.email as email13_0_, baseutilis0_.actif as actif13_0_, baseutilis0_.signature as signature13_0_, baseutilis0_.id_langue as id8_13_0_ from base_utilisateur baseutilis0_ where baseutilis0_.id_langue=?
    Hibernate: select partparten0_.id_langue as id13_1_, partparten0_.id_partenaire as id1_1_, partparten0_.id_partenaire as id1_22_0_, partparten0_.code_partenaire as code2_22_0_, partparten0_.nom_partenaire as nom3_22_0_, partparten0_.prenom as prenom22_0_, partparten0_.adresse as adresse22_0_, partparten0_.num_rc as num6_22_0_, partparten0_.num_mf as num7_22_0_, partparten0_.remise_partenaire as remise8_22_0_, partparten0_.creer_par as creer9_22_0_, partparten0_.modifier_par as modifier10_22_0_, partparten0_.date_creation as date11_22_0_, partparten0_.date_modification as date12_22_0_, partparten0_.id_langue as id13_22_0_, partparten0_.id_pays as id14_22_0_, partparten0_.id_groupe as id15_22_0_, case when partparten0_1_.id_partenaire is not null then 1 when partparten0_2_.id_partenaire is not null then 2 when partparten0_.id_partenaire is not null then 0 end as clazz_0_ from part_partenaire partparten0_ left outer join part_fournisseur partparten0_1_ on partparten0_.id_partenaire=partparten0_1_.id_partenaire left outer join part_client partparten0_2_ on partparten0_.id_partenaire=partparten0_2_.id_partenaire where partparten0_.id_langue=?
    Hibernate: select basepays0_.id_pays as id1_12_0_, basepays0_.libelle as libelle12_0_, basepays0_.creer_par as creer3_12_0_, basepays0_.modifier_par as modifier4_12_0_, basepays0_.date_creation as date5_12_0_, basepays0_.date_modification as date6_12_0_ from base_pays basepays0_ where basepays0_.id_pays=?
    Hibernate: select basevilles0_.id_pays as id2_1_, basevilles0_.id_ville as id1_1_, basevilles0_.id_ville as id1_14_0_, basevilles0_.id_pays as id2_14_0_, basevilles0_.libelle_nature as libelle3_14_0_, basevilles0_.creer_par as creer4_14_0_, basevilles0_.modifier_par as modifier5_14_0_, basevilles0_.date_creation as date6_14_0_, basevilles0_.date_modification as date7_14_0_ from base_ville basevilles0_ where basevilles0_.id_pays=?
    Hibernate: select partadress0_.id_partenaire as id2_1_, partadress0_.id_adresse as id1_1_, partadress1_.id_adresse as id1_15_0_, partadress1_.id_pays as id2_15_0_, partadress1_.id_nature_adresse as id3_15_0_, partadress1_.id_ville as id4_15_0_, partadress1_.code_postal as code5_15_0_, partadress1_.adresse as adresse15_0_, partadress1_.creer_par as creer7_15_0_, partadress1_.modifier_par as modifier8_15_0_, partadress1_.date_modification as date9_15_0_ from base_adresse_partenaire partadress0_ left outer join part_adresse partadress1_ on partadress0_.id_adresse=partadress1_.id_adresse where partadress0_.id_partenaire=?
    Hibernate: select partcontac0_.id_partenaire as id2_1_, partcontac0_.id_contact as id1_1_, partcontac0_.id_contact as id1_17_0_, partcontac0_.id_partenaire as id2_17_0_, partcontac0_.id_fonction as id3_17_0_, partcontac0_.nom_contact as nom4_17_0_, partcontac0_.adresse_contact as adresse5_17_0_, partcontac0_.telephone_contact as telephone6_17_0_, partcontac0_.fax_contact as fax7_17_0_, partcontac0_.email_contact as email8_17_0_, partcontac0_.creer_par as creer9_17_0_, partcontac0_.modifier_par as modifier10_17_0_, partcontac0_.date_creation as date11_17_0_, partcontac0_.date_modification as date12_17_0_ from part_contact partcontac0_ where partcontac0_.id_partenaire=?
    Hibernate: select partemails0_.id_partenaire as id2_1_, partemails0_.id_email as id1_1_, partemails0_.id_email as id1_18_0_, partemails0_.id_partenaire as id2_18_0_, partemails0_.libelle_email as libelle3_18_0_, partemails0_.creer_par as creer4_18_0_, partemails0_.modifier_par as modifier5_18_0_, partemails0_.date_creation as date6_18_0_, partemails0_.date_modification as date7_18_0_ from part_email partemails0_ where partemails0_.id_partenaire=? order by partemails0_.id_email
    Hibernate: select partfaxes0_.id_partenaire as id2_1_, partfaxes0_.id_fax as id1_1_, partfaxes0_.id_fax as id1_19_0_, partfaxes0_.id_partenaire as id2_19_0_, partfaxes0_.numero_faxe as numero3_19_0_, partfaxes0_.creer_par as creer4_19_0_, partfaxes0_.modifier_par as modifier5_19_0_, partfaxes0_.date_creation as date6_19_0_, partfaxes0_.date_modification as date7_19_0_ from part_fax partfaxes0_ where partfaxes0_.id_partenaire=? order by partfaxes0_.id_fax
    Hibernate: select partgroupe0_.id_groupe as id1_21_0_, partgroupe0_.nom_groupe as nom2_21_0_, partgroupe0_.description_groupe as descript3_21_0_, partgroupe0_.creer_par as creer4_21_0_, partgroupe0_.modifier_par as modifier5_21_0_, partgroupe0_.date_creation as date6_21_0_, partgroupe0_.date_modification as date7_21_0_ from part_groupe_partenaire partgroupe0_ where partgroupe0_.id_groupe=?
    Hibernate: select partparten0_.id_groupe as id15_1_, partparten0_.id_partenaire as id1_1_, partparten0_.id_partenaire as id1_22_0_, partparten0_.code_partenaire as code2_22_0_, partparten0_.nom_partenaire as nom3_22_0_, partparten0_.prenom as prenom22_0_, partparten0_.adresse as adresse22_0_, partparten0_.num_rc as num6_22_0_, partparten0_.num_mf as num7_22_0_, partparten0_.remise_partenaire as remise8_22_0_, partparten0_.creer_par as creer9_22_0_, partparten0_.modifier_par as modifier10_22_0_, partparten0_.date_creation as date11_22_0_, partparten0_.date_modification as date12_22_0_, partparten0_.id_langue as id13_22_0_, partparten0_.id_pays as id14_22_0_, partparten0_.id_groupe as id15_22_0_, case when partparten0_1_.id_partenaire is not null then 1 when partparten0_2_.id_partenaire is not null then 2 when partparten0_.id_partenaire is not null then 0 end as clazz_0_ from part_partenaire partparten0_ left outer join part_fournisseur partparten0_1_ on partparten0_.id_partenaire=partparten0_1_.id_partenaire left outer join part_client partparten0_2_ on partparten0_.id_partenaire=partparten0_2_.id_partenaire where partparten0_.id_groupe=?
    Hibernate: select partadress0_.id_partenaire as id2_1_, partadress0_.id_adresse as id1_1_, partadress1_.id_adresse as id1_15_0_, partadress1_.id_pays as id2_15_0_, partadress1_.id_nature_adresse as id3_15_0_, partadress1_.id_ville as id4_15_0_, partadress1_.code_postal as code5_15_0_, partadress1_.adresse as adresse15_0_, partadress1_.creer_par as creer7_15_0_, partadress1_.modifier_par as modifier8_15_0_, partadress1_.date_modification as date9_15_0_ from base_adresse_partenaire partadress0_ left outer join part_adresse partadress1_ on partadress0_.id_adresse=partadress1_.id_adresse where partadress0_.id_partenaire=?
    Hibernate: select partcontac0_.id_partenaire as id2_1_, partcontac0_.id_contact as id1_1_, partcontac0_.id_contact as id1_17_0_, partcontac0_.id_partenaire as id2_17_0_, partcontac0_.id_fonction as id3_17_0_, partcontac0_.nom_contact as nom4_17_0_, partcontac0_.adresse_contact as adresse5_17_0_, partcontac0_.telephone_contact as telephone6_17_0_, partcontac0_.fax_contact as fax7_17_0_, partcontac0_.email_contact as email8_17_0_, partcontac0_.creer_par as creer9_17_0_, partcontac0_.modifier_par as modifier10_17_0_, partcontac0_.date_creation as date11_17_0_, partcontac0_.date_modification as date12_17_0_ from part_contact partcontac0_ where partcontac0_.id_partenaire=?
    Hibernate: select partemails0_.id_partenaire as id2_1_, partemails0_.id_email as id1_1_, partemails0_.id_email as id1_18_0_, partemails0_.id_partenaire as id2_18_0_, partemails0_.libelle_email as libelle3_18_0_, partemails0_.creer_par as creer4_18_0_, partemails0_.modifier_par as modifier5_18_0_, partemails0_.date_creation as date6_18_0_, partemails0_.date_modification as date7_18_0_ from part_email partemails0_ where partemails0_.id_partenaire=? order by partemails0_.id_email
    Hibernate: select partfaxes0_.id_partenaire as id2_1_, partfaxes0_.id_fax as id1_1_, partfaxes0_.id_fax as id1_19_0_, partfaxes0_.id_partenaire as id2_19_0_, partfaxes0_.numero_faxe as numero3_19_0_, partfaxes0_.creer_par as creer4_19_0_, partfaxes0_.modifier_par as modifier5_19_0_, partfaxes0_.date_creation as date6_19_0_, partfaxes0_.date_modification as date7_19_0_ from part_fax partfaxes0_ where partfaxes0_.id_partenaire=? order by partfaxes0_.id_fax
    Hibernate: select partsitewe0_.id_partenaire as id2_1_, partsitewe0_.id_site as id1_1_, partsitewe0_.id_site as id1_25_0_, partsitewe0_.id_partenaire as id2_25_0_, partsitewe0_.nom_site as nom3_25_0_, partsitewe0_.lien_site as lien4_25_0_, partsitewe0_.description_site as descript5_25_0_, partsitewe0_.creer_par as creer6_25_0_, partsitewe0_.modifier_par as modifier7_25_0_, partsitewe0_.date_creation as date8_25_0_, partsitewe0_.date_modification as date9_25_0_ from part_site_web partsitewe0_ where partsitewe0_.id_partenaire=?
    Hibernate: select partteleph0_.id_partenaire as id2_1_, partteleph0_.id_telephone as id1_1_, partteleph0_.id_telephone as id1_26_0_, partteleph0_.id_partenaire as id2_26_0_, partteleph0_.numero_telephone as numero3_26_0_, partteleph0_.creer_par as creer4_26_0_, partteleph0_.modifier_par as modifier5_26_0_, partteleph0_.date_creation as date6_26_0_, partteleph0_.date_modification as date7_26_0_ from part_telephone partteleph0_ where partteleph0_.id_partenaire=? order by partteleph0_.id_telephone
    Hibernate: select baselangue0_.id_langue as id1_7_0_, baselangue0_.libelle as libelle7_0_, baselangue0_.sens as sens7_0_ from base_langue baselangue0_ where baselangue0_.id_langue=?
    Hibernate: select baseutilis0_.id_langue as id8_1_, baseutilis0_.id_utilisateur as id1_1_, baseutilis0_.id_utilisateur as id1_13_0_, baseutilis0_.nom as nom13_0_, baseutilis0_.login as login13_0_, baseutilis0_.password as password13_0_, baseutilis0_.email as email13_0_, baseutilis0_.actif as actif13_0_, baseutilis0_.signature as signature13_0_, baseutilis0_.id_langue as id8_13_0_ from base_utilisateur baseutilis0_ where baseutilis0_.id_langue=?
    Hibernate: select partparten0_.id_langue as id13_1_, partparten0_.id_partenaire as id1_1_, partparten0_.id_partenaire as id1_22_0_, partparten0_.code_partenaire as code2_22_0_, partparten0_.nom_partenaire as nom3_22_0_, partparten0_.prenom as prenom22_0_, partparten0_.adresse as adresse22_0_, partparten0_.num_rc as num6_22_0_, partparten0_.num_mf as num7_22_0_, partparten0_.remise_partenaire as remise8_22_0_, partparten0_.creer_par as creer9_22_0_, partparten0_.modifier_par as modifier10_22_0_, partparten0_.date_creation as date11_22_0_, partparten0_.date_modification as date12_22_0_, partparten0_.id_langue as id13_22_0_, partparten0_.id_pays as id14_22_0_, partparten0_.id_groupe as id15_22_0_, case when partparten0_1_.id_partenaire is not null then 1 when partparten0_2_.id_partenaire is not null then 2 when partparten0_.id_partenaire is not null then 0 end as clazz_0_ from part_partenaire partparten0_ left outer join part_fournisseur partparten0_1_ on partparten0_.id_partenaire=partparten0_1_.id_partenaire left outer join part_client partparten0_2_ on partparten0_.id_partenaire=partparten0_2_.id_partenaire where partparten0_.id_langue=?
    Hibernate: select basepays0_.id_pays as id1_12_0_, basepays0_.libelle as libelle12_0_, basepays0_.creer_par as creer3_12_0_, basepays0_.modifier_par as modifier4_12_0_, basepays0_.date_creation as date5_12_0_, basepays0_.date_modification as date6_12_0_ from base_pays basepays0_ where basepays0_.id_pays=?
    Hibernate: select basevilles0_.id_pays as id2_1_, basevilles0_.id_ville as id1_1_, basevilles0_.id_ville as id1_14_0_, basevilles0_.id_pays as id2_14_0_, basevilles0_.libelle_nature as libelle3_14_0_, basevilles0_.creer_par as creer4_14_0_, basevilles0_.modifier_par as modifier5_14_0_, basevilles0_.date_creation as date6_14_0_, basevilles0_.date_modification as date7_14_0_ from base_ville basevilles0_ where basevilles0_.id_pays=?
    Hibernate: select partadress0_.id_partenaire as id2_1_, partadress0_.id_adresse as id1_1_, partadress1_.id_adresse as id1_15_0_, partadress1_.id_pays as id2_15_0_, partadress1_.id_nature_adresse as id3_15_0_, partadress1_.id_ville as id4_15_0_, partadress1_.code_postal as code5_15_0_, partadress1_.adresse as adresse15_0_, partadress1_.creer_par as creer7_15_0_, partadress1_.modifier_par as modifier8_15_0_, partadress1_.date_modification as date9_15_0_ from base_adresse_partenaire partadress0_ left outer join part_adresse partadress1_ on partadress0_.id_adresse=partadress1_.id_adresse where partadress0_.id_partenaire=?
    Hibernate: select partcontac0_.id_partenaire as id2_1_, partcontac0_.id_contact as id1_1_, partcontac0_.id_contact as id1_17_0_, partcontac0_.id_partenaire as id2_17_0_, partcontac0_.id_fonction as id3_17_0_, partcontac0_.nom_contact as nom4_17_0_, partcontac0_.adresse_contact as adresse5_17_0_, partcontac0_.telephone_contact as telephone6_17_0_, partcontac0_.fax_contact as fax7_17_0_, partcontac0_.email_contact as email8_17_0_, partcontac0_.creer_par as creer9_17_0_, partcontac0_.modifier_par as modifier10_17_0_, partcontac0_.date_creation as date11_17_0_, partcontac0_.date_modification as date12_17_0_ from part_contact partcontac0_ where partcontac0_.id_partenaire=?
    Hibernate: select partemails0_.id_partenaire as id2_1_, partemails0_.id_email as id1_1_, partemails0_.id_email as id1_18_0_, partemails0_.id_partenaire as id2_18_0_, partemails0_.libelle_email as libelle3_18_0_, partemails0_.creer_par as creer4_18_0_, partemails0_.modifier_par as modifier5_18_0_, partemails0_.date_creation as date6_18_0_, partemails0_.date_modification as date7_18_0_ from part_email partemails0_ where partemails0_.id_partenaire=? order by partemails0_.id_email
    Hibernate: select partfaxes0_.id_partenaire as id2_1_, partfaxes0_.id_fax as id1_1_, partfaxes0_.id_fax as id1_19_0_, partfaxes0_.id_partenaire as id2_19_0_, partfaxes0_.numero_faxe as numero3_19_0_, partfaxes0_.creer_par as creer4_19_0_, partfaxes0_.modifier_par as modifier5_19_0_, partfaxes0_.date_creation as date6_19_0_, partfaxes0_.date_modification as date7_19_0_ from part_fax partfaxes0_ where partfaxes0_.id_partenaire=? order by partfaxes0_.id_fax
    Hibernate: select partsitewe0_.id_partenaire as id2_1_, partsitewe0_.id_site as id1_1_, partsitewe0_.id_site as id1_25_0_, partsitewe0_.id_partenaire as id2_25_0_, partsitewe0_.nom_site as nom3_25_0_, partsitewe0_.lien_site as lien4_25_0_, partsitewe0_.description_site as descript5_25_0_, partsitewe0_.creer_par as creer6_25_0_, partsitewe0_.modifier_par as modifier7_25_0_, partsitewe0_.date_creation as date8_25_0_, partsitewe0_.date_modification as date9_25_0_ from part_site_web partsitewe0_ where partsitewe0_.id_partenaire=?
    Hibernate: select partteleph0_.id_partenaire as id2_1_, partteleph0_.id_telephone as id1_1_, partteleph0_.id_telephone as id1_26_0_, partteleph0_.id_partenaire as id2_26_0_, partteleph0_.numero_telephone as numero3_26_0_, partteleph0_.creer_par as creer4_26_0_, partteleph0_.modifier_par as modifier5_26_0_, partteleph0_.date_creation as date6_26_0_, partteleph0_.date_modification as date7_26_0_ from part_telephone partteleph0_ where partteleph0_.id_partenaire=? order by partteleph0_.id_telephone
    Hibernate: select partadress0_.id_partenaire as id2_1_, partadress0_.id_adresse as id1_1_, partadress1_.id_adresse as id1_15_0_, partadress1_.id_pays as id2_15_0_, partadress1_.id_nature_adresse as id3_15_0_, partadress1_.id_ville as id4_15_0_, partadress1_.code_postal as code5_15_0_, partadress1_.adresse as adresse15_0_, partadress1_.creer_par as creer7_15_0_, partadress1_.modifier_par as modifier8_15_0_, partadress1_.date_modification as date9_15_0_ from base_adresse_partenaire partadress0_ left outer join part_adresse partadress1_ on partadress0_.id_adresse=partadress1_.id_adresse where partadress0_.id_partenaire=?
    Hibernate: select partcontac0_.id_partenaire as id2_1_, partcontac0_.id_contact as id1_1_, partcontac0_.id_contact as id1_17_0_, partcontac0_.id_partenaire as id2_17_0_, partcontac0_.id_fonction as id3_17_0_, partcontac0_.nom_contact as nom4_17_0_, partcontac0_.adresse_contact as adresse5_17_0_, partcontac0_.telephone_contact as telephone6_17_0_, partcontac0_.fax_contact as fax7_17_0_, partcontac0_.email_contact as email8_17_0_, partcontac0_.creer_par as creer9_17_0_, partcontac0_.modifier_par as modifier10_17_0_, partcontac0_.date_creation as date11_17_0_, partcontac0_.date_modification as date12_17_0_ from part_contact partcontac0_ where partcontac0_.id_partenaire=?
    Hibernate: select partemails0_.id_partenaire as id2_1_, partemails0_.id_email as id1_1_, partemails0_.id_email as id1_18_0_, partemails0_.id_partenaire as id2_18_0_, partemails0_.libelle_email as libelle3_18_0_, partemails0_.creer_par as creer4_18_0_, partemails0_.modifier_par as modifier5_18_0_, partemails0_.date_creation as date6_18_0_, partemails0_.date_modification as date7_18_0_ from part_email partemails0_ where partemails0_.id_partenaire=? order by partemails0_.id_email
    Hibernate: select partfaxes0_.id_partenaire as id2_1_, partfaxes0_.id_fax as id1_1_, partfaxes0_.id_fax as id1_19_0_, partfaxes0_.id_partenaire as id2_19_0_, partfaxes0_.numero_faxe as numero3_19_0_, partfaxes0_.creer_par as creer4_19_0_, partfaxes0_.modifier_par as modifier5_19_0_, partfaxes0_.date_creation as date6_19_0_, partfaxes0_.date_modification as date7_19_0_ from part_fax partfaxes0_ where partfaxes0_.id_partenaire=? order by partfaxes0_.id_fax
    Hibernate: select partsitewe0_.id_partenaire as id2_1_, partsitewe0_.id_site as id1_1_, partsitewe0_.id_site as id1_25_0_, partsitewe0_.id_partenaire as id2_25_0_, partsitewe0_.nom_site as nom3_25_0_, partsitewe0_.lien_site as lien4_25_0_, partsitewe0_.description_site as descript5_25_0_, partsitewe0_.creer_par as creer6_25_0_, partsitewe0_.modifier_par as modifier7_25_0_, partsitewe0_.date_creation as date8_25_0_, partsitewe0_.date_modification as date9_25_0_ from part_site_web partsitewe0_ where partsitewe0_.id_partenaire=?
    Hibernate: select partteleph0_.id_partenaire as id2_1_, partteleph0_.id_telephone as id1_1_, partteleph0_.id_telephone as id1_26_0_, partteleph0_.id_partenaire as id2_26_0_, partteleph0_.numero_telephone as numero3_26_0_, partteleph0_.creer_par as creer4_26_0_, partteleph0_.modifier_par as modifier5_26_0_, partteleph0_.date_creation as date6_26_0_, partteleph0_.date_modification as date7_26_0_ from part_telephone partteleph0_ where partteleph0_.id_partenaire=? order by partteleph0_.id_telephone
    Hibernate: select partsitewe0_.id_partenaire as id2_1_, partsitewe0_.id_site as id1_1_, partsitewe0_.id_site as id1_25_0_, partsitewe0_.id_partenaire as id2_25_0_, partsitewe0_.nom_site as nom3_25_0_, partsitewe0_.lien_site as lien4_25_0_, partsitewe0_.description_site as descript5_25_0_, partsitewe0_.creer_par as creer6_25_0_, partsitewe0_.modifier_par as modifier7_25_0_, partsitewe0_.date_creation as date8_25_0_, partsitewe0_.date_modification as date9_25_0_ from part_site_web partsitewe0_ where partsitewe0_.id_partenaire=?
    Hibernate: select partteleph0_.id_partenaire as id2_1_, partteleph0_.id_telephone as id1_1_, partteleph0_.id_telephone as id1_26_0_, partteleph0_.id_partenaire as id2_26_0_, partteleph0_.numero_telephone as numero3_26_0_, partteleph0_.creer_par as creer4_26_0_, partteleph0_.modifier_par as modifier5_26_0_, partteleph0_.date_creation as date6_26_0_, partteleph0_.date_modification as date7_26_0_ from part_telephone partteleph0_ where partteleph0_.id_partenaire=? order by partteleph0_.id_telephone
    Hibernate: select partadress0_.id_partenaire as id2_1_, partadress0_.id_adresse as id1_1_, partadress1_.id_adresse as id1_15_0_, partadress1_.id_pays as id2_15_0_, partadress1_.id_nature_adresse as id3_15_0_, partadress1_.id_ville as id4_15_0_, partadress1_.code_postal as code5_15_0_, partadress1_.adresse as adresse15_0_, partadress1_.creer_par as creer7_15_0_, partadress1_.modifier_par as modifier8_15_0_, partadress1_.date_modification as date9_15_0_ from base_adresse_partenaire partadress0_ left outer join part_adresse partadress1_ on partadress0_.id_adresse=partadress1_.id_adresse where partadress0_.id_partenaire=?
    Hibernate: select partcontac0_.id_partenaire as id2_1_, partcontac0_.id_contact as id1_1_, partcontac0_.id_contact as id1_17_0_, partcontac0_.id_partenaire as id2_17_0_, partcontac0_.id_fonction as id3_17_0_, partcontac0_.nom_contact as nom4_17_0_, partcontac0_.adresse_contact as adresse5_17_0_, partcontac0_.telephone_contact as telephone6_17_0_, partcontac0_.fax_contact as fax7_17_0_, partcontac0_.email_contact as email8_17_0_, partcontac0_.creer_par as creer9_17_0_, partcontac0_.modifier_par as modifier10_17_0_, partcontac0_.date_creation as date11_17_0_, partcontac0_.date_modification as date12_17_0_ from part_contact partcontac0_ where partcontac0_.id_partenaire=?
    et j'ai pas tous copier l'affichage de console.

  13. #13
    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
    Points : 3 938
    Points
    3 938
    Par défaut
    Donc ce sont des informations dans ce cas que t'as besoin. Donc y'a rien à faire.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  14. #14
    Membre à l'essai
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    merci DevServlet pour tous vos réponses.
    mais si dozer utilisé dans des grands projets comme ce que j'ai lu , comment ils sont traité ces problèmes?

    de plus selon cet article Java Bean mapper performance tests je crois que les méthodes écrite à la main seront plus efficace.

  15. #15
    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
    Points : 3 938
    Points
    3 938
    Par défaut
    Ton article est en effet très édifiant.J'avoue en réalité que nous avons connu quelques soucis de performance avec Dozer, mais pas notables au point d'en abandonner le concept. Nous avons plus mis en avant les avantages tels que :
    -La structuration des process de recopie
    -Le découplage entre les objets accessibles à la couche Vue et les entités
    -Le gain en temps dev du temps qu'on mettrait à transcrire DTO==> Entité et inversement.
    Mais j'ai quand même envie d'avoir un ordre d'idées du temps lourd dont tu te plains. Peux tu faire un test d'une recopie d'un Objet en DTO, en process manuel, et en process Dozer. La différence ne devrait pas être si remarquable que ça.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  16. #16
    Membre averti
    Avatar de parchemal
    Homme Profil pro
    Ingénieur Développeur Java
    Inscrit en
    Août 2009
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2009
    Messages : 144
    Points : 320
    Points
    320
    Par défaut
    Bonjour DevServlet et bonapart002;

    Si j'ai une entité A contenant une ou plusieurs collections d'objets B, il est parfois préférable de construire un objet DTOA1 qui correspond exactement à l'objet A mais dont les collections n'ont que les identifiants d'objet B. Il faut aussi obligatoirement écrire une DTOA2 qui contient une méthode permettant de retrouver les objets B dans la collection à partir de leurs identifiants. Avantages: quand je sollicite l'objet A, je dois en réalité solliciter la DTOA1 avec uniquement les identifiants de ses différentes collections ==> optimisation de la mémoire, et donc moins de données qui transitent sans qu'on ait besoin.
    Nguimgo Bertrand
    Ingénieur Etudes et Développement JAVA/JEE

    - Guide d'implémentation des services REST avec Spring Boot et Spring RestTemplate
    - Je vous propose de lire le guide d'implémentation du design pattern MVP-GWT
    - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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