`

java gae 简介

    博客分类:
  • gae
阅读更多

Google App Engine 可让您在 Google 的基础架构上运行您的网络应用程序。App Engine 应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展。使用 Google App Engine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务。

您可以使用 Google 企业应用套件通过自己的域名(例如 http://www.example.com/)提供应用程序。或者,您可以使用 appspot.com域上的免费域名来为您的应用程序提供服务。您可以与全世界的人共享您的应用程序,也可以限制为只有贵组织的成员可以访问。

应用程序环境

通过 Google App Engine,即使在负载很重和数据量极大的情况下,也可以轻松构建能安全运行的应用程序。App Engine 包括以下功能:

  • 动态网络服务,提供对常用网络技术的完全支持
  • 持久存储空间,支持查询、分类和事务
  • 自动扩展和负载平衡
  • 用于对用户进行身份验证和使用 Google 帐户发送电子邮件的 API
  • 一种功能完整的本地开发环境,可以在您的计算机上模拟 Google App Engine
  • 用于在指定时间和定期触发事件的计划任务

您的应用程序可在以下两个运行时环境之一中运行:Java 环境和 Python 环境。各环境均为网络应用程序开发提供标准协议和常用技术。

 

沙盒

应用程序在安全环境中运行,该安全环境仅提供对基础操作系统的有限访问权限。这些限制让 App Engine 可以在多个服务器之间分发应用程序的网络请求,并可以启动和停止服务器以满足访问量需求。沙盒将您的应用程序隔离在它自己的安全可靠环境中,该环境与网络服务器的硬件、操作系统和物理位置无关。

安全沙盒环境的限制示例包括:

 

  • 应用程序只能通过提供的网址抓取以及电子邮件服务访问互联网中的其他计算机。其他计算机只能通过在标准端口上进行 HTTP(或 HTTPS)请求来连接至该应用程序。
  • 应用程序无法向文件系统写入。应用程序只能读取通过应用程序代码上传的文件。该应用程序必须使用 App Engine 数据存储区、memcache 或其他服务存储所有在请求之间持续存在的数据。
  • 应用程序代码仅在响应网络请求或 cron job 时运行,且任何情况下必须在 30 秒钟内返回响应数据。请求处理程序不能在响应发送后生成子进程或执行代码

 

 

该环境下你的应用程序可执行代码;可存储和查询 App Engine 数据存储区中的数据;可使用 App Engine 邮件、网址抓取和用户服务;可检查用户的网络请求以及准备响应。

 

 

 

沙盒

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

App Engine 应用程序无法:

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

线程

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

文件系统

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

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

java.lang.System

禁用不适用于 App Engine 的 java.lang.System 类的功能。

以下 System 方法在 App Engine 中不起作用:exit()gc()runFinalization()runFinalizersOnExit()

以下 System 方法返回 nullinheritedChannel()console()

应用程序无法提供或直接调用任何本机 JNI 代码。以下 System 方法引发java.lang.SecurityExceptionload()loadLibrary()setSecurityManager()

反射

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

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

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

自定义类载入

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

JRE 白名单

对 Java 标准库(Java 运行时环境或 JRE)中类的访问仅限于 App Engine JRE 白名单中的类。

日志

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

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

import java.util.logging.Logger;
// ...

public class MyServlet extends HttpServlet {
    private static final Logger log = Logger.getLogger(MyServlet.class.getName());

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        log.info("An informational message.");

        log.warning("A warning message.");

        log.severe("An error message.");
    }
}

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 文件中设置系统属性,如下:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    ...

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties" />
    </system-properties>

</appengine-web-app>

Eclipse Google 插件新项目向导将为您创建这些日志记录配置伟建,并自动将它们复制到 WEB-INF/classes/。对于java.util.logging,必须设置系统属性才能使用此文件。

环境

所有系统属性和环境变量都是应用程序专有的。设置系统属性只会影响该属性的应用程序视图,不会影响到 JVM 的视图。

您可以在部署描述符中为应用程序设置系统属性和环境变量。

App Engine 在应用程序服务器上初始化 JVM 时设置以下系统属性:

  • file.separator
  • path.separator
  • line.separator
  • java.version
  • java.vendor
  • java.vendor.url
  • java.class.version
  • java.specification.version
  • java.specification.vendor
  • java.specification.name
  • java.vm.vendor
  • java.vm.name
  • java.vm.specification.version
  • java.vm.specification.vendor
  • java.vm.specification.name
  • user.dir


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics