2009-09-04 1 views
4

У меня есть существующая база данных (PostgreSQL в моем случае) и вы хотите получить доступ к ее данным (создавать, читать, обновлять, удалять, запрашивать) через веб-службы SOAP. Что мы делаем сейчас, имеем реализацию JPA каждого Entity и реализуем общий интерфейс CRUD. Затем мы выставляем эти компоненты как веб-службы JaxWS. Проблема с этой настройкой заключается в том, что JaxWS ведет себя странно с помощью общих интерфейсов.Есть ли инструмент с открытым исходным кодом для публикации существующей базы данных в виде набора WebServices

Поскольку это такая распространенная проблема, обращаясь к БД через WS, я хотел бы знать, есть ли решение с открытым исходным кодом, которое будет отображать все таблицы сущностей в качестве веб-служб. Такой инструмент потребует ввода набора классов JPA (или некоторого другого описания данных) или даже соединения JDBC (чтобы вытащить схему SQL) и создаст набор веб-сервисов CRUD.

В идеале такой инструмент будет состоять в основном из сервлета, который может быть встроен в любое веб-приложение.

Пожалуйста, расскажите, пожалуйста, ваши предложения для такого инструмента, и если у вас есть опыт использования, пожалуйста, поделитесь.

Спасибо советы

ответ

3

Извиняюсь за не отвечая на вопрос, и вместо того, чтобы говорить «вы не хотите, чтобы сделать это», но ...

Во-первых, вам не нужно делать это , Ваша база данных уже напрямую предоставляет веб-службы? Например, DB2 UDB and its tooling выполняет эту работу за вас. Не нужно вообще писать Java.

Во-вторых, может быть, вы не должны это делать? Это в значительной степени архитектурный анти-шаблон, чтобы выставить свой слой сущности непосредственно как веб-службу. Степень детализации делает работу неэффективной и трудно поддерживать в долгосрочной перспективе. Веб-сервисы в целом, как правило, лучше, чем довольно крупномасштабные бизнес-значимые услуги. Например, для создания Политики страхования может потребоваться несколько обновлений и вставок в несколько разных таблиц. Чтобы разоблачить доступ к исходной таблице, как веб-службы означает, что evey-клиент должен точно знать, что делать. Вместо этого вы увидите веб-сервис CreatePolicy() и пусть имплантирует собственный гнарный материал.

+0

Я согласен. Плохая идея разоблачить уровень сущности как веб-службы. Один из них потеряет способность одной из основных функций баз данных - свойства ACID транзакции. –

2

В нашем случае у нас многослойная архитектура, и одна из ее частей - это хранилище. Я не хочу потерять транзакции, но если мне нужно вставить нового клиента через веб-службу, и у меня есть сервисное обслуживание клиентов вместе с его определением схемы, которое может быть сгенерировано автоматически. Также следует отметить, что BPEL 2.0, насколько мне известно, поддерживает транзакции, поэтому данные службы данных могут быть осведомлены о транзакциях, то есть участвовать в распределенной транзакции.

Создать новую запись BLOG - это операция, которая МОЖЕТ быть выполнена в специальных транзакциях. В нашем проекте есть много других случаев (почти для каждой таблицы), и нам нужно подвергать их внешним системам. Зачем писать это вручную 100 раз. Как пишет автор ANTLR, если вы можете сделать что-то вручную через 5 дней, почему бы не потратить 5 лет на его автоматизацию.

Я не хочу проводить 5 лет и ищу готовое решение. В настоящее время мы полуавтоматизировали задачу, которая включает в себя генерацию кода, и самая большая проблема заключалась в том, что JaxWS не работает с универсальными интерфейсами.

Эта архитектура имеет свои преимущества, так как вы можете делать много классных вещей, например: - У вас есть набор аннотаций поверх классов сущностей, чтобы проверить разрешения ROLE. Эти проверки будут происходить независимо от того, как вы получаете доступ к своей сущности, веб-сервису или прямому java-вызову.Также вы можете определить крючки, например, создать фид RSS/Atom для всех операций в конкретной таблице. - Существует множество инструментов GUI-инструментов для типов сущностей, описанных в XSD, для автоматического создания формы. Я не хочу создавать все формы, но по крайней мере имею реализацию по умолчанию, которую можно заменить.

То, что я ищу, фактически протокол абстракции доступа к данным, которые могут быть backended базой данных или что-то еще, в конце экспорта себя как веб-сервисы (мыло/успокоительное/JSON угодно)

Существует этот Проект инкубации Apache, EmpireDB, это круто: они не используют аннотации и javaclasses для определения модели, так что метаданные можно было бы проще использовать для создания XSD и форм. Мне не нравится использовать нестандартный стандартный проект, поэтому я ищу готовое решение на основе стандартных технологий: JPA (например, спящий режим), JaxWS.

+0

WS-AtomicTransaction позволяет вам распределять транзакции, для этого вам не требуется BPEL. Будет ли он работать хорошо, это совершенно другой вопрос. Полностью согласен с тем, что ** если ** вы собираетесь это сделать, то инструментарий - это путь. Какую БД вы используете? Не имеет и встроенная поддержка WS? Не могли бы вы использовать http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html для создания собственного кода? Если есть шаблон regualr к тому, что вы создаете, это может быть удивительно легко. – djna

+0

thanx для указания, что BPEL слишком много. PostgreSQL, но я не знаю, что он делает автоматическую презентацию WS. Я уверен, что Oracle это делает. Не удалось найти способ встраивания JET в стандартный maven build cicle, поэтому я написал набор рискованных скриптов, чтобы пройти классы моделей и генерировать неструктурные интерфейсы/классы для JaxWS. T – tzador