Tag: google app engine

如何在多个参数上动态构建JDO查询

可以使用JDO语法轻松查询多个参数,如下所示: //specify the persistent entity you’re querying and you filter usign params query = pm.newQuery(MyClass.class, ” customer == paramCustomer && date >= paramStartDate && date <=paramEndDate "); // declare params used above query.declareParameters("com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"); //pass the object declared as params MyClassList = (List) query.execute(user, startDate, endDate); 使用filter以编程方式构建字符串很简单: “customer == paramCustomer && […]

在App Engine上的Servlet响应中覆盖与缓存相关的HTTP标头

我在App引擎上有一个servlet来提供图像。 servlet正确设置HTTP标头值以指示应缓存图像。 但App Engine会覆盖这些标题,导致图像未被缓存。 请注意,之前使用相同的代码,但现在它不起作用。 App引擎文档指出,如果servlet设置了Cache-Control , Expires和Vary标头,它们将保持不变: https : //developers.google.com/appengine/docs/java/runtime#Responses 这是我的示例代码: response.setContentType( “image/jpeg” ); //response.setDateHeader( “Expires”, new Date().getTime() + 60L*24*60*60*1000 ); // 60 days cache time //response.addHeader( “Cache-Control”, “public, max-age=5184000” ); // 5_184_000 sec = 60 days cache time response.addHeader( “Cache-Control”, “public, max-age=90000” ); // 90_000 sec = 25 hours cache time response.getOutputStream().write( data […]

使用mvn devserver的Google App Engine Java失败:缺少“guestbook / target / guestbook-1.0-SNAPSHOT”

我正在尝试使用Java在Google App Engine上进行简单的教程 ,但是当我尝试运行mvn appengine:devserver命令时,我得到了这个奇怪的丢失目录错误: [INFO] guestbook ………………………………….. FAILURE [ 0.228 s] [INFO] guestbook-war ………………………………. SKIPPED [INFO] guestbook-ear ………………………………. SKIPPED [INFO] ———————————————————————— [INFO] BUILD FAILURE [INFO] ———————————————————————— [INFO] Total time: 0.446 s [INFO] Finished at: 2014-05-06T12:03:51-08:00 [INFO] Final Memory: 9M/176M [INFO] ———————————————————————— [ERROR] Failed to execute goal com.google.appengine:appengine-maven-plugin:1.9.4:devserver (default-cli) on project guestbook: The application directory […]

AppEngine响应时间差异

我正在考虑使用AppEngine来部署我正在开发的webapp。 作为我对AppEngine平台的调查的一部分,我一直在检查简单请求的响应时间。 为此,我编写了一个简单的PING servlet: @SuppressWarnings(“serial”) public class Ping extends HttpServlet { @Override public void doGet(@SuppressWarnings(“unused”) HttpServletRequest xiReq, HttpServletResponse xiResp) throws IOException { xiResp.setContentType(“text/plain”); xiResp.getWriter().println(“PONG”); } } 然后我编写了一个java程序,每秒向该servlet发出一个请求,并计算完成请求所需的时间。 获取页面内容使用以下代码。 private static String getPageContent(String url) throws IOException { String result = null; URL reqURL = new URL(url); URLConnection connection = reqURL.openConnection(); connection.setConnectTimeout(30 * 1000); connection.setReadTimeout(30 * 3000); […]

在谷歌应用引擎和GWT中使用SOAP Web服务

我正在GWT中编写Web应用程序,我正在尝试与SOAP Web服务进行交互。 我知道如何使用JAX-WS库在常规Java环境中执行此操作,但GAE(Google App Engine)不支持它。 请参阅http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine 有没有办法使用GWT + GAE消费基于wsdl的Web服务(例如ebay Web服务)? 谢谢!

Google App Engine和CORS

我在GAE上托管了一个简单的应用程序(java servlet)。 该应用程序返回json数据。 我在servlet中设置了以下标题信息: resp.setContentType(“application/json”); resp.setHeader(“Access-Control-Allow-Origin”, “*”); resp.setHeader(“Access-Control-Allow-Methods”, “GET, POST, OPTIONS”); resp.setHeader(“Access-Control-Allow-Credentials”, “true”); 当我直接在应用引擎上访问url时,这是标题信息: Request Method:GET Status Code:200 OK Request Headersview source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Host:———.appspot.com User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19 Response Headersview source Access-Control-Allow-Credentials:true Access-Control-Allow-Methods:GET, POST, OPTIONS Access-Control-Allow-Origin:* Cache-Control:private Content-Encoding:gzip Content-Length:340 Content-Type:application/json; charset=ISO-8859-1 Date:Sat, 28 […]

Google App Engine – 删除JPQL查询和级联

我注意到使用下面的JPQL查询时不会删除PersistentUser的子代。 但是,如果我执行entityManager.remove(object) ,则会删除子项。 这是预期的吗? 为什么下面的JPQL查询也没有执行级联删除? @OneToMany(mappedBy = “persistentUser”, cascade = CascadeType.ALL) private Collection persistentLogins; … @Override @Transactional public final void removeUserTokens(final String username) { final Query query = entityManager.createQuery( “DELETE FROM PersistentUser p WHERE username = :username”); query.setParameter(“username”, username); query.executeUpdate(); }

JDBC连接池与App Engine兼容

注意:我知道这个线程,但它已经很老了,而且,解决方案对我不起作用。 我正在使用App Engine和Cloud SQL,我想在所有应用程序的当前用户之间共享一个打开的连接池。 我已经尝试了几个连接池实现,它们都与本地开发服务器完美配合,但是,当部署到云时,它们会失败。 我想原因是App Engine受限制的“沙箱”环境。 有没有人知道在App Engine上运行的JDBC连接池? Apache Commons DBCP … Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.commons.dbcp2.PoolableConnection at com.google.appengine.runtime.Request.process-a49d46300800d0ca(Request.java) at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:254) at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2162) at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2148) at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1903) at org.apache.commons.dbcp2.BasicDataSource$PaGetConnection.run(BasicDataSource.java:2267) at org.apache.commons.dbcp2.BasicDataSource$PaGetConnection.run(BasicDataSource.java:2263) at java.security.AccessController.doPrivileged(AccessController.java:63) at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1404) … Tomcat JDBC连接池 … Caused by: java.lang.SecurityException: Unable to get members for class org.apache.tomcat.jdbc.pool.DataSource … Caused […]

配置Restlet以在Google App Engine上返回JSP?

我开发了一个Restlet应用程序。 我想通过Restlet返回URL请求的JSP文件。 如何在不使用重定向的情况下实现此目的? 即假设我在mydomain.com上有“contact.jsp”文件,我希望人们能够访问http://mydomain.com/contact上的 contact.jsp 因此,在Restlet中,我会: router.attach(“/contact”, MyResource.class); 但是如何返回“contact.jsp”页面呢? 我知道重定向会起作用,但我不希望用户在“ http://mydomain.com/contact.jsp ”中看到“.jsp”…或者是否有其他策略可以在没有使用的情况下工作的Restlet? 也许我的web.xml文件有些修改? 编辑(2009-08-14): 我在下面发布的答案不适用于App-Engine和Restlet。 但是,如果我不包含Restlet,或者允许Restlet具有“/ *”的url模式,它确实有效 什么是理想的是有一个允许我这样做的路由器的子类: router.attach(“/contact”, “/contact.jsp”); 谢谢! 编辑(2009-08-17): 自从我发布赏金以来,我没有得到任何答复,我感到很惊讶。 如果我的问题/问题不明确,有人会发表评论并告诉我吗? 编辑(2009-08-17): 有趣的观察。 使用下面“Rich Seller”描述的方法时,它可以在Google App-Engine上部署,而不是在本地部署。 此外,如果我在Google App-Engine上调用http://mydomain.com/contact.jsp ,它会绕过Restlet并直接进入JSP。 但是,在本地,Restlet接管了。 也就是说, http:// localhost:8080 / contact.jsp没有进入JSP并转到Restlet。 部署的应用引擎应用程序对URL的响应方式与本地对应方式不同吗?

用于Google App Engine的Memcache(Java)是全局缓存吗?

我是Google App Engine的新用户,过去几天我花了很多时间使用GAE的Memcache来存储数据。 根据我的初步调查结果,似乎GAE的Memcache不是全球性的? 让我进一步解释。 我知道GAE的不同请求可能由不同的实例提供(实际上这似乎经常发生)。 正是出于这个原因,我使用Memcache来存储一些共享数据,而不是静态Map。 我想(也许是错误的)这是使用分布式缓存的重点,以便任何节点都可以访问数据。 另一个明确的可能性是我做错了什么。 我已经尝试了JCache和低级Memcache API(我正在编写Java,而不是Python)。 这是我正在做的检索缓存: MemcacheService cache = MemcacheServiceFactory.getMemcacheService(); 部署之后,这是我检查的内容(通过我的应用程序日志): 初始请求由特定节点提供,并且数据存储在上面检索的高速缓存中。 新的几个请求检索相同的缓存,数据就在那里。 当一个新节点被生成来提供请求时(从日志中我知道发生这种情况是因为GAE记录了“此请求导致为您的应用程序启动了一个新进程……”),将检索缓存并且是EMPTY ! 现在我也知道无法保证Memcache中的数据有多长,但从我的发现来看,当diff实例尝试访问缓存时,数据就会消失。 这似乎违背了分布式全局缓存的整个概念吗? 希望有人能够确切地澄清这应该如何表现。 如果Memcache不是全局的并且每个服务器实例都有自己的副本,那么为什么甚至使用Memcache? 我可以简单地使用静态HashMap(我最初做过,直到我意识到由于不同的实例服务于我的请求它不会是全局的)。 帮帮我?