GWT-Objectify: базовый - PullRequest
       21

GWT-Objectify: базовый

2 голосов
/ 20 марта 2011

Я ознакомился с несколькими документами, но пока не могу связаться с хранилищем данных ... может кто-нибудь дать мне пример проекта / кода objectify, используемого в веб-приложении GWT (я использую eclipse) ... просто простое действие «положить» и «получить» с использованием RPC должно сделать ... или, по крайней мере, скажите мне, как это делается

1 Ответ

3 голосов
/ 21 марта 2011

Самый простой способ понять, как заставить объективировать работу, - это повторить все шаги, описанные в этой статье из блога Дэвида Чендлера. Весь блог в значительной степени необходимо прочитать, если вы заинтересованы в GWT, GAE (Java), gwt-Presenter, gin \ guice и т. Д. Там вы найдете рабочий пример, но в любом случае я покажу немного продвинутый пример.

В пакете shared укажите вашу сущность / модель:

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...*/
}

Класс времени (также shared package) содержит только одно поле msecs:

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

Скопируйте класс ObjectifyDao по ссылке выше в ваш server.dao пакет. А затем создайте класс DAO специально для 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);
    }

}

Наконец, мы можем отправлять запросы в базу данных (пакет server):

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
        }
    }
...