Показаны сообщения с ярлыком jaggery. Показать все сообщения
Показаны сообщения с ярлыком jaggery. Показать все сообщения

понедельник, 22 сентября 2014 г.

Вызываем Java из Jaggery.js

Зачем переписывать на JavaScript код, который уже есть в Java? Jaggery.js позволяет делать прямые вызовы. Смотрите с 55-ой минуты вэбинара:

http://wso2.com/library/webinars/2014/09/javascript-from-browser-to-server/

Оформить обращение к Java в виде отдельной функции в коде JavaScript.
Начинать путь к классу Java со слова Packages.
Перед тем как вернуть результат, преобразовать его в тип JavaScript.

Ниже приведён пример функции для изменения формата строки.

<%
function encodeBase64(str) {

    var bytes = new Packages.java.lang.String(str).getBytes();
    var converted = Packages.org.apache.commons.codec.binary.Base64.encodeBase64(bytes);
    return String(new Packages.java.lang.String(converted));

}
%>

четверг, 11 сентября 2014 г.

MoscowJS 15








Приглашаю на доклад "Jaggery.js — сладкие корпоративные решения", который пройдёт в рамках 15-го митапа MoscowJS 25 сентября 2014 года в офисе Mail.ru.

В программе знакомство с фреймворком от WSO2 и демонстрация подключения веб-сервиса.

Материалы к докладу

сайт Jaggery.js

сайт WSO2 User Engagement Server

слайды презентации




виртуальная машина VirtualBox (2,3Гб):
Яндекс диск
Google диск

Пользователь: jaggery
Пароль: jaggery

Запустить в терминале скрипты, указанные в файле README на рабочем столе:



Открыть браузер во весь экран и перейти к нужной закладке:



Дополнительно

как установить Jaggery.js на Ubuntu

Общие принципы установки:

1. Установить Java
2. Создать переменную JAVA_HOME
3. Добавить JAVA_HOME/bin к PATH
4. Загрузить и распаковать Jaggery.js
5. Запустить bin/server.sh или bin/server.bat



Короткая ссылка на эту страницу: bit.do/jaggery

воскресенье, 7 сентября 2014 г.

Устанавливаем Jagggery.js на Ubuntu 14 x32

Самое главное правильно настроить путь к Java.

Потом всё просто:
  1. скачиваем архив
  2. распаковываем
  3. запускаем Jaggery.js
В итоге имеем доступ через браузер к
  1. простенькой панели администирования, 
  2. документации и примерам,
  3. нашим сайтам, созданным в директории apps

sudo apt-get update
sudo apt-get upgrade

# Java 7
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get clean
sudo apt-get update
sudo apt-get install oracle-java7-installer
# check Java installation
java -version
# get path to Java
sudo update-alternatives --config java
    /usr/lib/jvm/java-7-oracle/jre/bin/java
# define JAVA_HOME and add the binary directory to PATH
sudo nano /etc/environment
    JAVA_HOME="/usr/lib/jvm/java-7-oracle/jre"
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin"

# apply changes
sudo reboot


# WSO2 directory
cd ~
mkdir wso2
cd wso2

# Jaggery.js
wget -U Mozilla/5.0 http://dist.wso2.org/products/jaggery/dl/jaggery-0.9.0-SNAPSHOT_ALPHA3.zip
unzip jaggery-0.9.0-SNAPSHOT_ALPHA3.zip -d ./
sh ./jaggery-0.9.0-SNAPSHOT/bin/server.sh &


# see examples and docs at http://localhost:9763/
# enter user admin and password admin at https://10.0.2.15:9443/admin/carbon/
# create a directory for your site inside /home/jaggery/wso2/jaggery-0.9.0-SNAPSHOT/apps

вторник, 19 августа 2014 г.

Песнь о сервисах

Спою о том, как Jaggery обращается к WSO2 BPS... Короче про любовь. Подпевайте со слова "function":

<%

var x = request.getParameter("x");
var y = request.getParameter("y");
//var sum = parseInt(x) + parseInt(y);
var sum = add(parseInt(x), parseInt(y));

response.content = {
    success: true,
    data: {
        result: sum
    }
};

function add(x, y) {

    var ws = require("ws");

    var stub = new ws.WSStub("http://192.168.4.67:9766/services/AdderProcess?wsdl");

    var process = stub.services["AdderProcess"].operations["process"];

    var payloadTemplate = process.payloadXML();

    var payload = replaceQuestionMarks(payloadTemplate, arguments);

    var resultXml = process.request(payload);

    var resultValue = resultXml.children().text();

    return parseInt(resultValue);


}

function replaceQuestionMarks(template, values) {

    var i = 0;

    return template.replace(
        /\?/g,
        function() {
            return values[i++];
        }
    );

}

%>


А если серьёзно, то данный код показывает, как подключиться к веб-сервису. В прошлой статье мы увидели, как ExtJs запрашивает Jaggery сложить два числа. Запрос уходит из одностраничного JavaScript-приложения, запущенного в браузере, на веб-сервер. На веб-сервере запрос обрабатывает Jaggery-скрипт. Он собственно и складывает два числа, после чего возвращает результат в браузер.

Теперь веб-сервер сам складывать числа не будет, а перенаправит запрос на веб-сервис, который мы также уже создали в одной из предыдущих статей.

Для взаимодействия с веб-сервисами JaggeryJs предоставляет такой замечательный инструмент, как WSStub. По настоящему его смогут оценить только те разработчики, которые плохо разбираются в правилах описания веб-сервисов (WSDL). Не знаю, как вы, а я оценил этот инструмент по достоинству.

Чтобы воспользоваться всеми преимуществами WSStub, следует прежде всего подключить к нашему скрипту модуль ws (web service) при помощи require:

var ws = require("ws");

Получив таким образом доступ к пространству имён модуля ws, мы можем теперь собственно создать объект типа WSStub, передав в его конструктор адрес описания веб-сервиса:

var stub = new ws.WSStub("http://192.168.4.67:9766/services/AdderProcess?wsdl");

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

var process = stub.services;
print(process); 

После того, как найдёте знакомое название класса, можно сделать следующий шаг:

var process = stub.services["AdderProcess"].operations; 
print(process);

Когда найдёте в выводе (в Файербаге, например) знакомое название метода, то можно сформировать окончательный вариант команды:

var process = stub.services["AdderProcess"].operations["process"];

Не поленитесь, сделайте ещё раз


print(process);

Узнаете много нового. В частности, что объект process имеет очень полезный метод payloadXML, о котором почему-то забыли упомянуть в документации. Этот метод выдаёт шаблон XML-запроса к веб сервису. Вместо значений полей в шаблоне стоят знаки вопроса. 

var payloadTemplate = process.payloadXML();

Для нас не проблема нагуглить код, который подставит вместо знаков вопроса фактические значения. Помещаем его в цпециальную функцию:

function replaceQuestionMarks(template, values) {

    var i = 0;

    return template.replace(
        /\?/g,
        function() {
            return values[i++];
        }
    );

}


В итоге у нас на руках оказывается XML-запрос, готовый к отправке на веб сервис. Воспользуемся имеющимися у нас возможностями:

var resultXml = process.request(payload);

Документация утверждает, что метод requestвозвращает строку. Может быть, это отчасти и так, однако если мы выполним:

print(typeof resultXml);

То к своему изумлению обнаружим тип xml. Если мы захотим разобраться, как работать с данным типом, то документация отправит нас pdf-документу с названием "ECMAScript for XML (E4X) Specification". Включив смекалку, мы находим там методы child и text, которые и переносим в код:


var resultValue = resultXml.children().text();

Наконец-то мы получили сумму значений переменных x и y. Отправляем их в ответе браузеру.





четверг, 14 августа 2014 г.

Простейший сайт UES

Создаём наипростейший сайт, который только можно вообразить.

Настраиваем JAVA_HOME, если ещё не настроено:
https://docs.wso2.com/display/UES100/Installing+on+Windows

Скачиваем бинарный дистрибутив WSO2 UES:
http://wso2.com/products/user-engagement-server/

Распаковываем куда-нибудь. Назовём это место для себя UES_HOME.

Запускаем  UES_HOME\bin\wso2server.bat. Запоминаем URI, чтобы позже ввести его в браузере.

Создаём папку на сервере под наш сайт в директории UES_HOME\repository\deployment\server\jaggeryapps

Назовём её adder. В ней будет два файла:

jaggery.conf

{"welcomeFiles" : ["index.html"]}

index.html

<html><body>Adder Application</body></html>

Проверяем в браузере:
https://localhost:9444/adder/





Ну вот. Теперь можно и начать усложнять.