English 中文(简体)
• 如何在索戈里的引擎中要求时间时处理书面交易
原标题:How to handle write transactions when request time out in google app engine

我是一条新东西,用来gle光发动机。 我正读一下昨天的发动机。 在提出请求期间,我对<>标准交易持有怀疑。

假设我制造了10 000件物品,并试图通过单一交易(假定数据库就像一种液态交易)加以挽救。

    String greeting = "test";
    String guestBookName = "default";
    DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
    Key guestBookKey = KeyFactory.createKey("GuestBook", guestBookName);
    for(int i=0;i<10000;i++)
    {
        Entity entity = new Entity("Greeting", guestBookKey);
        entity.setProperty("date", new Date());
        entity.setProperty("greeting", greeting);
        datastoreService.put(entity);
    }

假设在挽救了1000个物体后,将删除所请求的1 000个物体?

我在把1164件物体留给数据储存后,将这一代码用于发动机。 我看着这一错误。

....Uncaught exception from servlet
com.google.apphosting.api.DeadlineExceededException: This request (0000000000000000)
started at 2011/10/20 07:18:36.726 UTC and was still executing at 2011/10/20 07:19:36.143 UTC.....

这些物体没有从数据库中删除。 此外,我读到rel=“nofollow”>here

数据库可在单项交易中开展多项业务。 根据定义,除非交易中的每一业务成功,否则交易不可能成功。 如果任何业务失败,交易就会自动收回。 这对分发的网络应用特别有用,因为许多用户可以同时获得或操纵同样的数据。

任何人都可以帮助我清楚了解这一点。

事先感谢你。

最佳回答

GAE的交易仅针对Entity Group(具有相同根基/父母的读者)。 其次,它使用optimistic locking,这意味着如果其他线索在目前之前做了改动,交易就会失败。

它不是传统的交易。 如果交易你的代码不成文,你的目标就不会删除。

请阅读

问题回答

我现在理解如何处理在数据库中的文字。 我利用这部法典,能够收回在请求书提出时所节省的物品。 首先,我尝试了这一法典,没有校对。 这一要求失败了,当我去找我的数据库管理员时,我看不到任何新的记录。 然后,我用i<使用Thread.sleep(int),4 并发出请求。 此时,我可以把记录放在我的数据库浏览器中。

我现在理解的是关于交易和数据储存的界限。 谢谢你@splix

package guestbook;

import java.io.IOException;
import java.util.Date;
import java.util.logging.Logger;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.Transaction;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import com.google.apphosting.api.DeadlineExceededException;

@SuppressWarnings("serial")
public class Test extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        Transaction transaction=null;
        try
        {
            String greeting = "test";
            String guestBookName = "default";
            UserService userService = UserServiceFactory.getUserService();
            User user = userService.getCurrentUser();
            DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
            transaction = datastoreService.beginTransaction();
            Key guestBookKey = KeyFactory.createKey("GuestBook", guestBookName);
            for(int i=0;i<4;i++)
            {
                Entity entity = new Entity("Greeting", guestBookKey);
                entity.setProperty("user", user);
                entity.setProperty("date", new Date());
                entity.setProperty("greeting", greeting+" "+i);
                datastoreService.put(entity);
                try {
                    Thread.sleep(1000*2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            transaction.commit();
        }catch(DeadlineExceededException e)
        {
            e.printStackTrace();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            Logger logger = Logger.getLogger(Test.class.getName());
            logger.info(""+transaction.isActive());
            if(transaction!=null)
                if(transaction.isActive())
                    transaction.rollback();
            logger.info(""+transaction.isActive());
        }
    }
}




相关问题
How to make logging.debug work on Appengine?

I m having a tough time getting the logging on Appengine working. the statement import logging is flagged as an unrecognized import in my PyDev Appengine project. I suspected that this was just an ...

gqlQuery returns object, want list of keys

Is there a way to convert the GqlQuery object to an array of keys, or is there a way to force the query to return an array of keys? For example: items = db.GqlQuery("SELECT __key__ FROM Items") ...

Integrating Google AppEngine with a Thick Client

I want to make a multi-user client-server solution with Java Swing thick client as a front-end and Google AppEngine (Java one) as a back-end. The problem is that GAE provides only web-based forms for ...

sorl.thumbnail : thumbnail is not a valid tag library?

I am trying to install sorl.thumbnail but am getting the following error message: thumbnail is not a valid tag library: Could not load template library from django.templatetags.thumbnail, No module ...

热门标签