Google App Engine Java功能和命名空间API
使用Capabilities API,您的應(yīng)用程序可以檢測特定API功能的停機(jī)和計劃停機(jī)時間。 您可以使用此API來檢測應(yīng)用程序何時不可用,然后繞過它來減少應(yīng)用程序的停機(jī)時間。
我們該如何處理,這是個折衷方案?
1.優(yōu)雅:創(chuàng)建一個切入所有數(shù)據(jù)存儲寫入的方面,并檢查其功能。 失敗,出現(xiàn)友好錯誤消息。
2.不太優(yōu)雅:在每次寫入之前將功能檢查添加到存儲庫代碼中。 失敗,出現(xiàn)友好錯誤消息。 3.快速:寫過濾器,用于包裝整個事務(wù)并檢查數(shù)據(jù)存儲寫入。
我們?nèi)绾卧诒镜丨h(huán)境中對此進(jìn)行測試?
1.沒有API掛鉤。 目前,我還無法找到或使用GAE Java代理來測試功能調(diào)用。
2.解決方案是使用模擬能力服務(wù)創(chuàng)建一個不同的版本,該服務(wù)能夠返回CapabilityStatus.DISABLED標(biāo)志并進(jìn)行測試。
由于時間原因,我選擇了快速方法。 稍后,我將嘗試重新討論此問題,并結(jié)合AspectJ或Google Juice來利用各個方面來解決這一明顯的跨領(lǐng)域問題。
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最引人注目的用途之一是多租戶。 多租戶是一種軟件體系結(jié)構(gòu)的名稱,在該體系結(jié)構(gòu)中,運(yùn)行在遠(yuǎn)程服務(wù)器上的一個應(yīng)用程序?qū)嵗秊樵S多客戶端組織(也稱為租戶)提供服務(wù)。
多租戶簡化了租戶的管理和供應(yīng)。 您可以提供更簡化的,定制的用戶體驗(yàn),還可以在單??個數(shù)據(jù)庫架構(gòu)下聚合不同的數(shù)據(jù)孤島。 結(jié)果,您的應(yīng)用程序在擴(kuò)展時變得更具可擴(kuò)展性和成本效益
由于所有租戶共享相同的數(shù)據(jù)庫架構(gòu),因此數(shù)據(jù)變得更容易在租戶之間進(jìn)行隔離和分析。
多租戶與多實(shí)例不同:
- 在多實(shí)例中,為不同的客戶組織設(shè)置了不同的軟件實(shí)例。
- 在多實(shí)例環(huán)境中,應(yīng)用程序通常不了解客戶的差異,而在多租戶環(huán)境中,應(yīng)用程序可用于隔離和分區(qū)數(shù)據(jù)。
Google App Engine中的Namespaces API使創(chuàng)建Google App Engine數(shù)據(jù)孤島變得容易。 該API是通過名為“命名空間管理器”的新程序包實(shí)現(xiàn)的。
在名稱空間管理器中設(shè)置名稱空間時,這些API將獲取當(dāng)前名稱空間并在全局范圍內(nèi)使用它。
任何App Engine請求都可以訪問任何名稱空間,而使應(yīng)用程序可以跨多個名稱空間實(shí)施訪問控制策略。 在這種方法中,應(yīng)用程序負(fù)責(zé)設(shè)置工作名稱空間。
支持名稱空間的API:
1.數(shù)據(jù)存儲
2. Memcache
3.任務(wù)隊列
使用Namespaces API,只需為每個租戶指定一個唯一的命名空間字符串,就可以在租戶之間輕松地對數(shù)據(jù)進(jìn)行分區(qū)。 您只需使用“名稱空間管理器”為全局每個租戶設(shè)置名稱空間。 默認(rèn)情況下,啟用了名稱空間的API始終使用當(dāng)前名稱空間。
在數(shù)據(jù)存儲區(qū)中,名稱空間管理器會將名稱空間應(yīng)用于每個鍵和查詢對象。
沒有Java API可以顯式設(shè)置鍵或查詢的名稱空間,所有這些操作都是通過名稱空間管理器進(jìn)行的。
參考:我們的JCG合作伙伴 ReflectiveThought的 Google App Engine Java功能和命名空間API 。
相關(guān)文章:
- Java Code Geeks Andygene Web原型
- 每個程序員都應(yīng)該知道的事情
- Spring MVC開發(fā)–快速教程
- SmartGWT入門,提供出色的GWT界面
- GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
翻譯自: https://www.javacodegeeks.com/2011/04/app-engine-capabilities-namespaces-api.html
總結(jié)
以上是生活随笔為你收集整理的Google App Engine Java功能和命名空间API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单的Twitter:Heroku上的P
- 下一篇: Java Code Geeks Andy