分享

App Engine一些需要记录的地方

 zybingliu 2009-11-19
 App Engine 使用多个网络服务器运行您的应用程序,并自动调整它所使用的服务器数量以便可靠地处理请求。指定的请求可能会传送到任何服务器,而且可能不是处理先前来自同一用户的请求的服务器。

App Engine 不支持向客户端发送数据,在应用程序中执行更多计算,然后发送更多数据。换句话说,App Engine 不支持响应单个请求“流式处理”数据。

请求处理程序对请求生成和返回响应的时间是有限的,通常约为 30 秒。达到限制时间后,请求处理程序将中断。

沙盒

为了使得 App Engine 能够跨多个网络服务器分配对于应用程序的请求,并且防止应用程序彼此干扰,请在受限制的“沙盒”环境中运行应用程序。在这种环境中,该应用程序可执行代 码;可存储和查询 App Engine 数据存储区中的数据;可使用 App Engine 邮件、网址抓取和用户服务;可检查用户的网络请求以及准备响应。

App Engine 应用程序无法:

  • 向文件系统写入。应用程序必须使用 App Engine 数据存储区存储永久数据。允许从文件系统中读取,并且可使用与该应用程序一起上传的所有应用程序文件。
  • 打开套接字或直接访问另一主机。应用程序可使用 App Engine 网址抓取服务分别向端口 80 和 443 上的其他主机发出 HTTP 和 HTTPS 请求。
  • 产生子进程或线程。必须在几秒钟内于单个进程中处理对应用程序的网络请求。响应时间很长的进程会被终止,以避免使网络服务器负载过重。
  • 进行其他类型的系统调用。

线程

Java 应用程序无法新建 java.lang.ThreadGroupjava.lang.Thread。这些限制也适用于利用线程的 JRE 类。例如,应用程序无法新建 java.util.concurrent.ThreadPoolExecutorjava.util.Timer。应用程序可以对当前线程执行操作,如 Thread.currentThread().dumpStack()

文件系统

Java 应用程序无法使用任何用来写入文件系统的类,如 java.io.FileWriter。应用程序可以使用诸如 java.io.FileReader 的类从文件系统中读取自己的文件。应用程序也可以通过例如 Class.getResource()ServletContext.getResource() 来访问作为“资源”的自身文件。

只有视为“资源文件”的文件才可以由应用程序通过文件系统访问。默认情况下,WAR 中的所有文件都是“资源文件”。您可以使用 appengine-web.xml 文件将文件从该组中排除出去。


反射

允许应用程序对自己的类进行完全、无限制的反射访问。它可以查询任何私有成员,使用 java.lang.reflect.AccessibleObject.setAccessible(),以及读取/设置私有成员。

应用程序还可以对 JRE 和 API 类(如 java.lang.Stringjavax.servlet.http.HttpServletRequest)进行反射。但是,它只可以访问这些类的公共成员,而不可以访问受保护成员或私有成员。

应用程序无法对不属于自己的任何其他类进行反射,也无法使用 setAccessible() 方法来避开这些限制。

自定义类载入

App Engine 完全支持自定义类载入。但是请注意,App Engine 将覆盖所有的 ClassLoader,以将相同的权限分配给所有由应用程序载入的类。如果执行自定义类载入,在载入不信任的第三方代码时要小心。


日志

应用程序可以使用 java.util.logging.Logger 将信息写入应用程序日志。您可以使用管理控制台查看和分析您的应用程序的日志数据,或使用 appcfg.sh request_logs 下载日志数据。管理控制台可以识别 Logger 类的日志级别,并且以交互方式显示不同级别的消息。

servlet 写入标准输出流 (System.out) 和标准错误流 (System.err) 中的所有内容都由 App Engine 捕捉,并记录在应用程序日志中。写入标准输出流的行将以“INFO”级别记录,写入标准错误流的行将以“WARNING”级别记录。任何记录到输出或错误 流的日志记录框架(如 log4j)都适用。但为了细化对管理控制台日志级别显示的控制,日志记录框架必须使用 java.util.logging 适配器。

App Engine Java SDK 在 appengine-java-sdk/config/user/ 目录中包含模板 logging.properties 文件。要使用它,请将该文件复制到 WEB-INF/classes 目录(或 WAR 中的其他位置),然后将系统属性 java.util.logging.config.file 复制到 "WEB-INF/classes/logging.properties"(或与应用程序根相关的任何所选路径)。您可以在 appengine-web.xml 文件中设置系统属性



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多