Здравствуйте, ENP, Вы писали:
ENP>Здравствуйте! ENP>Правильно ли я понимаю, что реализация клиента Hessian/Burlap на JavaScript в принципе возможна, но никто до сих пор не собрался?
А зачем? Для JavaScript нужен JSON. Разбор Hessian/Burlap будет заметно тормозить.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, ENP, Вы писали:
ENP>>Здравствуйте! ENP>>Правильно ли я понимаю, что реализация клиента Hessian/Burlap на JavaScript в принципе возможна, но никто до сих пор не собрался? C>А зачем? Для JavaScript нужен JSON. Разбор Hessian/Burlap будет заметно тормозить.
А разбор XML-RPC, реализации которого для JavaScript вроде имеются, тормозить не будет? Во времена ExtJS и GWT это уже не аргумент
JSON — это всего лишь способ отобразить POJO на JavaScript, но никак не RPC.
Сформулирую задачу: есть некий веб-сервис, требуется написать к нему толстого и веб-клиента, при этом для обоих хочется выставить наружу один и тот же интерфейс и описать этот интерфейс в терминах RPC, а не REST, например. Ну или хотя бы иметь возможность вызов одного и тот же метода удаленного интерфейса представить и так, и эдак. Неужели это такая редкая задача?
Что можно сделать:
1. Использовать заведомо менее эффективный XML-RPC (отображение JSON <-> POJO, видимо, нужно будет прикручивать) — впрочем, не для всех приложений это снижение эффективности будет проблемой
2. Использовать разные технологии ремотинга — DWR для JavaScript (ну тут с JSON <-> POJO не все гладко) и Hessian/Burlap для Java (или даже Spring HTTP invoker — чтоб заведомо не иметь проблем с POJO. Как там с ними в Hessian/Burlap?)
3. Написать реализацию Hessian/Burlap для JavaScript. Как вариант — написать JavaScript-интерфейс для Spring HTTP invoker, заодно используя JSON для сериализации — но, боюсь, в обоих случаях овчинка не стоит выделки.
Здравствуйте, ENP, Вы писали:
ENP>Сформулирую задачу: есть некий веб-сервис, требуется написать к нему толстого и веб-клиента, при этом для обоих хочется выставить наружу один и тот же интерфейс и описать этот интерфейс в терминах RPC, а не REST, например. Ну или хотя бы иметь возможность вызов одного и тот же метода удаленного интерфейса представить и так, и эдак. Неужели это такая редкая задача?
Так какие проблемы? Просто экспортируешь сервис через два вида RPC: JSON и <твой-любимый-RPC>. Тем более, что ты Spring используешь — там это делается элементарно.
Могу поделиться JSON-экспортёром, если надо.
Выглядит примерно так:
<bean name="/TagManagerService" class="com.geotags.utils.JSONServiceExporter">
<property name="service" ref="tagManagerService"/>
<property name="serviceInterface" value="com.geotags.services.TagManagerService"/>
</bean>
В HTMLе:
<script src="/res/prototype.js" type="text/javascript"></script>
<script src="/res/jsonrpc.js" type="text/javascript"></script>
В JavaScript'е:
var tagManager=new JSONRpcClient("/remoting/TagManagerService");
tagManager.checkEnv(<параметры>, function(res){/*Функция обработки результата*/});
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, ENP, Вы писали:
ENP>>Сформулирую задачу: есть некий веб-сервис, требуется написать к нему толстого и веб-клиента, при этом для обоих хочется выставить наружу один и тот же интерфейс и описать этот интерфейс в терминах RPC, а не REST, например. Ну или хотя бы иметь возможность вызов одного и тот же метода удаленного интерфейса представить и так, и эдак. Неужели это такая редкая задача? C>Так какие проблемы? Просто экспортируешь сервис через два вида RPC: JSON и <твой-любимый-RPC>. Тем более, что ты Spring используешь — там это делается элементарно.
C>Могу поделиться JSON-экспортёром, если надо.
Поделись, пожалуйста. На jsonrpc.js тоже неплохо бы посмотреть.
Здравствуйте, ENP, Вы писали:
C>>Могу поделиться JSON-экспортёром, если надо. ENP>Поделись, пожалуйста. На jsonrpc.js тоже неплохо бы посмотреть. http://files.rsdn.ru/37054/exporter.zip , краткое HOWTO внутри. Не тестировалось со сложными параметрами методов, но при желании докрутить можно без проблем — json-lib это поддерживает.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, ENP, Вы писали:
C>>>Могу поделиться JSON-экспортёром, если надо. ENP>>Поделись, пожалуйста. На jsonrpc.js тоже неплохо бы посмотреть. C>http://files.rsdn.ru/37054/exporter.zip , краткое HOWTO внутри. Не тестировалось со сложными параметрами методов, но при желании докрутить можно без проблем — json-lib это поддерживает.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, ENP, Вы писали:
C>>>Могу поделиться JSON-экспортёром, если надо. ENP>>Поделись, пожалуйста. На jsonrpc.js тоже неплохо бы посмотреть. C>http://files.rsdn.ru/37054/exporter.zip , краткое HOWTO внутри. Не тестировалось со сложными параметрами методов, но при желании докрутить можно без проблем — json-lib это поддерживает.
Многие TODO из JSONServiceExporter.handleRequest закрыты в JSONRPCServlet.service из jabsorb. Почему для реализации экспортера ты использовал менее функциональный json-lib, тем более, что клиент таки взят у предшественника jabsorb?
Здравствуйте, ENP, Вы писали:
C>>http://files.rsdn.ru/37054/exporter.zip , краткое HOWTO внутри. Не тестировалось со сложными параметрами методов, но при желании докрутить можно без проблем — json-lib это поддерживает. ENP>Многие TODO из JSONServiceExporter.handleRequest закрыты в JSONRPCServlet.service из jabsorb. Почему для реализации экспортера ты использовал менее функциональный json-lib, тем более, что клиент таки взят у предшественника jabsorb?
Ага, я сначала смотрел jabsorb, но что-то мне в нём не понравилось. Сейчас уже не вспомню что.