一、前言
近年来IT界风云际会,各种新概念如大数据、云平台、虚拟化等,如雨后春笋般层出不穷。而云平台,可以说是近些年来引领时代新潮的边缘概念之一,各大厂商竞相推出各种云产品,抢占云市场高地。近期,IT百年老厂IBM也推出了其花费重金打造的基于CloudFoundry开放标准的云平台Bluemix。本文就旨在从一位普通Java开发者角度,尝鲜Bluemix云平台及其提供的Cloudant服务,快速构建并部署一款Java小程序“微博影响力分析器”。
二、“微博影响力分析器”小程序的介绍
1、什么是“微博影响力分析器”小程序?
“微博影响力分析器”是从一款由IBM jStart提供的Bluemix演示程序Java Twitter Influencer Analyzer演化而来的小程序。它使用新浪微博替换了原程序中的Twitter、用百度地图替换了Google Map,并且中文化了程序界面,使其更本土化,更平易近人。
本程序的主要功能很简单,通过微博开放平台接口,读取并计算当前登录的微博用户的发博数量、转发数量及粉丝数量等信息,给当前微博用户的“影响力”评个分数,当然,评价的分数结果仅供娱乐。评价结果页面上还会显示当前用户最新发表的10条微博,并且能将微博地址信息显示在下方的百度地图上。
图 1、微博影响力分析器首页
图 2、微博影响力分析器结果页
图 3、结果页上带地理位置的微博展示
当前用户可以选择将评分结果保存至后台数据库,以供查阅。如果数据库中已有当前用户的评分结果,该用户的分数将被更新。后台数据库中保存的信息可以被单条或批量全部删除。已保存在数据库中的数据亦可以列表的形式查阅。
图 4、数据库中保存的数据查询页
2、“微博影响力分析器”程序的结构。
本程序主要由3个页面和6个Servlet组成,如下图所示。其中3个页面主要负责提供微博登录按钮、显示分数结果和数据库中的数据,6个Servlet中的2个(WeiboLoginServlet和DispCalc)主要负责微博开放平台登录和影响力分数计算,其余的4个主要负责数据库的CRUD操作。
图 5、程序结构图
本程序与微博开放平台API的互动使用了微博开放平台官方Java SDK。地图使用了百度地图javascriptAPI大众版。后台数据库则使用了由Bluemix提供的Cloudant服务。Cloudant提供了标准的JSON on RESTful API接口(请参阅:CloudantCRUD API入门指导),本程序使用Apache HttpComponents的Fluent API和Jackson的Streaming API实现了Java中的HTTP和JSON的操作并以此来与Cloudant的RESTful API交互。
Cloudant是由IBM提供的一款基于Apache CouchDB的NO-SQL数据库服务平台(Database as a Service)。对于开发者来说,使用平台服务来代替使用产品自建数据库就意味着不需要关心数据库的搭建、配置和维护,这能极大地提高开发者的工作效率,免去一些开发无关的繁复工作。
图 6、Cloudant中保存的数据
三、像一位开发者一样使用Eclipse发布“微博影响力分析器”
1、需要准备些什么?
为了保持简洁,在此略去“微博影响力分析器”代码中的细节,对此有兴趣的同学可以到我的Github上查阅源代码。
此外,您还需要准备JavaEE版Eclipse作为IDE。您可以在Eclipse官方网站下载Eclipse IDE for Java EE Developers版。之后请使用Eclipse自带的EGit来Clone Github上的源代码,或者下载源代码后导入至Eclipse中。
因为程序使用了微博开放平台接口和百度地图接口,除了准备Eclipse和导入源代码以外,在发布程序前您还需要提前预备微博开放平台的App Key、App Secret和百度地图的密钥(AK)才能正常使用这两个第三方服务。
微博开放平台的App Key需要您有微博账号并成为微博开发者,然后成功创建应用才能获得,更详细的说明请阅读微博官方的微博API新手指南。请您预先准备好微博的App Key和App Secret,稍后将会用到。
图 7、微博的App Key和App Secret
百度地图的接口也需要密钥才能正常使用。您需要有百度账号并成为开发者后才能获得。更详细的程序密钥申请说明请阅读官方开发指南中的版本说明及申请API ak一节。请您预先准备好百度地图的密钥(AK),稍后也将会用到。
图 8、百度地图的密钥(AK)
2、给Eclipse添上Bluemix的翅膀。
在Eclipse中导入完工程后,还需要为Eclipse装上Bluemix插件才能发布。给Eclipse装Bluemix的插件是一件很轻松的事情,只需要点击Eclipse菜单栏中的Help,在其中找到并打开Eclipse Marketplace。
图 9、Help菜单中的Eclipse Marketplace
然后在Eclipse Marketplace中搜索Bluemix,找到IBM Eclipse Tools for Bluemix并点击Install即可安装。
图 10、Eclipse Marketplace中的IBM EclipseTools for Bluemix
至此,您所需要的开发环境就已全都准备就绪了。没有另外的什么服务器、数据库需要安装和配置,因为这一切都已经在Bluemix云上给您预备好了,是不是特别简单?接下来我们就像一位已经编程完的JavaEE的开发者一样,将写完的程序发布到服务器上去运行。
3、像开发者一样发布“微博影响力分析器”到Bluemix上。
作为一位有经验的JavaEE开发者,相信您一定在Eclipse中配置并使用过Apache的Tomcat或之类的JavaEE服务器,并且对如何发布一个工程驾轻就熟。而使用Bluemix,您会发现发布一个工程和发布到其他JavaEE服务器上的操作几乎一致,对于一位有经验的开发者来说,极易上手。
首先在Eclipse的Servers窗口中右击新建一个服务器。在New Server对话框中找到IBM文件夹,选择其中的IBM Bluemix,然后点击Next。
图 11、新建服务器
图 12、新建IBM Bluemix服务器
此时我们需要为Bluemix服务器指定账号。在Email和Password输入框中分别输入您Bluemix的账号和密码,并且确保URL下拉菜单中选择的是IBM Bluemix。完成后点击Next。
图 13、指定Bluemix账号密码
成功登陆后,对话框会显示您Bluemix账号中的组织和空间。作为一名一般的开发者来说,并无特别指定组织和空间的需求,选择默认的dev即可。然后点击Next。关于Bluemix中的组织和空间的问题,请参阅官方文档,本文不再展开。
图 14、设置组织和空间
然后就出现了Add and Remove界面。如果您使用Eclipse发布过工程,一定很熟悉这个界面。只需将要发布的工程(此时我们需要发布的工程是weibo-influence-analyzer)移动至右侧即可。完成后点击Finish,被指定的工程就会被发布至服务器上,此时从Servers窗口中可以看到已经发布的工程显示在服务器下,且服务器的状态为Republish,说明工程还未但即将被发布至服务器上。
图 15、添加和移除工程
图 16、Republish状态下的服务器
然后Eclipse就会开始在后台自动发布工程。稍后会弹出如下图所示的对话框要求您配置一些必须的参数。第一个需要配置的是程序名称。程序名称可以由大小写英文字母、数字、横杠或下划线组成,不可以有其他的特殊字符。一般情况下使用默认的即可。另外,建议您不要使用带下划线的程序名称,因为这将会妨碍您远程调试应用。关于如何远程调试Bluemix上的应用将在稍后为您详细说明。设置完成后点击Next。
图 17、设置程序名称
下一步需要设置程序的域名和内存使用量。Bluemix为您准备了mybluemix.net作为程序的主域名,并且使用程序名称作为子域名。内存用量则默认设置了512MB。一般情况下无需更改这些设置,直接点击Next即可。
图 18、设置域名与内存用量
下一步需要为程序配置所使用的服务。在下面这个对话窗口的列表中列出了您在Bluemix上创建的所有服务。您可以直接勾选已创建的服务来绑定到您将要发布的程序上。在这里我们需要新建一个CloudantNoSQL数据库服务来作为“微博影响力分析器”的后台数据库。点击列表右上角带加号的按钮,打开Add Service界面来创建Cloudant NoSQLDB服务。
图 19、新建服务
Add Service对话框的列表中列出了Bluemix上所有可用的服务。我们只需在Fliter中输入“cloudant”就可过滤出cloudantNoSQLDB服务。选择它并点击Finish回到程序设置对话框。
图 20、新建cloudantNoSQLDB服务器
回到程序设置对话框后您可以看到刚才新建的cloudantNoSQLDB数据库服务已经新建并且已被勾选。点击Next来设置环境变量。
图 21、绑定新建的服务
在环境变量中,我们需要分别设置三个值,分别是上文提到的微博App Client、App Secret和百度地图密钥(AK)。点击右侧New按钮,分别输入对应的Variable和Value。然后点击Finish即可开始发布应该。Variable的名称和对应的值如下表所示。
图 22、设置环境变量
Variable名 | 对应Value |
WEIBO_CLIENT_ID | 微博App Client |
WEIBO_CLIENT_SERCRET | 微博App Secret |
BAIDU_MAP_AK | 百度地图AK |
在设置完上述内容并点击Finish后,可以在Servers窗口中看到服务器的状态变成了“Publishing...”,说明此刻Eclipse已经开始发布工程了。并且在Console窗口中可以看到程序被发布时系统打出的log。
图 23、发布中的Bluemix服务器
图 24、程序发布时显示的log
在程序被成功发布至服务器上之后,您可以在Servers窗口中看到服务器的状态显示为“Started, Synchronized”。并且您发布的程序在服务器下方显示为同样的状态。此时便可打开浏览器,输入前面配置的应用程序地址来运行您的程序了。
图 25、发布完成
图 26、使用浏览器访问应用程序
此时登录Bluemix的仪表板,可以看到刚才发布的程序已经显示在应用程序列表中,刚才新建的CloudantNoSQLDB也已经显示在服务列表中。并且程序的状态显示为绿灯“正在运行”,说明程序正在健康运行中。
图 27、Bluemix仪表板上显示已发布的程序
图 28、Bluemix仪表板上显示已新建的服务
4、远程调试Bluemix上的应用程序。
上文讲述了如何使用Eclipse插件发布程序到Bluemix上去,接下来将详细说明如何在Eclipse中远程调试应用程序。
作为一位有经验的JavaEE开发者,您一定知道Java程序的开发过程不外乎搭建开发环境、编写程序、编译代码、发布至开发服务器、在开发环境中测试这几个步骤。多亏了Eclipse的自动编译及发布功能,一般我们不需要特别去编译代码,这个步骤一般情况下是自动完成的。并且程序一旦成功发布到了测试服务器上,如果代码有所改动,我们也不需要特别去重新编译后再发布,这也是由Eclipse自动完成的。
而把程序发布到Bluemix上就和发布到其他JavaEE服务器上的操作几乎一致,对于一位有JavaEE开发经验的开发者来说,很快就能上手。且如果代码有所改动,Eclipse的自动编译及发布功能在Bluemix上也仍然有效,Eclipse会自动帮您编译并且发布到Bluemix上。考虑到Bluemix的云平台的本质,可谓是出乎意外的方便快捷。
并且Bluemix也像其他JavaEE服务器一样可以远程调试。启动远程调试的方法很简单,只需右键点击需要调试的应用程序,选择Enable Application Debug即可进入远程调试模式。Eclipse会开始建立远程调试会话链接,链接建立成功后便可以像一般JavaEE服务器一样调试了。注意,如果应用程序名称中带有下划线的话,将无法进行远程调试。另外,进入调试模式的应用程序也会自动进入开发模式,稍后讲述什么是开发模式。
图 29、启用应用程序调试
图 30、远程调试Bluemix应用程序
5、启用Bluemix上应用的开发模式。
如果您的应用程序尚未进入开发模式,并且您多修改几次程序让Eclipse自动发布到Bluemix上,您就会发现默认情况下无论您的修改量有多少,每次自动发布时,程序都会被全量重新发布并重启一次,耗时相当的长,造成了不必要的时间浪费。对此,您可以对程序启动开发模式(Development Mode)。在开发模式下,程序会被增量发布(Incremental Publish),也就是说只有被修改的文件才会被推送,这样每次自动发布耗时会比全量发布少许多,能明显感觉到自动发布的速度加快了。
图 31、启用开发模式
有关Eclipse的Bluemix插件的更多说明,请阅读Bluemix官方文档。
四、结语
前面我们尝试了作为一位普通的Java开发者,利用Bluemix云平台,在其上发布并调试我们的小应用程序。从开发者的角度来说,Bluemix云平台的出现加快了传统应用的开发节奏。它减少了开发者搭建环境、配置服务器等与开发几无关系的工作,将开发者从繁复冗余的工作中释放出来,极大地释放了开发者的能动性,从而增加了开发效率,加快了应用程序开发的迭代周期。
除了上文所述的Eclipse插件外,Bluemix还能结合IBM DevOps服务一起使用,能真正地做到在线编写、编译和发布,除了浏览器外不用配置其他任何环境,无需安装配置服务器或后台数据库,因为这一切都有Bluemix和IBM DevOps为您在云端准备好了。关于Bluemix和IBM DevOps服务一起使用的详细说明请参阅此文:Getting Started with IBM Bluemixand DevOps Services using Java。
Bluemix还有更多强大的功能正等待着您的探索。