海外 谷歌 app 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
海外 谷歌 app api