基于IBM Bluemix的数据缓存应用实例 一、创建project并加入Data Cache服务 二、创建本地Java webproject 三、打包与公布到Bluemix 四、验证效果 五、监视 IBM Data Cache for Bluemix 六、遇到的问题

         林炳文Evankaka原创作品。转载请注明出处http://blog.****.net/evankaka

          摘要:IBM® Data Cache for Bluemix 是快速缓存服务。支持 Web 和移动应用程序的分布式快速缓存场景。快速缓存服务使用数据网格 技术,您能够在当中存储键值对象。Data Cache 提供了一个业务就绪的内存数据网格 (IMDG)。其将数据放在接近逻辑的位置并随着业务扩展仍将其保留在此。非常easy使用并扩展现有应用程序的性能和可伸缩性。它能够帮助将冗余事务降到最低、提高响应时间并添加现有应用程序基础结构(支持重要应用程序)中的效率。对于添加的冗余。Data Cache 提供快速缓存中存储的数据副本。因此,万一掉线或停运,客户机应用程序仍可訪问快速缓存中的数据。

本文实例訪问:http://datacachetest.eu-gb.mybluemix.net/

BluxMix账号注冊:https://apps.admin.ibmcloud.com/manage/trial/bluemix.html?

cm_mmc=CMDeveloperGCG-_-Bluemix-_-****-_-onlineeventQ2

1、Bluemix个人中心创建projectwebproject

怎样创建project可看基于IBM Bluemix部署Java Web项目实战演练,这时创建后的project

基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题

2、加入Data Cache 服务

Data Cache 服务在远程利用数据网格的快速缓存功能并使您能够执行创建、检索、更新和删除操作。

能够进入到项目中,然后点击加入服务或API,然后搜索data,找到Data Cache就可以。

基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题

选择主要的套餐:

基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题


二、创建本地Java webproject

最后整个project文件夹例如以下:

基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题

1、创建一个Dynamic web Project

2、加入jar包

 WebContent/WEB-INF/lib 文件夹加入ogclient.jar 、json-org.jar 

这两个jar包下载地址,ftp://public.dhe.ibm.com/cloud/bluemix/datacache/

3、创建连接Data cache的代码

要使用 Data Cache 服务实例。可在 VCAP_SERVICES 环境变量中找到应用程序与服务实例进行通信所需的不论什么数据。您的应用程序须要包括所需的变量。以与 Data Cache 服务进行通信。

您能通过包括以下代码片段,以编程方式从 VCAP_SERVICES 环境变量获取变量 gridName、username 和 password,并放入代码。此代码片段将读取 VCAP_SERVICES 环境变量:

以下的代码放在本地eclipse是无法执行的,它得上传到Bluemixproject中才干够执行

public void jspInit() {
 		Map<String, String> env = System.getenv();//取得bluemix的当前project
 		String vcap=env.get("VCAP_SERVICES");//取得环境变量 
 		
 		String username=null;
 		String password=null;
 		String endpoint=null;
 		String gridName=null;
 			
        boolean foundService=false;
        if(vcap==null) {
        	System.out.println("No VCAP_SERVICES found");
        } else {
            try {
            	JSONObject obj = new JSONObject(vcap);
                String[] names=JSONObject.getNames(obj);
                if (names!=null) {
					for (String name:names) {
                    	if (name.startsWith("DataCache")) { //取得缓存API
             				JSONArray val = obj.getJSONArray(name);
             				JSONObject serviceAttr = val.getJSONObject(0);
             				JSONObject credentials = serviceAttr.getJSONObject("credentials");
             				username = credentials.getString("username");
             				password = credentials.getString("password");             							  
             				endpoint=credentials.getString("catalogEndPoint");
             				gridName= credentials.getString("gridName");
             				System.out.println("Found configured username: " + username);
             				System.out.println("Found configured password: " + password);
             				System.out.println("Found configured endpoint: " + endpoint);
             				System.out.println("Found configured gridname: " + gridName);		
             				foundService = true;
             				break;
             			}                                	                                 	                                 	                                         
                    }
				}
			} catch(Exception e) {}
 		}
        
 		if(!foundService) {
   			System.out.println("Did not find WXS service, using defaults");
 		}
 		
 		try {
 			
			ObjectGridManager ogm = ObjectGridManagerFactory.getObjectGridManager();
			ClientSecurityConfiguration csc=null;
			csc=ClientSecurityConfigurationFactory.getClientSecurityConfiguration();
			csc.setCredentialGenerator(new UserPasswordCredentialGenerator(username,password));
			csc.setSecurityEnabled(true);
			
			ClientClusterContext ccc = ogm.connect(endpoint, csc, null);
	
			ObjectGrid clientGrid = ogm.getObjectGrid(ccc, gridName);
			ogSession = clientGrid.getSession();
			
 		} catch(Exception e) {
 			System.out.println("Failed to connect to grid!");
 			e.printStackTrace();
 		}
}
事实上取得的环境变量在界面上例如以下

基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题

4、创建增、取、删除缓存的代码

5、合并代码

由于这里我们要实现的是从前台缓存数据,取数据等。所以后台就要实现将前台传过来的数据缓存。为此。能够将上面的代码合并使用。

新建一个.jsp文件例如以下:

dataCache.jsp


6、编写前台页面代码

这里前台使用ajax请求(不懂ajax可看这里Ajax实例解说与技术原理)到dataCache.jsp文件去缓存数据、取数据、删除数据。整个代码例如以下:

index.html


7、本地启动tomcat执行一下

基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题

确认页面显示没问题
这里你怎样输入数据。点击肯定会出问题,由于还没有部署到Bluxmix:
例如以下错误:
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题


三、打包与公布到Bluemix

1、打包本地war包。
直接在Eclipse中使用
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
然后选择文件夹:
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
看看最后的结果:
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题

注意:也可使用控制台下进行项目文件夹。然后输入
// 将当前文件夹打包成war包
jar cvf DataCacheTest.war */ .
只是,这种方法最后打包的war包笔者上传后启动失败了。

所以不建议使用这种方法。



2、上传war包到个人Bluemix中心

(1)、登陆
cf login
输入用户名、密码、选择工作空间
或者 直接cf login-u ling20081005@126.com -o ling20081005@126.com -s 工作空间名
邮箱记得换成您自己的。



(2)、上传war包

cf push DataCacheTest-p D:DataCacheTest.war -m 512M 
记得要指定空间大小512M
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
最后假设显演示样例如以下:
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
说明上传成功且执行成功

四、验证效果


输入内容,点击存储缓存内容
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
注意。最后显演示样例如以下才表示缓存存储成功,要稍稍等下(server毕竟在美国,速度返回会比較慢),显示put了才表示成功!

基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
当然,你也能够看日志:
比方上面的存储缓存的
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
日志在这里来看:
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
还有就是取缓存的:
页面上输入key。然后点击取缓存的按钮
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
删除缓存:
页面上输入key,然后点击删除缓存的按钮
基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题


五、监视 IBM Data Cache for Bluemix

以下是bluxmix提供的用于监视Data Cache的工具

基于IBM Bluemix的数据缓存应用实例
一、创建project并加入Data Cache服务
二、创建本地Java webproject
三、打包与公布到Bluemix
四、验证效果
五、监视 IBM Data Cache for Bluemix
六、遇到的问题
在将应用程序连接到 Data Cache 之后。您能够监视 Web 应用程序的快速缓存使用情况。单击 IBM Bluemix 仪表板的服务实例,以为您的应用程序显示图表。注意。得绑定服务,并启动程序后才会显示此内容!

已用空间
此图表包括基于 IBM 的服务计划的快速缓存容量总计的视图。

显示的容量总计包括数据网格中存储的数据的 1 个副本。您能够通过为您应用程序购买很多其它容量。一直添加限制。

吞吐量
此图表是 5 分钟内吞吐量的快照视图。您能够将此图表展开为更大的视图。显示 1 小时的吞吐量。
事务时间
此图表是 5 分钟内事务时间的快照视图。其以每毫秒的事务度量。您能够将此图表展开为更大的视图,显示 1 小时的事务时间。


命中率
此图表是快速缓存命中率的快照视图。

您能够将此图表展开为更大的视图。显示 1 小时的命中率。




六、遇到的问题

遇到的问题:
project第一次上传部署上去的时候。

尝试訪问部署的应用程序时,打开网址,笔者出现了以下消息:

404 Not Found:Requested route ('guesstheword.mybluemix.net') does not exist.
这似乎不正确劲。显然某处存在问题,并且这个问题似乎与在 Bluemix 上执行的应用程序相关,由于该应用程序能够在本地正常执行。

解决方法:
删除bluxmix上的project。又一次加入服务。然后又一次打包本地war包(最好通过eclipse 的expot方法)。最后再又一次上传就可以!