2011-04-30 6 views
2

Je me demande quelle est la meilleure façon de gérer le mappage des beans entité (JPA 2) aux DTO. Puisque vous ne pouvez pas utiliser les beans entité "directement" avec GWT, vous devez gérer les DTO à la place.Entités GWT + + JPA + DTO + Dozer

J'ai plusieurs entités avec diverses relations (OneToOne, OneToMany, ManyToMany avec une table de jointure, etc.). Dans un premier temps j'ai commencé à convertir toutes les entités DTO à la main à l'aide d'un MyEntityTransform.java de classe avec des méthodes telles que: persistent2BeanCollection (...), persistent2BeanMap (...), bean2Persistent:

static final public CarBean persistant2Bean(CarPersist) { 
      return new CarBean(cartPersist.getId(), carPersist.getName(), 
        carPersist.getDescription()); 
     } 

D'autres méthodes sont (...), bean2PersistentCollection (...)

Cela devient une tâche fastidieuse lors de la gestion de collections, en particulier lorsque la même entité a des références à plusieurs autres entités;

J'ai réfléchi à l'utilisation du framework DOZER pour gérer le mappage entre les entités et les DTO. Il est parlé ici: http://code.google.com/intl/fr/webtoolkit/articles/using_gwt_with_hibernate.html

Cependant je ne suis pas sûr de savoir comment il gère les différentes applications JPA (de ManyToMany par exemple) et la quantité de travail est de le configurer dans le fichier dozer-haricot mappings.xml. En outre, je suppose que ce cadre utilise intensivement la réflexion pour effectuer des opérations de mappage. Une telle approche est beaucoup plus lente que la cartographie effectuée "à la main", par ex. quand j'utilise les méthodes de ma classe MyEntityTransform.java.

Que suggérez-vous? Je suis intéressé par l'expérience de tout le monde en matière de gestion des entités JPA avec GWT.

Merci.

Celinio

http://www.celinio.net/techblog

Répondre

2

Dans un premier temps je préfère toujours Dozer. Lorsque la structure DTO est la même que celle de vos entités, vous pouvez utiliser Dozer avec une configuration nulle en appelant simplement la fonction de carte. Lorsque vos DTO diffèrent de vos entités, la surcharge de configuration est minime. Il suffit de regarder dans la très bonne documentation. Lorsque la performance devient un problème, je préférerais une approche de générateur de code, mais je n'écrirais jamais le code de mappage par moi-même, car il peut être très sujet aux erreurs.

+0

Merci pour vos commentaires. Je ne suis pas sûr de ce que je ferai, car la performance pourrait en souffrir parce que Dozer utilise intensivement la réflexion pour mapper les entités aux DTO. –

+0

Jetez un oeil à la FAQ du Dozer: http://dozer.sourceforge.net/documentation/faq.html#dozer-perf. Quand la performance est vraiment un problème qui vous préoccupe, je pense que vous devez référencer différents frameworks avant de commencer votre projet. – malte

1

Si vous souhaitez simplement inclure des entités dans votre module EJB ou JPA dans votre module GWT, procédez comme suit. Je l'ai trouvé le mien et ça a marché pour moi.

  1. Inclure votre module EJB dans le chemin de la construction du module GWT (vous avez peut-être déjà fait)

  2. Maintenant goto votre package entités dans le module EJB (je vais le prendre comme "com.ejbproject.entities"

  3. Créez un fichier nommé Entities.gwt.xml (<ProjectSourcePath>/com/ejbproject/entities/Entities.gwt.xml)

  4. Contenu du fichier doit être

    <module>
          <source>com.ejbproject.entities</source>

  5. incluent maintenant suivant fragment dans votre < modulename de projet GWT > .gwt. fichier xml.

    <inherits name="com.ejbproject.entities.Entities"/>

  6. Maintenant, vous pouvez inclure les entités de votre côté client GWT et gwtCompile sans aucun problème

+1

Bien que cela aide GWT à comprendre les classes, cela ne résout pas le problème du PO: les entités JPA ne peuvent pas être sérialisées par GWT. Voir http://stackoverflow.com/questions/6405481/entity-with-relationships-through-gwt-rpc-problem – Hank

1

Une solution à vérifier est ModelMapper. Dozer et d'autres, en ce sens qu'il minimise la quantité de configuration nécessaire en mappant intelligemment les modèles d'objets. Lorsque la configuration est nécessaire, ModelMapper propose une API de refactoring sécurisée qui utilise le code réel pour mapper les propriétés et les valeurs plutôt que d'utiliser des références de chaîne ou du code XML.

Vérifiez le site ModelMapper pour plus d'informations:

http://modelmapper.org