2010-11-25 14 views
0

J'ai peut-être un problème stupide sur l'utilisation des classes d'entités sur les pages GWT. Il est dit que pour afficher certaines classes sur les pages GWT, cette classe doit être définie dans le package de l'application cliente GWT. Par exemple. L'application GWT sous com.foo.clinet ne peut utiliser que les classes définies dans ce package et ses sous-packages pour être affichés dans les composants (comme les grilles GWT, les étiquettes ...)GWT utilisant des entités de EJB

Mais que faire si vous avez un autre projet où vous avez défini ces entités, typiquement EJB (imagine web project, projet ejb). Vous êtes en mesure de recevoir ces entités via le service RPC mais vous ne pouvez pas les utiliser dans les composants (simple ajout de jar de ce projet ne vous aidera pas). La première possibilité est de les transformer en un autre objet de valeur avec plus ou moins les mêmes attributs mais définis dans ce projet web. Mais il s'agit d'une duplication de code qui n'est jamais agréable, car lorsque vous changez d'entité, vous devez modifier l'objet de valeur de vue correspodant. Il y a sûrement peu d'options pour faire de telles choses automatiquement (par exemple par une réflexion qui est malheureusement lente ...). Donc, la question est, existe-t-il une solution élégante typique ou un modèle de conception comment résoudre ce problème sans duplication de code? Merci beaucoup

Répondre

0

J'ai peut-être trouvé la solution mais je ne sais pas si c'est juste. Je vais préciser mon problème un peu plus précis. J'ai cette structure.

/MyApp/Ejb-module/x/y/z/MyClass.java 
/MyApp/Web-module/x/y/MyApp.gwt.xml 

et que vous souhaitez inclure MyClass.java à GWT compilateur SANS besoin de se déplacer partout.

Je viens de définir que /MyApp/Ejb-module build comprendra également *.java fichiers, puis dans /MyApp/Web-module/a/b j'addded Inclusion.gwt.xml où je mets

<module> 
    <source path="z" /> 
</module> 

et mis à jour MyApp.gwt.xml avec

<inherits name="x.y.Inclusion"/> 
0
  1. Mettez vos EJBs dans un paquet séparé/répertoire (par exemple com.example.common), puis ajoutez la déclaration de la source à votre descripteur de module GWT (de xyz.gwt.xml):

    <source path="common"/> //relative to your xyz.gwt.xml location 
    

    Le compilateur GWT compilera également les EJB et ceux-ci seront vus par votre autre code GWT.

  2. Créez des "fausses" classes d'annotation EJB en utilisant le super-approvisionnement. C'est une technique courante pour remplacer les classes avec une version GWT. Décrit ici: http://fredsa.allen-sauer.com/2009/04/1st-look-at-app-engine-using-jdo.html

+0

je vais avoir un Regarde ça – glu

+0

Ok, j'ai regardé mais je ne sais pas si ça me va. Mon problème est que j'ai une structure comme: /MyApp/Ejb-module/x/y/z/MyClass.java, /MyApp/Web-module/a/b/MyApp.gwt.xml et je veux juste simplement inclure src des fichiers de/MyApp/Ejb-module/x/y/z pour le compilateur GWT. Si j'ai bien compris le super-sourcing. Je dois créer un dossier sous/MyApp/Web-module/a/b avec n'importe quel nom et y mettre mes fichiers x/y/z/MyClass.java et utiliser la balise super-source dans MyApp.gwt.xml. Mais je ne veux pas déplacer MyClass.java. Im imaginant quelque chose grâce à laquelle je peux spécifier le chemin relatif. par exemple. ../../../../Ejb-module/x/y/z/MyClass.java – glu

Questions connexes