Archive for the ‘IBM’ Category

上手Bluemix (3)

Tuesday, August 19th, 2014

截止上篇文章,我们已经在Bluemix上构建了一个可以连接Bluemix数据库服务、基于WebSphere Liberty Server的Java Web应用了。我们提到Connections Blogs的老版本(相比新版本对WebSphere Application Server (WAS)已经是最小的了)跑起来还是会有很多错误,大致总结一下:

1) WAS专用API. 如做Basic Authentication用的是WAS Programmatic Login的API;

2) 和WAS环境相关的配置文件。代码中需要到WAS环境下特定的目录找某些配置文件;

3) 不同Web container的实现差异。在移植过程中发现对于URL的最后一个斜杠/,在WAS和Liberty中处理是不同的;

4) 文件系统。Blogs会把上传附件保存在文件系统,目前我也不清楚Bluemix上给我的空间大小(应该是1G)和位置。通过测试说明至少服务器端代码是可以在Liberty安装目录下创建目录和文件的;

5) Directory service。这是Connections自己的code,根据用户配置调用WAS VMM API从Federated Repository,或者Connections Profiles里查找用户详细信息。这两个数据源在Bluemix上都没有,所以需要更新一些代码跳过用户同步过程。

在disable了Basic Authentication、Connections navbar、Directory service和Lucene index后,Blogs最终可以跑在Bluemix上。

最后的问题是用户登录,我没打算搞个LDAP,只要创建些简单的测试用户就可以了。在Liberty里很容易做到,通过在server.xml中添加用户定义和角色定义,如下:

定义用户:

<basicRegistry id=”basic” realm=”WebRealm”>
      <user name=”ajones1″ password=”jones1″/>
      <user name=”ajones2″ password=”jones2″/>
      <user name=”ajones3″ password=”jones3″/>
      <user name=”ajones4″ password=”jones4″/>
      <user name=”ajones5″ password=”jones5″/>
      <user name=”ajones6″ password=”jones6″/>
</basicRegistry>

定义用户在应用中的role:

<application type=”war” id=”blogs” name=”blogs” location=”blogs.war”>
    <application-bnd>
        
        <security-role name=”person“>
            <special-subject type=”ALL_AUTHENTICATED_USERS” />
        </security-role>
        <security-role name=”admin“>
            <user name=”ajones1″/>
        </security-role>
        
    </application-bnd>
</application>

“ALL_AUTHENTICATED_USERS”是个特殊的保留角色,对应于WAS的相同角色,用来指定所有已登录用户。测试中我发现security-role的映射有bug,不是每次调用request.isUserInRole(role)都会返回正确的结果。

接下来的事情很关键 – 如何把一份自定义的server.xml文件上传到server端?答案:你做不到。目前找到的解决方案是按照Bluemix的buildpack去部署应用,即同时上传Liberty的Runtime和应用程序。利用Eclipse的Bluemix插件很容易实现:

1) 下载Eclipse Bluemix插件。在Eclipse Marketplace搜索‘bluemix’,找到后安装:

bluemix-plugin-install

2) 安装后右键在Server Tab里点New Server,选择IBM Bluemix,开始配置:

config-bluemix-plugin

domain

bind-db

3) 配置完成后,可以直接用Publish选项发布整个Runtime和application。

upload

<终>

上手Bluemix (2)

Friday, August 15th, 2014

上次说到在Bluemix新建一个简单的Java webapp,现在这个Java应用需要访问数据库服务来存取数据,我们来看看在Bluemix上该如何使用和管理数据库服务。首先,Bluemix上有多种数据库服务供选择,有传统的关系型数据库也有NoSQL (包含了IBM收购的Cloudant),因为Connections本身支持包括DB2, Oracle和SQL Server,所以我们选择基于IBM DB2的数据服务。

可以从Dashboard的Service tab或者直接从Catalog进入服务选择界面,选择Data Management -> SQL Database:

database

创建时需要指定服务名(注意这个名字既不是数据库名也不是schema名,仅仅是个标示符),同时如果应用已经创建好,可以在创建数据库服务的时候直接绑定应用。

create-db-instance

创建好数据库服务后回到Dashboard,可以看到名下有一个应用和一个服务 – APPS(1) & SERVICES(1) – 移植Connections Blogs需要的全部组件都齐了。

db-service

在创建并绑定数据库服务后,点击应用的Runtime选项,可以看到新生成的环境变量。这里包含了有关数据库连接的全部信息 – 注意所有的配置信息都无法更改,一旦重新创建数据库服务,数据库名、用户名、密码等都会随之改变。这些所谓’环境变量‘实际上是保存在Liberty的server.xml中,这样app在启动的时候可以正确的找到JNDI data source。

env_variable

接下来,我们需要创建数据库schema,tables,indexes…点击进入添加好的数据库服务,点’Launch’按钮会打开一个数据库管理界面,点击‘Work with Database Objects’就可以开始创建数据对象了。Bluemix的数据库服务不支持用本地的数据库客户端直接连接,所有的数据管理操作都必须在Web界面上完成。

schema

大家注意到上图有个名叫‘REUNOBRW’的schema,它和上上图里的环境变量中的数据库用户名是一致的。之所以要手工创建‘REUNOBRW’ schema的原因在于我们要移植的Blogs早期版本(1.0.2)里,所有的数据库访问代码是仅有table名,不带schema名的,如下:

<select id=”getWebsiteById” parameterClass=”string” resultMap=”Website” >
      SELECT * FROM website WHERE id = #value#
</select>

在Bluemix环境中,这样的调用会自动在前面以用户名作为schema名。除非我们修改全部的SQL把它们都带上schema名,否则只能创建一个和用户名同名的schema。这个做法虽然可以工作,但一旦数据库服务重建schema也必须要重建,作为测试可以但作为生产环境的开发这样是不可取的。创建好schema后,可以创建table等对象了,点击Run DDL来指行数据库命令(注意不是所有的SQL都支持,比如我们无法创建table space)。下面是在创建好tables、运行应用后查询用户表的例子 –

run-sql现在可以把Connections Blogs build成一个.war文件,通过cf push到Bluemix上,它可以正确的连接数据库,但界面上有很多错误,绝大部分是因为已有代码是在WebSphere Application Server下测试运行的,在Liberty环境下存在问题。另外也没有办法登录,因为我们还没有定义用户库。下篇文章我们将继续讨论应用的迁移。

上手Bluemix (1)

Thursday, August 14th, 2014

之前写了个短文,说把IBM Connections Blogs移植到了Bluemix上。今天花点时间,写写具体的过程。对于不熟悉Bluemix的人,我一句话解释一下:Bluemix是IBM的PaaS平台,供开发者构建在云上跑的应用,而Bluemix本身是架在SoftLayer (IBM IaaS)之上的。

先来看看Bluemix长啥样。对于首次访问的用户,基本上唯一有用的界面就是Catalog了,里面列举了Bluemix提供的runtime、service和各种组件,大家的第一个应用就从这里开始。

catalog

IBM Connections是基于Java的Web应用,所以我们选择的Runtime是Liberty for Java(一个约20MB左右的Java Web容器)。输入基本参数,一个缺省的Webapp和一个WebSphere Liberty Profile的instance就产生了。这个webapp的首页是显示当前应用的一些运行时参数。

liberty当创建好第一个应用后,Dashboard就成了常用的视图了,应用的启/停、监控、服务的创建和绑定都要在这个界面上完成。

quickstart

对于新手来说,’View Quick Start’按钮很有帮助,它指导开发者之后需要做的事情,包括安装cf工具来做应用上载,以及如何登陆和访问。我一开始就是按照这个步骤在写了Hello World之后把应用打包后用cf push到Bluemix上的。

有了第一个可以运行的demo webapp后,可以从Dashboard中把这个应用打包下载到本地,展开后用Eclipse在本地继续开发,完成后重新打包上传。多尝试几次后,就可以熟练的更新、上传应用了。需要注意的是,应用更新的最小粒度是.war(至少今天我都没有找到文件级别的更新),也就是说即使要改一个JSP文件也需要完整打包后上传。我试图找到类似SSH的方式允许远程文件上传,但最终没有找到。开发者能够在文件级别范围的访问仅限于在’Files and Logs’菜单下浏览文件目录并下载里面的文件,如log等。

filesystem

最后谈谈本地开发和测试。开发者可以使用Eclipse加上WebSphere Liberty Profile runtime集成到Eclipse中,具体下载地址 – https://developer.ibm.com/wasdev/downloads/liberty-profile-using-eclipse/。搞定后的开发环境大概是这样的(截图里面的Bluemix插件,下次再介绍)。

eclipse

好了,到此为止一个简单的Java webapp已经可以欢快的跑在Bluemix之上,我们也初步了解了开发者该如何更新和部署这个应用了。接下来,谈谈如何创建一个数据库服务并绑定应用,待续。

IBM Connections Mobile二维码测试

Tuesday, August 12th, 2014

IBM Connections mobile App下载 (iOS):

https://itunes.apple.com/us/app/ibm-connections/id450533489?mt=8

ios_ibm_connections

自动预填服务器地址和用户名:

ibmscp://com.ibm.connections/launch?accountname=ChinaOpen&accountserver=https%3A%2F%2Fmycompany%2Ecom&accountuser=tom

connections-app-login

Lotus Connections Blogs 1.0 on Bluemix

Friday, August 1st, 2014

上周花了些时间把IBM Connections Blogs的一个早期版本(那时候叫Lotus Connections)移植到了IBM Bluemix上。这是一个学习的过程,帮我了解IBM PaaS平台的开发,掌握第一手经验。

为了把基于WebSphere Application Server实现的应用能跑到WebSphere Liberty Profile上,修改了一些代码,然后通过Bluemix Eclipse插件push到服务器上。等有时间写写详细的过程。

  • Lotus Connections Blogs 1.0 on Bluemix: http://ling.stage1.mybluemix.net/blogs/ 这个地址外网应该是访问不了的,我自己试了几次都不行,虽然ping server的地址不是9.x网段。

留了截屏:

blogs_bluemix

Bluemix上的部署界面:

bluemix

IBM Connections5.0新功能介绍(3) – @功能

Friday, June 27th, 2014

@功能在微博、微信中已经广为人知。Connections 4.5的CR2版本中提供了Connections个人微博和社区微博的@功能,该功能也已经在去年的Connections公有云版本中上线。在5.0中,@功能被添加到了博客正文和评论、Wikis正文和评论、Files的评论、论坛的帖子和评论、活动的帖子、回复和待办、社区日程的正文和评论中,更大的提升了用户和Connections系统的联动。

一个被@的用户会在Connections的首页的一个Tab里看到别人@他的内容,另外一旦被@会收到邮件通知(不希望邮件打扰的话可以自行关闭@的邮件通知功能)。

@功能看似简单,但我们在设计的时候必须根据Connections的实际考虑更多的问题。比如说我在论坛里@的一个人(对方收到通知),而之后我重新编辑了帖子,又@了另外一个人,这个时候系统该如何处理两个@,是否需要给之前被@的人再发一遍通知?如果要避免多次发送,势必要求在保存@信息的时候需要额外存储帖子内被@过的人员列表。另外,如果用户@一个对该内容没有访问权限的人该如何处理?在Rich Text Editor里@功能的用户体验是什么样的?Connections用户的唯一ID是directory uuid(不具可读性),如何在@的时候做到数据和显示的分离?这些问题在互联网微博上都不存在,可却很大的影响了Connections产品的设计。

Lotusphere 2011 Day 1

Monday, January 31st, 2011

上午和Dave做了最后一次合演,时间掌握的差不多。下午1点半的jump start ‘Lotus Connections 3.0 Administration‘过程控制的不错,和预期的时间很吻合,归功于两人多次合作练习。

可能由于报告时间较长(2个小时),内容对于不熟悉Connections的会比较深,最后15分钟没有太多问题,不过总体感觉良好。

晚上的招待会上,碰到了长期只闻其声不见其人的客户,‘熟人’相见,不生分。

Lotus Connections 3.0发布

Wednesday, November 24th, 2010

2010年11月24日,IBM正式发布Lotus Connections 3.0,企业社交软件新的里程碑!

Sametime Unified Telephony (SUT)

Sunday, September 19th, 2010

公司内部的SUT服务已经开通一段时间了,在拿到了pilot的权限后,在我的Sametime 8.5.1上enable了SUT的功能。SUT利用IP网络,通过连接传统电话网络实现了基于IP的语音通信。在SUT上,可以用Sametime拨打其他用户的SUT号码,或者任意一部电话机。如果是拨打SUT号码,则接收方可以在自己SUT里设置一定的规则,比如呼叫进来后,首先用Sametime接听,如果Sametime不在线,则办公室电话响,如果响10秒没人接,则继续呼叫手机,如此类推。这样呼叫方只需要知道对方的SUT号码,无论对方使用任何的物理通话设备,都能进行设备透明的通话。


Beta前夜

Saturday, May 29th, 2010

周六凌晨1点半,Blogs和Forums的开发、测试同事还在线上。Lotus Connections 3.0 Beta 1发布前的最后一个周末。我拒掉了所有可以拒掉的会议,和大伙奋战。

太熟悉的情形 – 出现在每次重要发布之前。昨晚12点回家,洗了澡,睡不着觉,拿了本《七十年代》翻了1个多小时,居然越看越精神。早上在SPR迂回反复、隐隐刺激下醒来… where we stand?

Lotus Connections 2.5发布

Friday, August 28th, 2009

8月28号,Lotus Connections在经历了10个月的开发后终于面世。

LC 2.5主要的新功能包括微博客(嵌在Profiles中),News(社区信息、事件聚合)、增强的(widget化)社区、完全重写的全文搜索,另外包含了三个新模块:wiki、文件共享和移动访问;此外还有无数非功能性的改进。对国内客户来说,Dogear这个怪怪的名字也在2.5里改名成了Bookmarks(书签)。

IBM上海开发中心的同事和全球开发者一起,成功的完成了博客、共享书签和产品安装模块的开发与测试(全部功能的前、后台代码开发、功能测试、信息无障碍测试、性能测试);北京和台北的开发团队在系统测试和全球化测试上做出了突出贡献。这是不平凡的10个月,每一行代码、每个测试脚本、每个深夜里的电话会议,无数个每个,在今天都得到了最好的回报。

稍作休息,接下来要帮助客户升级和部署Connections 2.5,并开始考虑下一个新版本的方向。。。

彩蛋

Saturday, July 18th, 2009

早上在《电脑时空》看到OpenOffice里面的Star Wars的彩蛋,到Lotus Symphony里面试一下,不work。搜了一下,找到OpenOffice的彩蛋集合,里面简单的几个在Symphony里面还有效,比如输入”=TTT()”显示笑脸符号;Tic-Tac-Toe和Star Wars里这两个游戏却是没有了。

CDL可以搞一个有中国特色的彩蛋,显示个大阿福,孙悟空什么的。

企业公民在成都

Saturday, July 11th, 2009

挺好的一个Flash:

http://www.ibm.com/ibm/responsibility/chengdu_presentation.html#chengdu_feature

主人公在成都呆了一个月,买了辆自行车。看完后印象最深的两张图,一个是茶馆合影,一个是餐厅里吃圆台面,呵呵。

Lotus Connections – 搜索

Saturday, April 18th, 2009

从07年第一个版本开始,Lotus Connections就提供了搜索功能 – 很明显这应该是social software的最基本功能。2.0版本以前的实现是每个模块使用Lucene来做全文索引(索引调度也由各模块独立实现)。 从2.0开始,我们开始支持global search,也就是用户登陆到“主页”后,可以在一个独立的搜索界面中同时搜索多个模块(如博客、书签等)。从实现角度看,global search机制稍有不同。首先,与各模块的索引调度类似,它也会定期的到各个模块爬内容,不同的是它的“爬”是通过发出一个HTTP请求(通过basic authentication指定搜索管理员帐号信息),收到请求的模块将返回一个XML格式的数据结果(我们称之为“seedlist”)。Global search在收到seedlist的结果后在本地重新构建索引(一个经过IBM扩展过的Lucene实现),并提供统一界面的搜索。这样用户可以不用在多个模块之前切换就能实现统一搜索。由此带来的一个新问题是,用户在模块内搜索的结果和在global search中搜索的结果不一致,产生的原因一个是因为使用的索引模块实现不一样;另外一个原因是如果在索引周期内用户数据发生了变化,独立索引和全局索引也会产生数据不一致。

从2.5开始,Lotus Connections搜索的一个最大变化是放弃了各个模块内自己的索引而统一使用全局索引。通过调用EJB或者REST API,用户即可以在单一模块进行上下文相关搜索(如在Dogear里只搜书签),也可以做跨模块索引。所有的索引任务(爬、构建索引、查询服务和API )全部由global search负责。这样,各模块省去了独立实现搜索的任务,而搜索结果也实现了统一。

最近有不少做客户项目的同事问用OmniFind对Lotus Connections进行搜索的可能性。答案是:可以。这个功能从Lotus Connections 2.0就已经提供。具体在OmniFind上的配置方法见:http://www-01.ibm.com/support/docview.wss?uid=swg27013527&aid=1

Lotusphere comes to CDL

Monday, March 9th, 2009

今天和大伙一起,在会议室里呆了一天,参加远程的Lotusphere comes to CDL。北京的同事在清华现场,上海、台北和越南的同事通过Sametime Unyte远程共享。

我做了Lotus Connections的报告,同时聆听了其他几个session,印象比较深的有Notes/Domino 8.5,  Quickr和ECM集成以及多语言WCM应用开发。今天才知道Domino 8.5已经支持邮件附件的单一副本功能 – 当一份包含了10MB附件的邮件发送给10个人,服务器上只保存一份该附件的物理拷贝。从客户端的角度,Quickr for Notes的插件可以自动把用户发送的附件上传到Quickr服务器上并把原始邮件中附件替换成一个Quickr的下载链接 – 双管齐下,分别解决服务、客户端的冗余数据。

Turkish-i

Monday, March 9th, 2009

土耳其语的字符i有四种形式:i, I, ı 和 İ。 如果使用Java语言进行这四个字符间大小写的转换,会有意想不到的结果(见下图)。

在土耳其locale下,进行字字符i的大小写转换,可以看到潜在的危险:想像一下如果字符i(I)出现在文件路径、HTML标签、电子邮件地址、URL等,那么转换后将导致严重的问题。一个没有在设置了土耳其locale的操作系统环境下进行过GVT(Globalization Verification Test)的软件,暴露出此类问题的可能性相当之大。

因此,在我们处理土耳其i的大小写时,需要区分字符使用的上下文环境:如果使用在用户不可见的系统相关的地方,如上述几个例子,那么在做大小写转换的时候必须使用英文的locale;如果字符出现的用户界面上且和土耳其locale相关,则需要使用土耳其locale进行转换。不过在有些情况下,如何选择转换方案并非如此容易,甚至是无法事先预测的。个人认为,处于安全的考虑,在无法正确判断上下文的情况下,可以使用英文locale来进行处理,在进行GVT或者TVT的时候如果发现存在问题,则case by case的来解决。

Lotus Notes on Nokia

Saturday, December 6th, 2008

Nokia S60系列手机即将可以运行Lotus Notes (Traveler),毫无疑问对Nokia和IBM是个双赢的合作,企业邮件离掌心又进了一步。

http://news.yahoo.com/s/nf/20081120/bs_nf/63163

WebSphere tops poll – SDTimes (Nov, 2008)

Monday, November 17th, 2008

原文:http://www.sdtimes.com/content/SDTimesPDFEdition.aspx?File=sdtimes210.pdf

易用性实验室

Wednesday, November 12th, 2008

上海的IBM中国开发中心5楼,有一个新建立的易用性实验室(Usability Lab),今天去里面转了一圈,了解了一点情况。这个易用性实验室由实验区、观察区和会议区组成。实验区里有供实验者使用的电脑和监控设备,如摄像头、麦克风;观测区里有一套复杂的设备,包括各个用户当前屏幕的显示、实验区的视频观测、摄像头的遥控器、和实验区交流用的话筒等。实验区和观察区用单向玻璃分割,在观察区可以清楚的看到用户的使用情况,而用户则可以不受打扰的进行测试。

测试的步骤是用户开始试用某软件,此时当前的用户屏幕、用户的表情和声音利用一套软件同步的记录下来,通过同步分析这些数据就可以了解到用户在使用软件中遇到的问题:哪些设计导致用户误操作;哪些功能藏的过深很难找到,诸如此类。

很多产品,比如说Connections和Symphony都可以利用这个实验室来评测一下用户的体验,“被人研究”一下。

Lotus Symphony中文网页

Tuesday, November 4th, 2008

为了配合日益高涨的Lotus Symphony产品宣传和推广活动,作为暂时弥补Lotus Symphony网站没有提供中文版的问题,我根据目前的英文页面,制做了一个Lotus Symphony的中文首页(静态页面)。本中文页面仅对原英文版内容进行了翻译,未作其他更改。