Google Web Toolkit (GWT) + Google App Engine (GAE) + Détaché de Persistance des Données
Je voudrais développer une application web nécessitant la persistance des données en utilisant GWT et de la FGA. Comme je le comprends, mon seul (ou au moins de loin le plus pratique) option pour la persistance des données est GAE de la banque de données, à l'aide de JDO ou JPA annoté des objets. Je tiens également à être en mesure d'envoyer mes objets et retour client-serveur à l'aide de GWT Appels de Procédure Distante (RPC), donc mes objets doivent être en mesure de "détacher". Cependant, GWT RPC sérialisation ne peut pas gérer détaché JDO/JPA objets et il n'apparaît pas comme s'il le sera dans un futur proche.
Ma question: quel est le plus simple et le plus direct de la solution à cela? Être en mesure de partager les mêmes objets client/serveur avec le serveur-côté de la persistance serait extrêmement pratique.
MODIFIER
Je me dois de préciser que je souhaite toujours utiliser GWT RPC avec GAE Datastore. Je suis juste à la recherche de la meilleure solution qui permettrait à l'ensemble de ces technologies à travailler ensemble.
- +1 pour l'utilisation d'un clustering basé sur le web de service local pour la persistance des données. 🙂
- Envisagez-vous de partager vos progrès sur cet après l'obtention de réponses ici? (et s'il vous plaît envisager de choisir la meilleure réponse)
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser http://gilead.sourceforge.net/
J'ai récemment trouvé Objectiver, qui est conçu pour être un remplacement pour JDO. Pas beaucoup d'expérience avec elle, mais encore sa plus simple à utiliser que JDO, semble plus léger, et les revendications pour obtenir autour de la nécessité pour les Dto avec GWT, bien que je n'ai pas essayé cette fonctionnalité particulière encore.
Ray Cromwell a un temporaire pirater. Je l'ai essayé, et ça marche.
Il vous oblige à utiliser Transitoire au lieu de Amovible entités, car GWT ne peut pas sérialiser un Objet caché[] utilisé par DataNucleus; Cela signifie que les objets que vous envoyer au client ne peut pas être remis dans la banque de données, vous devez récupérer l'effectif de la banque de données de l'objet, et de copier tous les champs persistants de revenir. Ray méthode utilise la réflexion pour itérer sur les méthodes de récupérer les getBean() et setBean() les méthodes, et d'appliquer l'entité setBean() avec votre transitoire gwt objet getBean().
Vous devriez vous efforcer d'utiliser JDO, l'APP n'est pas beaucoup plus qu'une classe wrapper pour l'instant. Pour utiliser ce hack, vous devez avoir à la fois les méthodes getter et setter pour chaque zone de persistance, en utilisant la BONNE getBean et setBean syntaxe pour chaque "bean" sur le terrain. Eh bien, PRESQUE BON, comme il assume tous les getters va commencer avec "get", lorsque le booléen par défaut l'utilisation sur le terrain est "est".
J'ai résolu ce problème et posté un commentaire sur Ray blog, mais il est en attente d'approbation et je ne sais pas si il va à la poste. En gros, j'ai mis en place un @GetterPrefix(préfixe=MethodPrefix.EST) annotation dans l'org.datanucleus paquet pour augmenter son travail.
Dans le cas où il n'est pas posté, et c'est une question, email x_AT_aiyx_DOT_info Re: @GetterPrefix pour JDO et je vais vous envoyer le corrigé.
Y a quelques temps, j'ai écrit un post À l'aide d'un ORM ou de la plaine SQL?
qui, fondamentalement, les matches de votre observation.
Mais bien sûr ce n'est pas une option avec Google App Engine, donc vous êtes un peu coincé ayant une couche de traduction entre les objets côté client et votre entités JPA.
Des entités JPA sont assez rigides, de sorte qu'ils ne sont pas vraiment approprié pour l'envoi des aller-retour entre le client de toute façon. En général, vous voulez des petits bouts à partir de plusieurs entités lors de cette opération (et de se retrouver avec une sorte de présentation de la couche d'objet de valeur). C'est votre chemin vers l'avant.
Essayez ceci. C'est un module pour la sérialisation de GAE types de base et de les envoyer au client GWT.
Vous pouvez envisager d'utiliser JSON. GWT a API nécessaires pour analyser & générer du JSON chaîne dans le côté client. Vous obtenez beaucoup de JSON API côté serveur. J'ai essayé avec google-gson, ce qui est bien. Il transforme votre chaîne JSON à POJO modèle et vice-versa. Espérons que cela aide à vous fournir une solution convenable pour vos besoins
Actuellement, je utiliser la DTO (DataTransferObject) modèle. Pas nécessairement le plus propre et beaucoup plus passe-partout mais GAE nécessite toujours une partie réutilisable juste au courant. 😉
J'ai un Domaine Objet mappé (généralement) un-à-un avec un DTO. Quand un client a besoin d'info de Domaine, un DAO(DataAccessObject) tousse un DTO représentation de l'objet de Domaine et les envoie à travers le fil. Quand un DTO est de retour, j'ai la main le DAO de la DTO qui ensuite les mises à jour de tous les Objets du Domaine.
Pas aussi propre que d'être en mesure de passer des Objets de Domaine directement dans le fil, évidemment, mais les limitations de GAE de JDO la mise en œuvre et GWT du processus de Sérialisation signifie que ce est la façon la plus propre pour moi à gérer pour le moment.
Je crois que Google officiel de réponse pour ce qui est de GWT 2.1 RequestFactory.
Étant donné que vous êtes en utilisant GWT et GAE, je vous suggère de vous en tenir à la officiel de Google cadre... j'en ai un similaire GWT /GAE application basée et c'est ce que je suis en train de faire.
Par la manière, la configuration de RequestFactory est un peu de douleur dans le cul. L'actuel plug-in Eclipse ne comprend pas tous les pots mais j'ai été capable de trouver l'aide dont j'avais besoin, dans Stackoverflow
J'ai été en utilisant Objectiver ainsi, et je l'aime vraiment. Il vous reste à faire un peu de danse autour avec pré/test de charge des méthodes pour traduire un Texte à la Chaîne et au dos.
depuis GWT finalement compilé en JavaScript, pour la maison de persistance, il aurait besoin de quelques-uns des services offerts. les plus connus sont le HTML5 magasins et des Engins (à la fois l'utilisation de SQLite!). bien sûr, ce n'est largement déployé, donc, si vous voulez convaincre vos utilisateurs à utiliser un navigateur moderne ou installer un peu connu plugin. assurez-vous de se dégrader à un utilisable sous-ensemble si l'utilisateur n'est pas conforme
Qu'en utilisant directement La banque de données de l'API de load/store POJO objets de domaine?
Il doit être comparable à la DTO approche, qui signifie par exemple que vous avez à gérer manuellement tous les champs (si vous ne l'utilisez pas à des astuces comme la réflexion-based automation) alors qu'il devrait vous donner plus de flexibilité et un accès complet à tous les Magasin de données caractéristiques.