Вот описание сценария, и я был бы признателен также за любые комментарии по используемому подходу
Ядром моего приложения является набор веб-сервисов, поддерживаемых базой данных P2P.Один сервис принимает простую запись на основе XML (я разработал для нее общую схему).Служба обрабатывает эти данные (главным образом, создавая ключи на основе определенных критериев) и передает исходные данные вместе с созданными ключами в прослушивающий SocketServer в одном из прослушивающих P2P-узлов.Этот ключ, пара данных направляется на соответствующий узел, который хранит данные (связанные с ключом в качестве идентификатора) в базе данных XML.
Вторая служба принимает документ запроса, структурированный на основе того жесхема, но с дополнительными значениями, которые будут использоваться для поиска и сопоставления с ранее сохраненными.Таким образом, вторая служба будет передавать этот запрос (с соответствующими ключами) в P2P-часть, возвращать результаты и передавать их обратно клиенту службы.
Например, если исходная запись, отправленная первой службе, была value1 </ attr1> value2 </ attr2> (список атрибутов вместе с некоторыми другими метаданными, предусмотренными схемой), тогда вторая служба должна извлечь эту запись, если полученный запрос был value2 </ attr2>
(Позже я мог бы подумать об использовании более сложных запросов XPath или XQuery, поскольку базовая база данных XML позволяет вместо точных совпадений значений здесь, но это не важно на данном этапе. Есть также третий сервис, над которым я работаюно это зависит от получения первых двух в правильной форме первым)
Итак, мои вопросы:
1) Какой тип данных я должен использовать в качестве параметров веб-служб?Как использовать мою схему для этого использования?Я рассматривал различные структуры связывания XML (особенно JAXB и SDO) для этого, но не знал, как поступить.
2) Как я могу улучшить две службы (назвать их хранить и искать) для использования динамически создаваемыхшаблоны на основе оригинальной общей схемы?Служба будет по-прежнему принимать документы основного типа схемы, но имеет внутренний список атрибутов, основанный на шаблоне, скажем, что для template1 требуются только значения ints, а для template2 требуются (float) и (string).Текущий прототип на основе JSP создает этот шаблон вручную, но в виде XML-документа, который собирается вручную (тэги <> разбросаны по тексту), и нет никакой проверки типов, поэтому я подумал, что могу добиться большего!
3) Можно ли создать быстрый прототип веб-приложения для простого доступа к этой системе (опять же, используя схему (и шаблоны) для редактирования соответствующих структур сообщений XML? Что я ищу, так это (человек), чтобы выбрать шаблон, а затем просто «заполнить пробелы» и отправить, нет необходимости в каких-либо причудливых взглядах.
4) Могу ли я или как я также могу использовать этот тип сообщения XML для общениячерез сокеты?
5) Имеет ли значение, развертываю ли я сервисы как EJB без сохранения состояния или нет?Нужно ли, чтобы они были EJB-компонентами или сервлетов было бы более чем достаточно?
В настоящее время у меня есть элементарная реализация (от предыдущих разработчиков), предназначенная для подмножества моих текущих требований (я улучшаю службы идобавление новых производных), но схемы и проверки не было, и данные все время передаются в виде базовых строк, что обеспечивает слабую типизацию и затрудняет обновление ручного анализа.Причина, по которой я хочу обновить это для более строгой типизации, состоит в том, чтобы внести изменения в схему данных, которые будут легко передаваться по всей системе.По сути, я хочу, чтобы система была как можно менее связана с используемым форматом данных / схемой;текущий прототип слишком связан с данными, и мне очень трудно изменить данные, не нарушая систему.
Мое первоначальное расследование привело меня к рассмотрению JAXB, но он поддерживает только статическую типизацию (не может динамически создавать схему / типы во время выполнения, которые я хочу сохранить для дальнейшего использования). Таким образом, я столкнулся с SDO, который имеет как динамическую, так и статическую типизацию. Проблема только в том, что не хватает сообщества и / или примеров использования этого подхода, поэтому он кажется рискованным (примеры реализаций Apache Tuscany и Eclipselink очень скудны, и я не смог найти полных примеров, которые не старше 5 лет (например, this http://www.ibm.com/developerworks/java/library/j-sdo/), а также относится к сценарию использования SDO в XML (большинство, похоже, фокусируется на реляционном использовании SDO).
Я впервые обращаюсь за помощью в программировании (здесь и в других местах), поэтому, пожалуйста, потерпите меня. Я много искал в сети, но не смог найти ничего полезного, кроме кусочков, которые не складывались.
Любой комментарий или подсказка действительно приветствуются.
trfndr
РЕДАКТИРОВАТЬ
Я забыл одну вещь: как служба поиска вернет результаты? Поскольку он открывает соединение с клиентским сокетом, невозможно получить какие-либо результаты синхронно. Текущая реализация решает эту проблему, когда клиент службы открывает сокет прослушивания на случайном порту и помещает эту контактную информацию в документ запроса. После того как поисковый веб-сервис отправляет запрос в p2p-часть, он завершает свою работу. P2p отправляет результаты в виде вызова WS в другую службу, которая отправляет их обратно в сокет клиента службы. Мне не очень нравится этот подход, есть ли более элегантное решение?