繁体   English   中英

在Worklight Adapters之间共享代码

[英]Sharing code between Worklight Adapters

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

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

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

我想你是对的。 目前无法导入自定义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文件。

我通过在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);

在适配器之间共享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,但它也可用于提供任何其他实用程序功能。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM