Здравствуйте, Cyberax, Вы писали:
C>Ну таки да. Что именно умеет WCF — я тебе (почти) всё сделаю с помощью этой комбинации. Ты учти, что туда можно ещё всякий Mule воткнуть и прочие извращения.
С помощью TCP вообще можно то же самое сделать. ага...
Здравствуйте, gandjustas, Вы писали:
C>>Mule — http://www.mulesoft.org/documentation/display/MULE2USER/Available+Transports C>>Ещё от Апача: C>>http://servicemix.apache.org/home.html C>>http://fusesource.com/products/enterprise-servicemix/ G>Это не то, это продукты enterprise уровня. В своем приложении такое не захостишь.
Эээ... А кто мешает-то? Mule — это что-то около 5Мб jar-ников в не очень навороченной конфигурации. Тупо подключаешь их через Spring и вперёд с песней.
G>>>2)Transport-level и message level serurity C>>Это противоречивое требование с пунктом 1). Фиг у тебя будет message-level security поверх JSON. Если транспорт позволяет — может быть и то, и другое... G>Все виды security должны работать если поддерживаются каналом.
Как ты подпишешь сообщение JSON?
Для XML это делается без проблем (http://java.sun.com/webservices/xmldsig/index.jsp), а вот для JSON — увы.
G>>>3)Workflow c возможностью "засыпания" в backend. C>>И Мул и ServiceMix/FUSE поддерживают подключаемые движки сценариев, чаще всего юзают JBoss BPM. G>См выше. G>Мул кстати платный.
Кстати нет: http://www.mulesoft.org/mule-community-vs-mule-enterprise — у них определённая часть платная только.
G>>>4)Какой-нить универсальный хостинг для всего этого, с широкими возможностями управления и мониторинга C>>Стандартный JEE. Управление — через JMX. G>Не, я хочу красивую консольку.
Умм... А что в JMX некрасивого? Это просто стандарт на обобщённую систему управления и мониторинга.
Это просто для .NET нет нормального обобщённого API для мониторинга (WMI must die).
C>>Да вот только в CORBA есть возможность давать удалённые ссылки. Т.е. я могу клиенту отдать объект, у которого поля — это ссылки на объекты на другом хосте. G>WCF — фреймворк, он не знает об "объектах". С помощью конфига можно сделать похожим на remote objects, но это крайне не рекомендуется. G>А ссылки в нем — обычные URI
Добавь сюда гетерогенные сети и станет интересно
C>>А ещё в CORBA есть возможность callback'ов. Т.е. вызовов с сервера на клиент. Как ты это будешь отображать в JSON-API, работаюшее поверх REST? G>Никак, просто контракт, не поддерживающий callback. Хотя никто не мешает тот же JSON гонять по net.tcp с callback.
Так вот в том-то и проблема.
C>>А ещё есть вопросы с типами данных. В JSON, к примеру, нет стандартного mapping'а для timestamp'ов с наносекундным разрешением. А ещё есть душевный стандарт ASN.1, там типы "последовательность" и "последовательность_из_строго_пяти_элементов" — это разные вещи. И если у тебя тип потеряется во время передачи (а он один фиг потеряется, у других форматов нет такого кретинизма) — результат не будет валидным для нужной схемы. G>Это ты о чем? На обоих концах .NET приложение — пох что там потеряется, на сервере .NET, на клиенте javascript — тоже отлично работает.
Endpoint может быть не .NET-овым. И WCF предоставляет возможности роутинга сообщений и проксики. И там оно всё начинается...
Здравствуйте, vladimir.vladimirovich, Вы писали:
C>>Ну таки да. Что именно умеет WCF — я тебе (почти) всё сделаю с помощью этой комбинации. Ты учти, что туда можно ещё всякий Mule воткнуть и прочие извращения. VV>С помощью TCP вообще можно то же самое сделать. ага...
Ты мне задачу опиши, а я расскажу как на Java сделать.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, gandjustas, Вы писали:
C>>>Mule — http://www.mulesoft.org/documentation/display/MULE2USER/Available+Transports C>>>Ещё от Апача: C>>>http://servicemix.apache.org/home.html C>>>http://fusesource.com/products/enterprise-servicemix/ G>>Это не то, это продукты enterprise уровня. В своем приложении такое не захостишь. C>Эээ... А кто мешает-то? Mule — это что-то около 5Мб jar-ников в не очень навороченной конфигурации. Тупо подключаешь их через Spring и вперёд с песней.
Примеры есть?
G>>>>2)Transport-level и message level serurity C>>>Это противоречивое требование с пунктом 1). Фиг у тебя будет message-level security поверх JSON. Если транспорт позволяет — может быть и то, и другое... G>>Все виды security должны работать если поддерживаются каналом. C>Как ты подпишешь сообщение JSON?
Буду использовать HTTPS, если уже очень надо, то можно расширение протокола http забабахать, хотя смысла в этом не вижу.
Так или иначе логика сервера и клиента не поменяется.
G>>>>3)Workflow c возможностью "засыпания" в backend. C>>>И Мул и ServiceMix/FUSE поддерживают подключаемые движки сценариев, чаще всего юзают JBoss BPM. G>>См выше. G>>Мул кстати платный. C>Кстати нет: http://www.mulesoft.org/mule-community-vs-mule-enterprise — у них определённая часть платная только.
Community Edition — Evaluation or pre-production use...
Для продакшена — платный.
G>>>>4)Какой-нить универсальный хостинг для всего этого, с широкими возможностями управления и мониторинга C>>>Стандартный JEE. Управление — через JMX. G>>Не, я хочу красивую консольку. C>Умм... А что в JMX некрасивого? Это просто стандарт на обобщённую систему управления и мониторинга. C>А клиентом к ней может быть как гламурное приложение: http://sourceforge.net/dbimage.php?id=8061 , так и утиллита командной строки: https://launchpad.net/jmxterm C>Это просто для .NET нет нормального обобщённого API для мониторинга (WMI must die).
WMI позволяет управлять и мониторить все, а JMX — то что на жабе написно, кагбе разная мощность технологий.
C>>>Да вот только в CORBA есть возможность давать удалённые ссылки. Т.е. я могу клиенту отдать объект, у которого поля — это ссылки на объекты на другом хосте. G>>WCF — фреймворк, он не знает об "объектах". С помощью конфига можно сделать похожим на remote objects, но это крайне не рекомендуется. G>>А ссылки в нем — обычные URI C>Добавь сюда гетерогенные сети и станет интересно
А какая разница?
C>>>А ещё в CORBA есть возможность callback'ов. Т.е. вызовов с сервера на клиент. Как ты это будешь отображать в JSON-API, работаюшее поверх REST? G>>Никак, просто контракт, не поддерживающий callback. Хотя никто не мешает тот же JSON гонять по net.tcp с callback. C>Так вот в том-то и проблема.
В чем? Пока клиенты json сервисов, а это на 99% javascript, не научится работать с callback, то смысла в таком решении нету.
Надо реальные проблемы решать, а не абстрактные.
C>>>А ещё есть вопросы с типами данных. В JSON, к примеру, нет стандартного mapping'а для timestamp'ов с наносекундным разрешением. А ещё есть душевный стандарт ASN.1, там типы "последовательность" и "последовательность_из_строго_пяти_элементов" — это разные вещи. И если у тебя тип потеряется во время передачи (а он один фиг потеряется, у других форматов нет такого кретинизма) — результат не будет валидным для нужной схемы. G>>Это ты о чем? На обоих концах .NET приложение — пох что там потеряется, на сервере .NET, на клиенте javascript — тоже отлично работает. C>Endpoint может быть не .NET-овым.
Если не .NET, значит js — см выше.
C>И WCF предоставляет возможности роутинга сообщений и проксики. И там оно всё начинается...
И что?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, vladimir.vladimirovich, Вы писали:
C>>>Ну таки да. Что именно умеет WCF — я тебе (почти) всё сделаю с помощью этой комбинации. Ты учти, что туда можно ещё всякий Mule воткнуть и прочие извращения. VV>>С помощью TCP вообще можно то же самое сделать. ага... C>Ты мне задачу опиши, а я расскажу как на Java сделать.
Я чего-то не пойму, или это десятка полтора строк, заодно в полностью асинхронном варианте?
@defer.inlineCallbacks
def xmlrpc_process_submission(self, submission):
if should_reject(submission):
defer.returnValue({ "result": "rejected" })
if should_resubmit(submission):
defer.returnValue({ "result": "resubmit" })
for v in self.vendors:
result = yield remote_call(v, submission)
if result.success:
break
else:
defer.returnValue({ "result": "unapproved" })
yield save_to_db(result.whatever)
defer.returnValue({ "result": "accepted" })
Модный GUI — конечно, хорошо, но три поставщика отдельными блоками вместо цикла наводят на мысль о том, что оно просто не умеет оформлять циклы. О замене программирования перетаскиванием блоков туда-сюда говорят уже давно, но ничего дельного пока не замечено.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, gandjustas, Вы писали:
G>>Вот отличный пример G>>http://msdn.microsoft.com/en-us/magazine/ff646977.aspx
RO>Я чего-то не пойму, или это десятка полтора строк, заодно в полностью асинхронном варианте? RO>
RO>@defer.inlineCallbacks
RO>def xmlrpc_process_submission(self, submission):
RO> if should_reject(submission):
RO> defer.returnValue({ "result": "rejected" })
RO> if should_resubmit(submission):
RO> defer.returnValue({ "result": "resubmit" })
RO> for v in self.vendors:
RO> result = yield remote_call(v, submission)
RO> if result.success:
RO> break
RO> else:
RO> defer.returnValue({ "result": "unapproved" })
RO> yield save_to_db(result.whatever)
RO> defer.returnValue({ "result": "accepted" })
RO>
1)Действие Ask vendor работает гораздо интереснее, чем один remote call, оно во время запроса у вендору умеет отвечать на запросы пользователя о состоянии процесса?
2)Я не очень в курсе на чем работает приведенный тобой код, но есть сомнения что все вызовы, входящие и исходящие, можно будет произвольно настраивать, в том числе в рантайме?
3)Приведенный тобой код умеет выгружаться в случае простаивания по какой-либо причине, переживет ли перезагрузку сервера?
4)Как отследить потом работу сервиса?
5)Как клиентский api выглядеть будет?
RO>Модный GUI — конечно, хорошо, но три поставщика отдельными блоками вместо цикла наводят на мысль о том, что оно просто не умеет оформлять циклы.
Цикл будет гораздо менее нагляден. Вообще цикл — плохой инструмент для декларативной разработки.
RO>О замене программирования перетаскиванием блоков туда-сюда говорят уже давно, но ничего дельного пока не замечено.
Наоборот, существует тенденция замены блоков\xml на DSL или скриптовые языки. В WF тоже такое есть, но по наглядности блоки со стрелочками покачто рулят.
Здравствуйте, Cyberax, Вы писали:
C>Ну таки да. Что именно умеет WCF — я тебе (почти) всё сделаю с помощью этой комбинации. Ты учти, что туда можно ещё всякий Mule воткнуть и прочие извращения.
В очередной раз убеждаюсь, что ты плохо представляешь себе предмет спора. Надергал какие то обрывки из статей, а остальное додумал. Нет, WCF это не Spring+JMS даже близко.
Здравствуйте, gandjustas, Вы писали:
C>>Эээ... А кто мешает-то? Mule — это что-то около 5Мб jar-ников в не очень навороченной конфигурации. Тупо подключаешь их через Spring и вперёд с песней. G>Примеры есть?
Я так лично делал. Причём ещё с монитором распределённых транзакций (http://www.atomikos.com/). Всё полностью уместилось в 10Мб вместе с кучей дополнительных библиотек.
G>>>Все виды security должны работать если поддерживаются каналом. C>>Как ты подпишешь сообщение JSON? G>Буду использовать HTTPS, если уже очень надо, то можно расширение протокола http забабахать, хотя смысла в этом не вижу. G>Так или иначе логика сервера и клиента не поменяется.
HTTPS — это канальный уровень, а не уровень сообщений. Вот XMLDSIG — это уровень сообщений, но не канальный.
G>>>Мул кстати платный. C>>Кстати нет: http://www.mulesoft.org/mule-community-vs-mule-enterprise — у них определённая часть платная только. G>Community Edition — Evaluation or pre-production use... G>Для продакшена — платный.
Не, ну хватит бред нести.
Mule Community Edition доступен под http://en.wikipedia.org/wiki/Common_Public_Attribution_License , которая является weak copyleft-лицензией. Т.е. ты не обязан открывать исходный код своего приложения, но должен открыть исходный код Mule ESB и изменений в нём.
C>>Это просто для .NET нет нормального обобщённого API для мониторинга (WMI must die). G>WMI позволяет управлять и мониторить все, а JMX — то что на жабе написно, кагбе разная мощность технологий.
Не всё. Мой Линуксовый сервер через WMI не получится мониторить, так же как и сетевой принтер и роутер.
Для общего мониторинга есть SNMP, с которым JMX стыкуется без проблем. Только нафиг это надо?
G>>>А ссылки в нем — обычные URI C>>Добавь сюда гетерогенные сети и станет интересно G>А какая разница?
Файрволы и всё такое.
G>>>Никак, просто контракт, не поддерживающий callback. Хотя никто не мешает тот же JSON гонять по net.tcp с callback. C>>Так вот в том-то и проблема. G>В чем? Пока клиенты json сервисов, а это на 99% javascript, не научится работать с callback, то смысла в таком решении нету. G>Надо реальные проблемы решать, а не абстрактные.
Так проблема реальная. Пришлось делать Comet-подобный транспортный протокол.
G>>>Это ты о чем? На обоих концах .NET приложение — пох что там потеряется, на сервере .NET, на клиенте javascript — тоже отлично работает. C>>Endpoint может быть не .NET-овым. G>Если не .NET, значит js — см выше.
Вы можете выбрать машину любого цвета, при условии, что этот цвет — чёрный.
WCF стыкуется с кучей всего, по заявлением MS. А на практике...
C>>И WCF предоставляет возможности роутинга сообщений и проксики. И там оно всё начинается... G>И что?
И то. Нету красоты.
Здравствуйте, Ночной Смотрящий, Вы писали:
C>>Ну таки да. Что именно умеет WCF — я тебе (почти) всё сделаю с помощью этой комбинации. Ты учти, что туда можно ещё всякий Mule воткнуть и прочие извращения. НС>В очередной раз убеждаюсь, что ты плохо представляешь себе предмет спора. Надергал какие то обрывки из статей, а остальное додумал. Нет, WCF это не Spring+JMS даже близко.
Ну так объясни что же это такое?
Здравствуйте, Ночной Смотрящий, Вы писали:
C>>...и это только мои личные примеры... НС>А теперь посчитай количество абрривеатур и технологий, которые ты в своем сообщении помянул.
И что? По сути возражений нет — иди лесом.
Здравствуйте, Cyberax, Вы писали:
НС>>А теперь посчитай количество абрривеатур и технологий, которые ты в своем сообщении помянул. C>И что?
Поясню. Любая практически задача может быть решена пачкой библиотек и рукопашным кодированием. Вопрос в том, насколько качественно и какой ценой. Чем больше разноплановых библиотек (особенно таких монстров как Spring) вовлечено в решение задачи, тем означенная цель менее достижима. Все просто.
C> По сути возражений нет — иди лесом.
Это по сути. Лесники, кстати, очень часто в баньке бывают. Меня вот ни разу не банили, а тебя?
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>>>А теперь посчитай количество абрривеатур и технологий, которые ты в своем сообщении помянул. C>>И что? НС>Поясню. Любая практически задача может быть решена пачкой библиотек и рукопашным кодированием. Вопрос в том, насколько качественно и какой ценой. Чем больше разноплановых библиотек (особенно таких монстров как Spring) вовлечено в решение задачи, тем означенная цель менее достижима. Все просто.
Запустил Hello World. Посчитал сколько в этом участвовало аббревиатур: .NET, CLI, CLR, MSVS, C#, GC. Нее... На C# писать нельзя.
Всё твоё возражение сводится к: "а оно выглядит страшно, я с этим никогда не работал, оно работать не будет". Как всегда.
Который раз ты уклоняешься от точного ответа, когда к стенке фактами припрут.
C>> По сути возражений нет — иди лесом. НС>Это по сути. Лесники, кстати, очень часто в баньке бывают. Меня вот ни разу не банили, а тебя?
А мне пофиг. Полезного на RSDN всё равно ничерта нет.
Здравствуйте, Ночной Смотрящий, Вы писали:
C>>Ну так объясни что же это такое? НС>Смысла не вижу тратить силы. Ты все равно никогда не слушаешь.
Слушаю. Ты, главное, факты приводи.
Здравствуйте, Cyberax, Вы писали:
C>Запустил Hello World. Посчитал сколько в этом участвовало аббревиатур: .NET, CLI, CLR, MSVS, C#, GC.
И все из них прекрасны!
C>Нее... На C# писать нельзя.
Ну и не пиши, а то напишешь фигню какую-нить и потом из-за нее .Net на форумах ругать будут!
C>Всё твоё возражение сводится к: "а оно выглядит страшно, я с этим никогда не работал, оно работать не будет". Как всегда.
Помнишь эксперимент в Alien 4 и фразу "Убееееей меня"? Вот это про то как в линуксе разработка делается! Зверюшку лучше пристрелить штоб не мучалась!
C>Который раз ты уклоняешься от точного ответа, когда к стенке фактами припрут.
Ну эт не ко мне
C>А мне пофиг. Полезного на RSDN всё равно ничерта нет.
Здравствуйте, squid, Вы писали:
C>>Всё твоё возражение сводится к: "а оно выглядит страшно, я с этим никогда не работал, оно работать не будет". Как всегда. S>Помнишь эксперимент в Alien 4 и фразу "Убееееей меня"? Вот это про то как в линуксе разработка делается! Зверюшку лучше пристрелить штоб не мучалась!
Странно, работаю в IntelliJ IDEA в Линуксе и всё ОК.