通过将孤立的内容存储库转换为可通过云访问的资产,企业可获得业务优势。本教程将介绍如何使用 Bluemix Secure Gateway 服务和 内容管理互操作性服务 (Content Management Interoperability Services, CMIS) 接口将 Bluemix 应用程序与内部部署的IBM Content Manager 实例相集成。
CMIS(受多个内容存储库供应商支持的一项开放标准)提供了创建、更新、检索和删除内容的 RESTful API。借助 Content Manager 中对 CMIS 规范 1.0.0 版的支持,解决方案开发人员可以构建调用 CMIS API 的自定义应用程序。
在本教程中,在 Bluemix 中创建一个应用程序,将一个 Secure Gateway 服务与该应用程序相关联,然后测试您的应用程序。首先来了解金融行业的一个简单需求:一家(虚构的)抵押贷款公司希望实现一个贷款查找服务应用程序,让用户能够快速、轻松地访问存储在后端 Content Manager 存储库内部的贷款信息。这样做的目的是让用户能够从桌面、平板电脑或智能电话 Web 浏览器检索贷款信息。
下图给出了该解决方案的各部分协同支持混合云集成的总体视图。一个 Content Manager 系统在内部运行,无法从互联网直接访问它。在内部安装了一个 Secure Gateway 客户端,它使得用户能够从云中发出 CMIS API 调用来与内部部署的 Content Manager 进行交互。Secure Gateway 客户端与为 Bluemix 应用程序提供支持的 Secure Gateway 服务相联系。
点击查看大图
关闭 [x]
备注:本教程给出的解决方案不适合具有不允许从外部访问内部系统的安全策略的组织。
启用此混合云集成后,它就会变成一个云平台,其他 Bluemix 服务或外部服务可从中无缝地访问企业防火墙背后的存储库内容。尽管数据存储在内部,但它没有对您的客户应用程序隐藏。您可以使用该设计作为参考,快速开发利用了 Bluemix 技术的类似的 Content Manager 解决方案。
阅读: 开始使用 Secure Gateway
阅读: 使用 Bluemix UI 创建一个 Secure Gateway
阅读: 扩大企业内容管理的应用范围
“ 尽管数据存储在内部,但它们没有对您的客户应用程序隐藏。 ”
首先分解示例项目,以便您拥有自己的包含必要源代码的 DevOps Services 项目:
获取代码
应用程序被更新并部署到 Bluemix 后,登录到 Bluemix 并在仪表板中找到新部署的应用程序:
gateway_id
是 Bluemix UI 中您的 Secure Gateway 服务的 ID):
docker run -it bluemix/secure-gateway-client <em>gateway_id</em>
您的 Web 应用程序现在已为测试做好准备。
点击查看大图
关闭 [x]
LoanApplication
项类型: LoanNumber
:贷款的惟一标识符(使用 12-345-6000
) Duration
:贷款的持续月数(示例: 360
) InterestRate
:贷款利率(示例: 0.05
) LoanAmount
:贷款金额(示例: 300000
) YearlyIncome
:申请者的年收入(示例: 90000
) CreditScore
:申请者的信用评分(示例: 781
) FirstName
:申请者的名字(示例: John
) LastName
:申请者的姓氏(示例: Doe
) EmailAddress
:要通知的人员的电子邮件地址(可选) 12-345-6000
在您的 Web 应用程序中执行查找。确认该应用程序返回了从内部部署的 Content Manager 存储库检索的信息: 这是如何发出 CMIS 调用和如何在 Node.js 应用程序中处理 CMIS 数据的详细解释。
编写一个异步函数来发出 CMIS 调用:
// cmis async function function getCMISDataAsync(queryStr, resultCallback) { ... ... // compose a cmis query to get a LoanApplication object with the specified LoanNumber var cmis_url = url + '/cmcmis/resources/%24x%21icmnlsdb/Query' + '?q=select%20%2A%20from%20LoanApplication' + '%20WHERE%20LoanNumber=%27' + queryStr + '%27'; ... ... // Create a request to CMIS // set timeout to 1 minute (60000 ms) request.get( { url : cmis_url, timeout: 60000, headers : { "Authorization" : auth } }, callback );
在本例中,创建了一个 CMIS 查询,并将它发送到在内部运行的 CMIS 服务器。 url
是指向一个 IBM Secure Gateway 集成云的 URL,它对应于内部的物理 CMIS 服务器的目标 URL。 cmcmis
是一个 Content Manager 实例的 CMIS 服务器的上下文根。 icmnlsdb
是一个 CMIS 存储库的名称。查询字符串从 LoanApplication
项目类型中选择,其中 LoanNumber
等于指定的贷款编号。返回结果时,调用一个 callback
。
调用回调函数后,该代码使用 xml2js
模块中的 parseString()
函数来将结果从 XML 格式转换为 JSON 格式。从概念上讲,CMIS 条目输入类似于来自 SQL 查询的行列表。
var callback = function(err, res, body) { console.log("callback is being called ..."); console.log("response = " + body); // insert parser.parseString(body, function(err, result) { if (err) console.log("error found"); else { doc = result; console.log("result is captured"); ... ... var entries = doc["atom:feed"]["atom:entry"]; ...
一个 CMIS 查询可拥有以下一个或多个属性:
cmis:propertyString
cmis:propertyDateTime
cmis:propertyDecimal
cmis:propertyInteger
cmis:propertyBoolean
这是一个如何从 CMIS 条目中检索 LastName
字符串属性的示例:
if (entries[0]["cmisra:object"][0]["cmis:properties"][0] ["cmis:propertyString"][i]["$"]["localName"] == "LastName") { // retrieve the cmis:value for LastName last_name = entries[0]["cmisra:object"][0]["cmis:properties"][0] ["cmis:propertyString"][i]["cmis:value"]; }
检索到需要的属性后,您可以构造一个 JSON 对象并将其返回到网页上进行显示:
var result = { "found": "true", "loan_number": loan_number, "loan_amount": loan_amount, "first_name": first_name, "last_name": last_name, "yearly_income": yearly_income, "credit_score": credit_score, "duration": duration, "interest_rate": interest_rate}; resultCallback(null, result);
您学习了如何将 Bluemix Secure Gateway 服务和 CMIS 与 Content Manager 整合,开发一个使用 Node.js 编写的自定义应用程序。通过一个简单的贷款处理场景,您理解了如何为一个 Content Manager 存储库创建一个应用程序。借助 Bluemix 技术和 DevOps Services 工具,您可以为内部部署的 Content Manager Version 8 实例构建有用、多功能的解决方案。
BLUEMIX SERVICE USED IN THIS TUTORIAL: Secure Gateway 服务给您的 Bluemix 环境带来了混合集成功能。
相关主题: Node.js 安全性