Google App Engine Java功能和命名空间API

功能API

使用Capabilities API,您的应用程序可以检测特定API功能的停机和计划停机时间。 您可以使用此API来检测应用程序何时不可用,然后绕过它来减少应用程序的停机时间。

我们该如何处理,这是个折衷方案?

1.优雅:创建一个切入所有数据存储写入的方面,并检查其功能。 失败,出现友好错误消息。
2.不太优雅:在每次写入之前将功能检查添加到存储库代码中。 失败,出现友好错误消息。 3.快速:写过滤器,用于包装整个事务并检查数据存储写入。

我们如何在本地环境中对此进行测试?

1.没有API挂钩。 目前,我还无法找到或使用GAE Java代理来测试功能调用。
2.解决方案是使用模拟能力服务创建一个不同的版本,该服务能够返回CapabilityStatus.DISABLED标志并进行测试。

由于时间原因,我选择了快速方法。 稍后,我将尝试重新讨论此问题,并结合AspectJ或Google Juice来利用各个方面来解决这一明显的跨领域问题。

Map<Capability, Boolean> apis = new HashMap<Capability, Boolean>();public void init(FilterConfig filterConfig) throws ServletException {apis.put(Capability.DATASTORE, true); apis.put(Capability.MEMCACHE,  false);  
}public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletResponse httpResponse = (HttpServletResponse)res;HttpServletRequest httpRequest = (HttpServletRequest)req;CapabilitiesService service = CapabilitiesServiceFactory.getCapabilitiesService();for(Map.Entry api : apis.entrySet()) {if(api.getValue()) {CapabilityStatus status =  service.getStatus(api.getKey()).getStatus();if (status != CapabilityStatus.ENABLED) {log.warn("API " + api.getKey().getPackageName() + ":" + api.getKey().getName() + " has been disabled!");httpResponse.sendRedirect(NEPAL_RES_HOST + "/html/read-only.html");return; }}   }  chain.doFilter(req, res);  
}

命名空间API

在讨论此API之前,让我们介绍一下Multitenancy的概念。

名称空间API最引人注目的用途之一是多租户。 多租户是一种软件体系结构的名称,在该体系结构中,运行在远程服务器上的一个应用程序实例为许多客户端组织(也称为租户)提供服务。

多租户简化了租户的管理和供应。 您可以提供更简化的,定制的用户体验,还可以在单​​个数据库架构下聚合不同的数据孤岛。 结果,您的应用程序在扩展时变得更具可扩展性和成本效益

由于所有租户共享相同的数据库架构,因此数据变得更容易在租户之间进行隔离和分析。

多租户与多实例不同:

  • 在多实例中,为不同的客户组织设置了不同的软件实例。
  • 在多实例环境中,应用程序通常不了解客户的差异,而在多租户环境中,应用程序可用于隔离和分区数据。

Google App Engine中的Namespaces API使创建Google App Engine数据孤岛变得容易。 该API是通过名为“命名空间管理器”的新程序包实现的。

在名称空间管理器中设置名称空间时,这些API将获取当前名称空间并在全局范围内使用它。

任何App Engine请求都可以访问任何名称空间,而使应用程序可以跨多个名称空间实施访问控制策略。 在这种方法中,应用程序负责设置工作名称空间。

支持名称空间的API:

1.数据存储
2. Memcache
3.任务队列

使用Namespaces API,只需为每个租户指定一个唯一的命名空间字符串,就可以在租户之间轻松地对数据进行分区。 您只需使用“名称空间管理器”为全局每个租户设置名称空间。 默认情况下,启用了名称空间的API始终使用当前名称空间。

在数据存储区中,名称空间管理器会将名称空间应用于每个键和查询对象。

没有Java API可以显式设置键或查询的名称空间,所有这些操作都是通过名称空间管理器进行的。

参考:我们的JCG合作伙伴 ReflectiveThought的 Google App Engine Java功能和命名空间API 。

相关文章:

  • Java Code Geeks Andygene Web原型
  • 每个程序员都应该知道的事情
  • Spring MVC开发–快速教程
  • SmartGWT入门,提供出色的GWT界面
  • GWT 2 Spring 3 JPA 2 Hibernate 3.5教程

翻译自: https://www.javacodegeeks.com/2011/04/app-engine-capabilities-namespaces-api.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

破解key file时经常用到的几个API函数及其用法

CreateFile函数 ================================================================================== CreateFile: Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, …

PHP计划任务之关闭浏览器后仍然继续执行的函数

函数名称&#xff1a;ignore_user_abort 本函数配置或取得使用端连接中断后&#xff0c;PHP 程序是否仍继续执行。默认值为中断连接后就停止执行。在 PHP 配置文件中 (php3.ini/php.ini) 的 ignore_user_abort 选项就是配置处。本功能在 PHP 3.0.7 版之后才开始提供。 官方说明…

node--更新数据库问题

昨天测试blog的comment功能&#xff0c;在新增comment相关的代码之后&#xff0c;重启应用&#xff0c;出现Cannot call method forEach of undefined 。反复核对代码&#xff0c;都没发现异常&#xff0c;最后将数据库文件删除之后&#xff0c;再重启数据库&#xff0c;一切正…

U盘做完启动盘,如何恢复原始容量

&#xff08;1&#xff09;右击“我的电脑”&#xff0c;选择“管理”选项&#xff0c;之后选择“磁盘管理”&#xff0c;查看自己U盘的索引&#xff0c;如&#xff1a;Disk 1&#xff08;2&#xff09;在运行窗口&#xff0c;输入cmd&#xff0c;回车&#xff0c;出现Dos运行环…

GWT Spring和Hibernate进入数据网格世界

利用Infinispan数据网格的功能最大化Hibernate性能。 一个GWT &#xff0c; Spring &#xff0c; JPA &#xff0c; Hibernate &#xff0c; Infinispan集成教程。 在本教程中&#xff0c;我们将讨论如何将Infinispan用作Hibernate二级缓存提供程序。 Infinispan是JBoss缓存的…

记对一个key file crackme的破解

crackme下载地址: http://kssd.pediy.com/tutorial/exercise/section04/chap6-1-4-03.zip ------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------…

第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)

UNION 等集合操作符&#xff1a;UNION 等以第一个 SELECT 的 列明 作为 整个结果集的列明&#xff0c;整个结果集 唯一认可的 唯一逻辑处理阶段 是 ORDER BY 这个意思是说 只有 ORDER BY 是对整个结果集作用的&#xff0c;其它都操作都作用在 UINON 两侧的 子集合中。EXCEPT 操…

Java Code Geeks Andygene Web原型

大家好&#xff0c; 我们很高兴地宣布&#xff0c;一组Maven原型的第一个版本已经发布&#xff01;&#xff01;&#xff01; 该集合的目的是提供可以满足各种开发需求的项目模板。 您可以在本文末尾找到JCG路线图。 该第一个发行版旨在提供项目模板-Web应用程序的体系结构。 …

关于如何用od反汇编win32 控制台程序

*********************************************************** 如何用od反汇编win32 控制台程序(类似dos程序&#xff09;呢&#xff1f;*********************************************************** 注&#xff1a;od是用来调试win32程序的 1.反编译win32 控制台程序&…

Chrome/Chromium HTML5 video 视频播放硬件加速

Chromium站点上有个大致的框图。描写叙述了Chromium的video在各个平台 - 包含Android - 上是怎样使用硬件资源来做视频编解码加速的&#xff1a; 而依据Android Kitkat上的Chromium代码分析&#xff0c;HTML5 video播放硬件加速&#xff0c;终于是使用MediaCodec.java来利用本地…

.net mvc结合微软提供的FormsAuthenticationTicket登陆

一、Web.config <system.web><compilation debug"true" targetFramework"4.5" /><httpRuntime targetFramework"4.5" /><authentication mode"Forms"><forms loginUrl"/Sign/SignIn" defaultUrl…

vc6.o--fatal error C1010错误的解决

当编译c文件时&#xff0c;出错信息为&#xff1a;fatal error C1010: unexpected end of file while looking for precompiled header directive 解决方案&#xff1a; 1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的&#xff0c;则AltF7进入当前工程的…

具有Java 7中自动资源管理功能的GC

这篇文章简要概述了Java 7中引入的称为自动资源管理或ARM的新功能。 文章探讨了ARM如何减少开发人员为有效释放分配的资源的JVM堆而必须编写的代码。 Java编程语言中编程的最甜蜜之处之一是对象取消分配的自动处理。 在Java世界中&#xff0c;这通常被称为垃圾收集。 基本上&am…

PHP学习笔记(六)

《Wordpress 50个过滤钩子》 1-10 过滤钩子是一类函数&#xff0c;wordpress执行传递和处理数据的过程中&#xff0c;在针对这些数据做出某些动作之前的特定点执行。本质上&#xff0c;就是在wordpress输出之前&#xff0c;将对浏览数据做出反应。 添加过滤钩子&#xff1a; ad…

JS 操作 radio input(cc问卷管理)

1、选中特定的单选按钮 function showDetail(content){$("input[name^radio]").removeAttr("checked");for(var i0;i<content.length;i){$("#radio"(i1)content.substr(i,1)).attr("checked","checked");} }2、手动添加问…

国内外著名黑客杂志

国外黑客杂志&#xff1a; 《phrack》黑客杂志 http://www.phrack.org 《phrack》创刊于80年代&#xff0c;是世界级的顶级黑客杂志&#xff0c;每年只有一期&#xff0c;现已出了65期&#xff0c;国人似乎至今只有三人在上面发表发表文章&#xff0c;三人好像都是绿盟的人&…

团体项目随笔

我们的团体项目不仅在在课堂上讨论了很久&#xff0c;课后也是几经讨论。每个人都有不同的想法我特别想做一个基于Web编写的驴客网&#xff0c;因为基于个人需求&#xff0c;在最终的讨论中被毙掉。 我们组最终的的讨论结果是写个游戏&#xff0c;关于游戏的发展&#xff0c;这…

Apache Lucene拼写检查器的“您是不是要”功能

Google的“您是不是要”功能 在上一篇文章中对Lucene进行了介绍之后 &#xff0c;现在是时候提高它&#xff0c;创建一个更复杂的应用程序了。 您肯定最熟悉Google的“您是不是要”功能&#xff08;其他搜索引擎也支持此功能&#xff09;。 这是一个例子&#xff1a; Lucene …

Android-做个性化的进度条

1.案例效果图 2.准备素材 progress1.png(78*78) progress2.png(78*78) 3.原理 采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的)。另一张是进度条的图片(一般采用颜色比较深的图片)。进度在滚动时&#xff1a;进度图片逐步显示&#xff0c;背景图片逐…