2013-06-20 5 views
3

В большинстве случаев я рассматривал до сих пор, что реализация адаптера Worklight довольно тривиальна, всего несколько строк JavaScript.Обменный код между адаптерами Worklight

В текущем проекте, используя WL 5.0.6, у нас есть несколько адаптеров, каждый из которых имеет несколько процедур. Для наших конкретных бэкендов требуется общая логика для настройки запросов и интерпретации ответов. Кажется идеальным для рефакторинга общего кода для разделяемой библиотеки, что, насколько я вижу, в среде адаптера нет концепции «библиотеки», если мы не захотим спуститься на Java.

Существуют ли шаблоны для повторного использования кода между адаптерами?

ответ

3

Я думаю, что вы правы. В настоящее время нет способа импорта пользовательских библиотек JavaScript.

Существует способ включить/загрузить файлы Javascript в Mozilla Rhino с помощью функции «load (xyz.js)», но это сделает ваш адаптер Worklight незанятым.

Но я заметил, что это сделает ваш адаптер Worklight неработоспособным. При развертывании второй * .js файл в адаптере, вы получите следующее сообщение об ошибке:

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

Похоже, Worklight сервер может обрабатывать только один JavaScript файл на адаптере.

2

Я поделился некоторыми обычными функциями между адаптерами, реализовав функциональность в Java-коде и включив файл jar в файле Warlight Worklight. Это пригодилось, чтобы вызывать хранимые процессы через JDBC, которые могут обрабатывать множественные парматы, а также извлекать PDF-контент из внутренних бэкэнд-сервисов. Банку должно быть в каталоге lib веб-приложения worklight.war, к которому будет применен адаптер.

Пример создания объекта Java в адаптер:

var parm = new org.apache.http.message.BasicNameValuePair("QBS_Reference_ID",refId); 
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 - нет гарантии, что он будет работать в будущих или прошлых версиях.