Хорошо, давайте начнем:
Наш клиент следует принципам SOA и имеет очень тонкие веб-службы разработки, такие как createCustomer, deleteCustomer и т. Д.
Нет,клиент забыл достичь принципов SOA и создать то, что делает большинство людей - куча плохо определенных интерфейсов.В соответствии с принципами SOA, клиент использовал бы более грубый интерфейс (такой как, например, механизм OData для обновления данных) или следовал советам любой книги по многоуровневой архитектуре, написанной, как за последние 25 лет.SOA - это еще одно слово для того, что было изобретено с помощью CORBA, и все ошибки, которые парни из SOA совершают сегодня, когда в основном известны глупости проектирования 10 лет назад с CORBA.Не то чтобы кто-либо из людей, занимающихся SOA сегодня, когда-либо слышал о CORBA.
Я не уверен, желательны ли мелкозернистые сервисы, поскольку они создают проблемы, связанные с транзакциями.
Только для пользователей и платформ, не поддерживающих веб-сервисы.Шутки в сторону.Естественно, вы получаете транзакционные проблемы, если вы игнорируете транзакционные проблемы в своем программировании.Хитрость в том, что люди, находящиеся дальше по пищевой цепочке, этого не делали, просто ваш клиент решил игнорировать общеизвестные знания (опять же, смотрите мое первое замечание о Corba).
Люди, разрабатывающие веб-сервисы, хорошо знали о транзакционных проблемах.Именно поэтому спецификация веб-службы (WS *) фактически содержит механизмы для обработки целостности транзакций путем перемещения операций фиксации до клиента, вызывающего веб-службу.Конкретная спецификация, которую должен прочитать ваш клиент, - это WS-Atomic.
Если вы используете текущую технологию для представления своего веб-сервиса (также как WCF на платформе MS, аналогичные технологии существуют в мире Java), тогда вы можетепредоставить клиенту информацию о потоке транзакции и позволить клиенту обрабатывать демаркацию транзакции.У него есть свои проблемы, такие как клиенты, которые держат транзакции открытыми злонамеренно, но все же это единственный способ обработки транзакций, которые определены в клиенте.
Поскольку вы не предоставляете платформу и просто упоминаете Java,Я указываю вам на пример MS, как это может выглядеть: http://msdn.microsoft.com/en-us/library/ms752261.aspx
Веб-сервисы, в общем, гораздо более мощные и намного более продуманные, чем думают большинство людей, занимающихся SOA.Большинство проблем, которые они видят, были решены давно.Но тогда, SOA - это просто модное слово для многоуровневой архитектуры, но большинство людей думают, что это величайшая вещь, так как нарезанный хлеб просто не знает, что было около 10 лет назад.
Как ваш клиент, я был бынамного больше заботиться о производительности.Мелкозернистые несемантические веб-сервисы, как он определяет, являются скачком производительности для не случайного использования, потому что количество раз, когда вы пересекаете сеть, чтобы запрашивать / обновлять мелкие мелкие мелкие мелочи, заставляет задержку сети убивать вас.В этом сценарии создание заказа на примерно 10 товаров может легко занять 30-40 сетевых звонков, что действительно может занять много времени.SOA с самого начала проповедует (если вы игнорируете разговоры тех, кто не знает истории), чтобы НЕ использовать мелкозернистые вызовы, а идти на грубый обмен документами и / или семантический подход, очень похожий на систему OData.