2011-03-20 2 views
2

J'ai eu quelques documentations, mais je ne suis pas encore capable de communiquer avec le datastore ... quelqu'un peut-il me donner un exemple de projet/code d'objectivation utilisé dans l'application web GWT (j'utilise eclipse) ... juste une simple action «mettre» et «obtenir» en utilisant RPC devrait faire ... ou, au moins, dites-moi comment c'est faitGWT-Objectify: basic

+0

GWT documentation Objectify est assez complet et devrait vous aider à démarrer rapidement . Votre problème est-il lié à l'objectivation ou à l'obtention du RPC GWT client-serveur de base? –

+0

oui ... mais je reçois cette erreur myproject/servlet pas trouvé même après avoir fait tous les changements au xml, java et al – Maheshwar

+0

Je suis assez nouveau à GWT et il y a quelque chose que j'ai toujours tendance à oublier/avoir du mal à trouver lors de l'ajout d'une nouvelle dépendance: la ligne d'héritage correcte pour gwt.xml. Pour Objectify: ptdev

Répondre

3

La façon la plus facile de comprendre comment faire un travail d'objectif est de répéter toutes les étapes décrites dans this article du blog David's Chandler. Tout le blog est à lire absolument si vous êtes intéressé par GWT, GAE (Java), gwt-présentateur, gin \ guice, etc Vous y trouverez un exemple de travail, mais de toute façon ici, je vais montrer un exemple légèrement avancé.

Dans le paquet shared définissent votre entité/modèle:

import javax.persistence.Embedded; 
import javax.persistence.Id; 
import com.google.gwt.user.client.rpc.IsSerializable; 
import com.googlecode.objectify.Key; 
import com.googlecode.objectify.annotation.Entity; 
import com.googlecode.objectify.annotation.Unindexed; 

@Entity 
public class MyEntry implements IsSerializable { 
    // Objectify auto-generates Long IDs just like JDO/JPA 
    @Id private Long id; 
    @Unindexed private String text = ""; 
    @Embedded private Time start; 

    // empty constructor for serialization 
    public MyEntry() { 
    } 
    public MyEntry (Time start, String text) { 
     super(); 
     this.text = tText; 
     this.start = start; 
    } 
    /*constructors,getters,setters...*/ 
} 

classe Time (également package shared) contient seulement un msecs sur le terrain:

@Entity 
public class Time implements IsSerializable, Comparable<Time> { 
protected int msecs = -1;  
    //rest of code like in MyEntry 
} 

classe Copier ObjectifyDao de lien ci-dessus à votre forfait server.dao . Et puis faire la classe DAO spécifiquement pour MyEntry - MyEntryDAO:

package com.myapp.server.dao; 

import java.util.logging.Logger; 

import com.googlecode.objectify.ObjectifyService; 
import com.myapp.shared.MyEntryDao; 

public class MyEntryDao extends ObjectifyDao<MyEntry> 
{ 
    private static final Logger LOG = Logger.getLogger(MyEntryDao.class.getName()); 

    static 
    { 
     ObjectifyService.register(MyEntry.class); 
    } 

    public MyEntryDao() 
    { 
     super(MyEntry.class); 
    } 

} 

Enfin, nous pouvons faire des demandes à la base de données (server package):

public class FinallyDownloadingEntriesServlet extends HttpServlet { 
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws 
ServletException, IOException { 
     resp.setCharacterEncoding("UTF-8"); 
     resp.setContentType("text/plain"); 
       //more code... 
       resp.setHeader("Content-Disposition", "attachment; filename=\""+"MyFileName"+".txt\";"); 
     try { 
      MyEntryDao = new MyEntryDao(); 
      /*query to get all MyEntries from datastore sorted by start Time*/ 
      ArrayList<MyEntry> entries = (ArrayList<MyEntry>) dao.ofy().query(MyEntry.class).order("start.msecs").list(); 

      PrintWriter out = resp.getWriter(); 
      int i = 0; 
      for (MyEntry entry : entries) { 
       ++i; 
       out.println(i); 
       out.println(entry.getStart() + entry.getText()); 
       out.println(); 
      } 
     } finally { 
      //catching exceptions 
     } 
    } 
+0

Merci beaucoup! Essayez-le et laissez-nous savoir bientôt ... – Maheshwar