(Java) Как я могу пропустить подтвержденные схема XML-документы в качестве параметров между распределенными компонентами (например, веб-сервисы или розетки)?

StackOverflow https://stackoverflow.com/questions/3565160

Вопрос

Вот описание сценария, и я был бы признателен и любые комментарии по использованию подхода

Ядро моего приложения - это набор веб-сервисов, поддерживаемых базой данных P2P. Один услуг принимает простую запись на основе XML (я разработал общую схему для него). Сервис обрабатывает эти данные (в основном создавая ключевые ключи на основе определенных критериев) и передавать исходные данные вместе с созданными клавишами для прослушивания SocketServer в одном из узлов P2P прослушивания. Этот ключ, пара данных направляется в правильный узел, который хранит данные (связанные с ключом в качестве идентификатора) в базе данных XML.

Вторая служба принимает документ запроса, который является структурированным на основе одной и той же схемы, но с дополнительными значениями, которые будут использоваться для поиска и сопоставления от ранее сохраненных. Таким образом, вторая служба передаст этот запрос (с соответствующими ключами) к части P2P, верните результаты и передайте их обратно на обслуживающий клиент.

Например, если оригинальная запись, представленная на первую службу, было <attr1> значение1 </ attr1> <attr2> value2 </ attr2> (список атрибутов вместе с некоторыми другими метаданными, предусмотренными схемой), то вторая служба должна получить эту запись, если Полученный запрос был <attr2> Value2 </ attr2>

(Я мог бы позже подумать о том, чтобы использовать более сложные запросы XPath или XQuery, поскольку основная база данных XML позволяет вместо точных совпадений для значений здесь, но это не важно на этом этапе. Есть также третья служба, на которой я работаю, но это зависит от Первые два в правильной форме сначала)

Так что мои вопросы:

1) Какой тип данных я должен использовать в качестве параметров веб-сервисов? Как использовать мою схему для этого использования? Я рассматривал различные структуры связывания XML (особенно JAXB и SDO), но не знал, как продолжить.

2) Как я могу улучшить две услуги (позвоните им хранилище и поиск), чтобы использовать динамически созданные шаблоны на основе оригинальной общей схемы? Сервис все равно будет принимать документы основного типа схемы, но имеет список внутреннего атрибута, основанного на шаблоне, скажем, Template1 требуется только чьи значения INT, когда Template2 требуют (поплавок) и (строка). Текущий прототип на основе JSP вручную создает этот шаблон, но как документ XML, который собирается вручную рукой (<> теги, диспергированные в тексте), и нет типа проверки того, что так, как я думал, что смогу сделать лучше!

3) Можно ли создать быстрый прототип веб-приложения для простого доступа к этой системе (снова с помощью схемы (& шаблоны) для редактирования соответствующих структур сообщений XML? Что я ищу, это для (человека) пользователя, чтобы выбрать Шаблон, а затем просто «заполнить пробелы» и отправьте, нет необходимости каких-либо проблемных взглядов.

4) Могу ли я или как можно также использовать этот тип сообщения XML для общения по сокетам?

5) Это имеет значение, если я развернул услуги как EJBS без гражданства или нет? Нужно ли они быть EJBS или Servelets были бы более чем достаточно?

В настоящее время у меня есть элементарная реализация (от предыдущих разработчиков), которые были предназначены для подмножества моих текущих требований (я улучшаю службы и добавляю новые производные), но не было никакой схемы, ни проверки, и данные передаются всему как основные Строки, обеспечивающие слабые печатание и трудно обновлять ручное распределение. Причина, по которой я хочу обновить это на более сильную границу, - это ввести изменения в схему данных, которые легко переданы по всей системе. В основном я хочу, чтобы система была настолько менее связанной с форматом / схемыми данных / схемыми данных; Текущий прототип слишком связан с данными, которые я нахожу, что это чрезвычайно трудно изменить данные, не нарушая систему.

Мое первоначальное исследование привело меня к рассмотрению JAXB, но он поддерживает только статическое набрав (динамически не может создавать схема / типы при выполнении времени выполнения, которые я хочу сохранить для последующей использования). Поэтому я наткнулся на SDO, который имеет динамические, так и статические печатающие. Проблема в том, что не хватает сообществ и / или примеров использования этого подхода, поэтому кажется рискованным (примеры реализаций Apache Tuscany и EclipseLink очень мало, и я не смог найти полные примеры, которые не являются 5+ лет (например, это http://www.ibm.com/developerworks/java/library/j-sdo/) А также посвящены XML в случае использования SDO (большинство, кажется, сосредоточены на реляционном использовании SDO).

Это мой первый раз, попросив помощи на программировании (здесь и в другом месте), поэтому, пожалуйста, нести меня. Я много искал в сети, но я не смог найти ничего полезных, но кусочков здесь и там, которые не добавили.

Любой комментарий или подсказка действительно ценится.

TRFNDR

РЕДАКТИРОВАТЬ

Я забыл одну вещь: как бы услуга поиска вернется результатами? Поскольку это открытие клиентского сокета соединение, нет способа вернуть любые результаты синхронно. Текущая реализация посвящена этому, имея службу клиента, открывающую разъем прослушивания на случайном порту и помещаю эту контактную информацию в документ запросов. После поиска Web Service отправляет запрос в часть P2P, она заканчивается. P2P отправляет результаты в виде вызова WS к другому сервису, которая отправляет их обратно на сервисный клиентский сокет. Мне очень нравится этот подход, есть ли более элегантное решение?

Это было полезно?

Решение

Я веду реализации ECLIPSELINK JAXB & SDO и представляете Oracle на этих спецификациях, поэтому, надеюсь, я могу помочь вам. Этот вопрос очень похож на разговор я даю в Javaone в сентябре.

1) Какой тип данных я должен использовать в качестве параметров веб-сервисов? Как использовать мою схему для этого использования? Я рассматривал различные структуры связывания XML (особенно JAXB и SDO), но не знал, как продолжить.

Это зависит от каких веб-структуры Web Service, которую вы используете. JAXB гораздо проще в использовании с JAX-WS, и в то время как JAXB все еще проще в использовании с JAX-RS SDO, является возможной альтернативой.

2) Как я могу улучшить две услуги (позвоните им хранилище и поиск), чтобы использовать динамически созданные шаблоны на основе оригинальной общей схемы? Сервис все равно будет принимать документы основного типа схемы, но имеет список внутреннего атрибута, основанного на шаблоне, скажем, Template1 требуется только чьи значения INT, когда Template2 требуют (поплавок) и (строка). Текущий прототип на основе JSP вручную создает этот шаблон, но как документ XML, который собирается вручную рукой (<> теги, диспергированные в тексте), и нет типа проверки того, что так, как я думал, что смогу сделать лучше!

Я не на 100% то, что вы имеете в виду здесь, но следующее может быть полезным:

3) Можно ли создать быстрый прототип веб-приложения для простого доступа к этой системе (снова с помощью схемы (& шаблоны) для редактирования соответствующих структур сообщений XML? Что я ищу, это для (человека) пользователя, чтобы выбрать Шаблон, а затем просто «заполнить пробелы» и отправьте, нет необходимости каких-либо проблемных взглядов.

JAX-RS - хорошая рамка для создания быстрых прототипов. Ниже приведен пример, который я создал:

4) Могу ли я или как можно также использовать этот тип сообщения XML для общения по сокетам?

Я предпочитаю фреймворки, такие как JAX-RS, которые связываются по протоколу HTTP.

5) Это имеет значение, если я развернул услуги как EJBS без гражданства или нет? Нужно ли они быть EJBS или Servelets были бы более чем достаточно?

Мое предпочтение состоит в том, чтобы использовать сеансный боб EJB для обслуживания. Если вы взаимодействуете с базой данных, вы можете использовать API Java Transaction (JTA) для управления транзакциями базы данных.

Сортировать

EclipseLink это то SDO 2.1.1 (JSR-235) справочная реализация. У нас есть несколько примеров, размещенных ниже. Если вы смотрите, как сделать что-то конкретное, я постараюсь опубликовать соответствующий пример.

Jaxb.

JAXB статичен. Это также более популярно, чем SDO. Признавая это в EclipseLink Мы реализовали функцию динамического джакса. Это дает вам динамический аспект SDO с jaxb leant.

Редактировать # 1.

Поскольку вы имеете дело с JAX-WS, и ваша модель практически полностью динамична, я думаю, что вы должны совсем пропустить связывание JAXB. В следующей ссылке см. Раздел «Отключение привязки данных»

Это даст нам тело сообщения как javax.xml.transform.source объект. Нам нужно будет обработать XML на основе динамических шаблонов. SDO будет хорошим выбором здесь. Вы можете постоянно добавлять новые типы в HELPERCONTEXT, используя XML Schemas.

helperContext.getXSDHelper().define(schema1, null);
helperContext.getXSDHelper().define(schema2, null);

Вы сможете МООНВЧАТАЛЬНОЕ Источник из веб-сервиса следующим образом:

XMLDocument doc = helperContext.getXMLHelper().load(source, null, null);
DataObject rootDataObject = doc.getRootObject();
String someValue = rootDataObject.getString("attr3/childAttr/anotherChildAttr");

Вы также сможете использовать XMLHelper для маршала ваших объектов XML при вызове другого сервиса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top