Tag: 谷歌应用程序引擎

异步写入GAE数据存储区

在我的Java应用程序中,有时我的用户会做一些需要数据存储区写入的工作,但我不想让用户在数据存储区写入时保持等待。 我希望在数据存储在后台时立即向用户返回响应。 似乎相当清楚我可以通过使用GAE任务队列来执行此操作,将任务排入队列以存储数据。 但我也看到有一个Async数据存储区API,看起来它比处理任务队列要容易得多。 我可以调用AsyncDatastoreService.put()然后从我的servlet返回吗? 该API会存储我的数据而不让用户等待吗?

谷歌应用引擎HardDeadlineExceededError

我在谷歌应用引擎上托管我的应用程序。 我的应用程序应该做的是每两分钟连接一个网站,解析它并使用C2DM将必要的信息发送到我的设备。 我首先测试了我的应用程序,看它是否有效。 它工作正常。 但是为了每两分钟检查一次网站,我将必要的方法放在while循环中,然后将Thread.sleep(120000)放入while循环中。 它已经捣乱了一段时间,但现在我明白了:来自servlet com.google.apphosting.runtime.HardDeadlineExceededError的未捕获exception:此请求(f6b9f0b8e1ec6f23)于2011/06/09 10:24:22.514 UTC开始,并且仍在2011年执行/ 06/09 10:24:52.824 UTC。 所以在两分钟之前,每件事都没问题。 这是整个错误消息: Uncaught exception from servlet com.google.apphosting.runtime.HardDeadlineExceededError: This request (f6b9f0b8e1ec6f23) started at 2011/06/09 10:24:22.514 UTC and was still executing at 2011/06/09 10:24:52.824 UTC. at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:408) at java.lang.StringBuilder.append(StringBuilder.java:136) at java.lang.StringBuilder.(StringBuilder.java:110) at tripplannerServer.ParseVerstoring.parsePlanned(ParseVerstoring.java:50) at tripplannerServer.SendMessage2.geplandeVerstoring(SendMessage2.java:257) at tripplannerServer.TripplannerServerServlet.doGet(TripplannerServerServlet.java:152) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) […]

从Google App Engine发送请求

我正在开发一个应该在Google应用引擎上部署的播放网络应用程序。 我正在尝试向另一台服务器发送请求,而不是处理响应。 在我的本地主机上,它运行得很好但是当我在GAE上测试它时遇到了困难。 代码如下: import com.google.appengine.repackaged.org.apache.http.HttpResponse; import com.google.appengine.repackaged.org.apache.http.client.methods.HttpGet; import com.google.appengine.repackaged.org.apache.http.conn.scheme.PlainSocketFactory; import com.google.appengine.repackaged.org.apache.http.conn.scheme.Scheme; import com.google.appengine.repackaged.org.apache.http.conn.scheme.SchemeRegistry; import com.google.appengine.repackaged.org.apache.http.impl.client.DefaultHttpClient; import com.google.appengine.repackaged.org.apache.http.impl.conn.SingleClientConnManager; import com.google.appengine.repackaged.org.apache.http.params.BasicHttpParams; public class Getter{ public static byte[] getStuff(){ String urlString = “http://example.com/item?param=xy”; SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme(“http”, PlainSocketFactory.getSocketFactory(), 80)); BasicHttpParams params = new BasicHttpParams(); SingleClientConnManager connmgr = new SingleClientConnManager(params, schemeRegistry); DefaultHttpClient client = new […]

在AppEngine中安全地处理并发Memcache更新

有关安全处理并发Memcache更新的Google Apps Engine文档: Memcache服务的putIfUntouched和getIdentifiable方法可用于提供一种方法,在需要以primefaces方式更新同一个memcache密钥的同时处理多个请求的情况下,安全地对memcache进行键值更新。 (在这些情况下可以获得竞争条件。) 我正在构建一个需要准确缓存值的应用程序,下面是我的代码,请帮我检查一下是否正确: … IdentifiableValue oldCountIdValue = mc.getIdentifiable( cacheKey ); Long count = ( Long ) oldCountIdValue.getValue(); if( count != null ) { this.oldCountValue = oldCountIdValue; return count; } Long result = new Long( q.count() ); mc.putIfUntouched( cacheKey, oldCountValue, result ); return result; 我的问题是:如果putIfuntouched()返回false怎么办? 该代码应该返回什么? 如何? 当数据存储添加一个实体时,我在下面使用: mc.increment( cacheKey, 1, initValue ); […]

Java – Google App Engine – 当我更改存储在会话范围中的类时,InvalidClassException

我更新了我的User类,现在每当有人在其会话范围中存储旧版本的User类访问我的网站时,我都会收到InvalidClassException 。 javax.servlet.ServletException: java.lang.RuntimeException: java.io.InvalidClassException: User; local class incompatible: stream classdesc serialVersionUID = 4949038118012519093, local class serialVersionUID = -971500502189813151 如何阻止这些用户发生此错误? 每次我想要更新存储在会话范围内的类时,我可能会使每个人的会话无效,但是有更好的方法,这样我的用户就不必再次登录了吗?

为什么我得到只有祖先查询被允许在事务内部错误

boolean r = ofy().transact(new Work() { @Override public Boolean run() { Visit visit = ofy().load().type(Visit.class) .filter(Visit.USER_ID, userID) .filter(Visit.VENUE_ID, venueID).first().get(); if (visit == null) return false; visit.setLastRequestDate(new Date(timestamp)); ofy().save().entity(visit).now(); return true; } }); 我明白了 java.lang.IllegalArgumentException:在事务内只允许祖先查询。 对于get()调用的行。 为什么? 我只是在这次交易中查询Visit实体。 我在一个事务中这样做,因为我希望所有这些都作为primefaces操作执行。

无法在Google App引擎上部署应用程序:appengine-web.xml不包含元素

当我点击在netbeans中的谷歌应用引擎上部署应用程序时,这些是产生的错误消息。 我告诉你,最初,我输入的密码错误,应用程序无法部署。 但现在,当我点击部署应用程序时,它不会问我电子邮件或密码。 无论如何我如何解决这些错误? Reading application configuration data… Bad configuration: appengine-web.xml does not contain a element. See http://code.google.com/appengine/docs/java/config/appconfig.html#Using_Concurrent_Requests for more information. You probably want to enable concurrent requests. Please see the logs [C:\Users\user\AppData\Local\Temp\appcfg6534187344911851576.log] for further information. May 28, 2012 12:35:54 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml INFO: Successfully processed W:/UnderTest/NetbeansCurrent/Guestbook/build/web\WEB-INF/appengine-web.xml May 28, 2012 12:35:54 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml SEVERE: […]

Google应用引擎数据存储区字符串编码问题

您好我正在使用Google App Engine进行我正在进行的项目,我需要存储一些字符串。 我正在使用Java和JDOHelper.getPersistenceManagerFactory(“transactions-optional”) 在我的计算机上进行调试时,一切正常,字符串正确保存。 但是当我将它上传到谷歌应用程序引擎时,我保存的所有字符串都会将其unicode字符替换为问号(?)。 如果我转到项目页面上的DataViewer,我可以看到字符串实际上是用问号保存的。 就像我说的,当在我的电脑上运行时,它运行正常。 有谁知道我应该怎么做?

在谷歌应用程序引擎java上的HttpOnly cookie

任何人都知道如何在应用引擎上使用httponly cookie进行会话和cookie? 在Cookie类的javadoc中, http://java.sun.com/javaee/6/docs/api/javax/servlet/http/Cookie.html#setHttpOnly (boolean ) ,有一个setHttpOnly方法。 尝试在为app引擎开发时使用它时出现编译器错误。 该方法是在Servlet 3.0规范中引入的,因此它非常新颖。

Java Appengine APPSTATS导致java内存不足错误

我在我的java appengine应用程序中有几个servlet,它们在内存排序中完成并按照几秒钟的顺序完成。 这些完全没有错误。 但是,我最近启用了appstats for appengine并开始收到以下错误: java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) at java.lang.AbstractStringBuilder.append(Unknown Source) at java.lang.StringBuilder.append(Unknown Source) at java.lang.StringBuilder.append(Unknown Source) at java.lang.StringBuilder.append(Unknown Source) at com.google.appengine.repackaged.com.google.protobuf.TextFormat$TextGenerator.write(TextFormat.java:344) at com.google.appengine.repackaged.com.google.protobuf.TextFormat$TextGenerator.print(TextFormat.java:332) at com.google.appengine.repackaged.com.google.protobuf.TextFormat.printUnknownFields(TextFormat.java:249) at com.google.appengine.repackaged.com.google.protobuf.TextFormat.print(TextFormat.java:47) at com.google.appengine.repackaged.com.google.protobuf.TextFormat.printToString(TextFormat.java:73) at com.google.appengine.tools.appstats.Recorder.makeSummary(Recorder.java:157) at com.google.appengine.tools.appstats.Recorder.makeSyncCall(Recorder.java:239) at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:98) at com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:54) at com.google.appengine.api.datastore.PreparedQueryImpl.runQuery(PreparedQueryImpl.java:127) at com.google.appengine.api.datastore.PreparedQueryImpl.asQueryResultList(PreparedQueryImpl.java:81) at org.datanucleus.store.appengine.query.DatastoreQuery.fulfillEntityQuery(DatastoreQuery.java:379) at org.datanucleus.store.appengine.query.DatastoreQuery.executeQuery(DatastoreQuery.java:289) at […]