`
neeleon
  • 浏览: 184751 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Google App Engine for Java 常见问题

阅读更多

我可以在 App Engine 上使用我最喜欢的框架吗?

App Engine 运行时环境强加了一些约束,以确保可在 App Engine 的分布式基础架构上将应用程序扩展为多个实例。许多框架可在 App Engine 服务器运行时环境内实现无缝工作,但有些不能。其他的可能需要进行某些修改。

因为存在大量的框架,因此我们使用面向社区的方法在此处提供了一个协作页面:是否可在 App Engine 中运行 (Will it Play in App Engine)。请搜索该页面以检查您最喜欢的框架的状态,如果未列出您的框架或您有更新或修正,请提交评论。

我可以在 App Engine 应用程序中使用哪些 JVM 语言?

许多设计为可在 JVM 中运行的语言(如 JRuby、Jython、Scala 以及 Groovy 等)都可在 App Engine 上使用。目前并不是所有这些语言都经过了完整的测试,因此我们使用面向社区的方法在此处提供了一个协作页面:是否可在 App Engine 中运行 (Will it Play in App Engine)。请在测试过您选择的运行时语言后添加相关信息。

为什么我不能从该文件读取?

如果作为应用程序的一部分上传的文件位于以下位置,则可从该文件读取:

  • war/WEB-INF
  • 与 appengine-web.xml 中的 <resource-files> 模式匹配的位置(默认情况下包括一切)

 

如果文件位置没有问题,则问题可能是您用于从文件读取的方法未列入白名单。您的应用程序可使用任何可用于从文件系统读取的 IO 类,例如 FileFileInputStreamFileReaderRandomAccessFile。有关白名单上列出的类的完整列表,请参阅 JRE 类白名单

如果您需要获得您自己的资源(如属性文件)的文件访问权限,可将这些文件放入 jar 中,并使用 ClassClassLoader 将其载入。

为什么我不能写入到该文件?

由于应用程序的分布式性质,在 App Engine 中不支持写入到本地文件。因此,应将必须保存的数据存储在分布式数据存储区中。有关详细信息,请参阅关于运行时沙盒的文档。

我可以在应用程序中创建新线程吗?

不可以,App Engine 应用程序无法生成新线程。有关详细信息,请参阅关于运行时沙盒的文档。

我有现有的 Python 应用程序,可以访问现有的 Python 数据存储区吗?

可以,可将 Java 代码上传到您的应用程序(建议指定一个新的版本号),然后您的 Java 代码即可访问数据存储区中的数据。类型名称和属性名称在不同的语言间是一致的。

请注意确保能够将 Python 模型实体中使用的数据类型载入 Java 代码中。

我可以在同一应用程序中运行 Java 和 Python 代码吗?

可以,应用程序的各个版本都必须指定运行时语言,因此可以实现版本 x 运行 Java,而版本 y 运行 Python。还可以使用 Jython。

为什么在试图登录应用程序时会出现 UserServiceFailureException?

如果您将应用程序与 Google 企业应用套件域相关联,则必须在 Google 企业应用套件帐户的子域上访问该应用程序。例如,如果 example.com 是您的 Google 企业应用套件域,则您必须创建一个子域(在此例中使用 www)并将其指向 App Engine 上运行的应用程序。然后您可以从 www.example.com 登录到您的应用程序。如果您尝试通过 app-id.appspot.com 网址访问应用程序,则将无法使用 Google 企业应用套件帐户登录。本限制仅对限制到 Google 企业应用套件域的应用程序适用。

我看到所有请求处理程序均出现初始化失败异常。

您的某个过滤条件、servlet 或 JSP 可能出现错误,阻止了应用程序中所有处理程序的正常初始化。

如果预编译 JSP,可能会引发初始化问题。作为更新过程的一部分,appcfg 命令可为您预编译 JSP,因此您不必进行预编译。

如果出于某种原因需要自己对它们进行预编译,则解决方法是把所有的 JSP 库与应用程序捆绑在一起。其中包括:

  • Jasper 运行时和编译器(假设您使用其进行预编译)。
  • 所有所需的标签库(包括 JSTL)。
  • EL 实现(如果您要使用它)。

 

在 appcfg 执行离线 JSP 编译的过程中,会将这些库添加到每个应用程序,因此,如果您要自己进行 JSP 编译,则需要做同样的事情。

如果您有使用 Jasper 的预编译 JSP,则必须在 WEB-INF/lib 中包含以下 jar:

  • commons-logging-api-1.1.1.jar(或更高版本)
  • commons-el.jar
  • jasper-runtime.jar

 

请注意,实际上即使您未使用 EL 和 logging,它们也是必需的。

App Engine 是否支持 Java 企业版?

虽然我们不支持全部 Java EE 规范,但支持其中很多单个组件。有关特定的支持组件和不支持组件列表,请参阅我们用于跟踪框架、语言和库兼容性的协作编辑页面:是否可在 App Engine 中运行 (Will it Play in App Engine)

如何处理多部分格式数据?或如何处理应用程序的文件上传?

您可以使用 Apache Commons 文件上传包中的类从多部分格式发布中获取上传的文件数据。特别是,您可以如下使用 FileItemStreamFileItermIteratorServletFileUpload

import org.apache.commons.fileupload.FileItemStream; 
import org.apache.commons.fileupload.FileItemIterator; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
 
import java.io.InputStream; 
import java.io.IOException; 
import java.util.logging.Logger; 
 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
public class FileUpload extends HttpServlet { 
  private static final Logger log = 
      Logger.getLogger(FileUpload.class.getName()); 
 
  public void doPost(HttpServletRequest req, HttpServletResponse res) 
      throws ServletException, IOException { 
    try { 
      ServletFileUpload upload = new ServletFileUpload(); 
      res.setContentType("text/plain"); 
 
      FileItemIterator iterator = upload.getItemIterator(req); 
      while (iterator.hasNext()) { 
        FileItemStream item = iterator.next(); 
        InputStream stream = item.openStream(); 
 
        if (item.isFormField()) { 
          log.warning("Got a form field: " + item.getFieldName()); 
        } else { 
          log.warning("Got an uploaded file: " + item.getFieldName() + 
                      ", name = " + item.getName()); 
 
          // You now have the filename (item.getName() and the 
          // contents (which you can read from stream).  Here we just 
          // print them back out to the servlet output stream, but you 
          // will probably want to do something more interesting (for 
          // example, wrap them in a Blob and commit them to the 
          // datastore). 
          int len; 
          byte[] buffer = new byte[8192]; 
          while ((len = stream.read(buffer, 0, buffer.length)) != -1) { 
            res.getOutputStream().write(buffer, 0, len); 
          } 
        } 
      } 
    } catch (Exception ex) { 
      throw new ServletException(ex); 
    } 
  } 
}

我一直使用端口 8080,如何更改开发应用程序服务器的端口?

如果您看到以下错误消息:

Could not open the requested socket: Address already in use

您可以更改开发服务器监听传入连接的端口。可通过以下参数设置端口:

--port=desired-port-number

如果您使用的是带有 dev_appserver 元素的 ant 目标,则可通过如下方式添加 port 属性指定端口参数。

<dev_appserver war="war" port="desired-port-number"/>

我可以在 App Engine 上使用 Google 数据 API 库吗?

可以,Google 数据 Java 客户端库可在 App Engine 中使用,但必须设置配置选项,以免发生运行时权限错误。请将以下内容添加到 appengine-web.xml 文件:

<system-properties>
  <property name="com.google.gdata.DisableCookieHandler" value="true"/>
</system-properties>

如果未包括以上内容,则可能会出现以下异常:

java.security.AccessControlException: access denied (java.net.NetPermission getCookieHandler)

Eclipse 插件不能正常运行。

如果您遇到 Google Eclipse 插件或 Eclipse 本身相关的意外问题,可从查看“错误日志”视图开始解决问题。在 Eclipse 菜单上选择“窗口”->“显示视图”->“其他...”,然后选择“常规”->“错误日志”。可双击各个条目以获取详细信息。此外,还可在名为 your-eclipse-workspace-directory/.metadata/.log 的文件中找到这些问题的文本版本。

我在试图上传时收到“指定的运行时无效”。

在试图使用 appcfg 更新应用程序时,服务器将检查您的帐户以查看您是否有权上传使用 Java 运行时的应用程序。如果您的帐户没有权限,将会显示下列错误消息:

java.io.IOException: Error posting to URL: http://appengine.google.com/api/appversion/...
400 Bad Request
Invalid runtime specified.

Unable to upload app: Error posting to URL: http://appengine.google.com/api/appversion/...
400 Bad Request
Invalid runtime specified.

要请求获得上传使用 Java 运行时的应用程序的权限,请在以下网址注册:http://appengine.google.com/promo/java_runtime。目前,访问权限仅限于前 10000 个注册的帐户。

appcfg 中的电子邮件参数似乎无法工作。

必须在进行 appcfg 操作之前指定电子邮件命令行参数。例如,下列命令是正确的:

appcfg.sh -e youremail@example.com update app_directory/war
分享到:
评论

相关推荐

    google app Engine for java中文api

    Google App Engine for Java为Java开发者提供了一个全面而强大的云计算平台,不仅支持常见的Java Web开发技术,还引入了一系列创新特性,如自动伸缩、易于部署等,极大地降低了构建高性能Web应用的技术门槛。...

    Google App Engine for Java 中文指南

    Google App Engine for Java 是一个平台,允许开发者使用Java语言构建并托管网络应用程序,该平台运行在Google的强大可扩展基础设施上。这个平台的核心特性是它的Java运行时环境,它基于Java 6虚拟机(JVM),并且...

    appengine-java-sdk-1.3.1 GoogleApp开发的SDK(Java版)

    标题中的"appengine-java-sdk-1.3.1"指的是Google App Engine的Java版本SDK,这是一个用于在Google云平台上开发和部署Java应用程序的工具包。这个SDK包含了运行和测试Google App Engine应用所需的所有组件,包括开发...

    google appengine sdk for java

    The App Engine SDK for Java includes a local development server as well as the tooling for deploying and managing your applications in App Engine. By downloading, you agree to be bound by the Terms ...

    Google App Engine for Java快速入门指南v1.2.0

    ### Google App Engine for Java 快速入门指南 v1.2.0 #### 1. AppEngine简介 **1.1 什么是Google App Engine?** Google App Engine (GAE) 是一款由Google提供的平台即服务(PaaS),允许开发者在其基础设施上...

    Google App Engine for Java 快速使用指南 - 中国科学技术大学

    ### Google App Engine for Java 快速使用指南 #### 1. App Engine 简介 ##### 1.1 什么是 Google App Engine? Google App Engine 是一项由 Google 提供的云计算平台服务,允许开发者在其基础设施上运行网络应用...

    初用Google App Engine for Java (org.apache.jasper.JasperExceptio; org.datanucleun)

    在提供的“App Engine参考资料.doc”文档中,可能包含了关于Google App Engine的详细教程、最佳实践、常见问题解答,或者是关于JasperException和DataNucleus使用时的注意事项。这份文档对于初学者来说是非常宝贵的...

    appengine-java-sdk

    **谷歌AppEngine与Java SDK详解** 谷歌AppEngine(Google App Engine)是一款强大的云计算平台,它允许开发者使用Java、Python、Go或PHP等语言构建并运行Web应用。AppEngine提供了全面的后端服务,包括数据库存储、...

    appengine-java-sdk-1.8.7.zip

    Java版本的App Engine,即我们讨论的"appengine-java-sdk-1.8.7.zip",是Google专门为Java开发者提供的工具包,用于在GAE上开发应用。 **主要组件和功能** 1. **SDK(Software Development Kit)**: SDK包含了开发...

    appengine-java-sdk-1.5.0.1.zip_JDK1.5.0.1_appengine-java-s_appen

    标题中的"appengine-java-sdk-1.5.0.1.zip"表明这是一个关于Google App Engine Java SDK的压缩包,版本号为1.5.0.1。App Engine是由Google提供的一个平台,允许开发者使用Java或Python等语言创建并运行web应用程序。...

    appengine-java-sdk-1.3.0 sdk java 第二部分

    利用免费的GAE(Google App Engine)建立强大的Blog(micolog)网站

    Google App Engine 入门教程

    综上所述,入门教程涉及到了安装与配置Eclipse开发环境、安装Google App Engine插件、创建和配置Web应用项目以及编译时的Java版本兼容性问题,这些知识点对于想要开始使用Google App Engine开发Web应用的开发者来说...

    Google App Engine plugin(JAVA) for Eclipse part1

    Google App Engine用于Eclipse的插件

    云端代码Google App Engine编程指南 高清带书签

    在谈论《云端代码Google App Engine编程指南》之前,我们需要先了解一下Google App Engine(GAE)平台的背景知识。Google App Engine(简称GAE)是由Google公司提供的一个无服务器(serverless)的云计算平台,该...

    Programming Google App Engine with Java-2015年英文原版,0积分

    ### 编程Google App Engine使用Java - 关键知识点解析 #### 一、书籍概述与背景 《Programming Google App Engine with Java》是一本详细介绍如何利用Google App Engine (GAE) 构建可扩展Java应用程序的专业书籍。...

    Google App Engine1.3.0 java sdk 第一部分

    1. **安装SDK**:下载并安装appengine-java-sdk-1.3.0_d9soft-part1压缩包,解压后配置环境变量,确保开发工具能够找到SDK路径。 2. **创建项目**:使用SDK提供的命令行工具或集成开发环境(IDE,如Eclipse或...

Global site tag (gtag.js) - Google Analytics