在大多数情况下,我已经处理过,Worklight Adapter的实现非常简单,只需几行JavaScript。
在当前项目中,使用WL 5.0.6,我们有几个适配器,每个适配器都有几个程序。我们的特定后端需要一些通用逻辑来设置请求和解释响应。似乎是将公共代码重构为共享库的理想选择,只要我看到适配器环境中没有“库”概念,除非我们想要下载到Java中。
适配器之间是否存在代码重用的模式?
答案 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一起使用 - 无法保证它将在以后或过去的版本中使用。