在Worklight Adapters之间共享代码

时间:2013-06-20 16:02:48

标签: ibm-mobilefirst worklight-adapters

在大多数情况下,我已经处理过,Worklight Adapter的实现非常简单,只需几行JavaScript。

在当前项目中,使用WL 5.0.6,我们有几个适配器,每个适配器都有几个程序。我们的特定后端需要一些通用逻辑来设置请求和解释响应。似乎是将公共代码重构为共享库的理想选择,只要我看到适配器环境中没有“库”概念,除非我们想要下载到Java中。

适配器之间是否存在代码重用的模式?

3 个答案:

答案 0 :(得分:3)

我认为你是对的。目前无法导入自定义JavaScript库。

有一种方法可以使用“load(xyz.js)”函数在Mozilla Rhino引擎中包含/加载Javascript文件,但这会使您的Worklight适配器无法部署。

但我注意到,这将使您的Worklight适配器无法部署。如果在适配器中部署第二个* .js文件,您将收到以下错误消息:

Adapter deployment failed: Procedure 'getStories' is not implemented in the adapter's JavaScript file.

似乎Worklight Server每个适配器只能处理一个JavaScript文件。

答案 1 :(得分:2)

我通过在Java代码中实现功能并在Worklight war文件中包含jar文件,在适配器之间共享了一些常用功能。这通过JDBC调用存储过程非常方便,它可以处理多个parms并从内部后端服务检索PDF内容。 jar需要位于将部署适配器的worklight.war Web应用程序的lib目录中。

在适配器中创建java对象的示例:

var parm = new org.apache.http.message.BasicNameValuePair("QBS_Reference_ID",refId);

答案 2 :(得分:1)

在适配器之间共享JavaScript的一种方法是遵循这样的模式:

<强> CommonAdapter-impl.js

var commonObject = {
  invokeBackend: function(input, options) {
    // Do stuff to check/modify input & options

    response = WL.Server.invokeHttp(input);

    // Do stuff to check/modify response

    return response;
  }
}

getCommonObject: function() {
  return commonObject;
}

<强> NormalAdapter-impl.js

function getSomeData(dataNumber) {
  var input = {
    method: 'get',
    returnedContentType: 'json',
    path: '/restservices/getsomedata',
  }

  return _getCommonObject().invokeBackend(input);
}

function _getCommonObject() {
  var invocationData = {
    adapter: 'CommonAdapter',
    procedure: 'getCommonObject',
    parameters: []
  }

  return WL.Server.invokeProcedure(invocationData);
}

在这种特殊情况下,公共适配器用于在WL.Server.invokeHttp,周围提供“包装”功能,但它也可用于提供任何其他实用功能。

这种模式的原因特别是它允许WL.Server.invokeHttp在“调用”适配器的上下文中运行,这意味着调用适配器中指定的端点(主机名,端口号等)将使用.xml文件。它确实意味着必须在每个“普通”适配器中重复短_getCommonObject()函数,但这是一个相当小的样板。

请注意,此模式已与Worklight 6.1一起使用 - 无法保证它将在以后或过去的版本中使用。