Трехуровневое (не веб) приложение базы данных в Java - какие API / технологии подходят? - PullRequest
3 голосов
/ 29 июня 2010

В настоящее время я нахожусь в стадии исследования для (очень) небольшого приложения базы данных.

Это для местной благотворительной организации, которая имеет только 3 или 4 клиентских компьютера, на которых будет работать система - однако для того, чтобы отдалить какую-то постороннюю логику от клиентов, я склоняюсь к использованию трехуровневой архитектуры(существуют данные, которые постоянно читаются и обновляются в случае необходимости, о которых клиенту не нужно знать)

т.е. клиент <-> логика сервера <-> база данных

пока яЯ компетентен в самой Java и нескольких фреймворках / библиотеках, я не особо знаком с тем, какие фреймворки могут мне здесь помочь.Очевидно, что я буду использовать JDBC для половины базы данных, но связь между клиентом и сервером в настоящее время является камнем преткновения - я действительно не хочу приближаться к необработанным сокетам, например (перебор или, по крайней мере, другойрешение должно существовать)

Я спросил нескольких знакомых разработчиков об их мнении о том, какие API использовать, и, хотя они были очень полезны, я все еще не уверен, куда идти.До сих пор я слышал о материалах RESTful, SOAP, COBRA и множестве других технологий.SOAP является основным, который привлек мое внимание (поскольку есть несколько хороших примеров использования его с обычными приложениями, а не только с Интернетом), но я все еще не уверен, куда идти - он не кажется особенно подходящим для общегонапример, целевое приложение (EJB также появилось, но я слышал много ненависти, нацеленной на него - это заслуженно?)

Такое ощущение, что для того, чтобы найти «лучший инструмент для работы», яна самом деле нужно изучить все целиком, чтобы «получить» их (что, очевидно, нецелесообразно)

Может ли кто-нибудь дать мне руководство о том, как выбирать API-интерфейсы, подобные этим (если я их раньше не использовал) илидайте мне информацию о нескольких распространенных, или это действительно просто эксперимент с большим количеством из них, чтобы увидеть, что подходит лучше всего?

Или, может быть, я полностью пропустил отметку, и есть структура, которая нацеленав этой точной ситуации без очевидных минусов?

Большое спасибо за любую помощь.

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

Полностью забыл упомянутьЧто он на самом деле делает: он не очень сложный - благотворительная организация использует транспортную схему, поэтому в ней хранятся сведения о драйверах, клиентах, учет пробега и т. д. для просмотра и редактирования. Единственная реальная сложность связана с приводами, поскольку водители могутбыть назначенным на повторяющиеся (текущие) движения, которые в обозримом будущем могут продолжаться «навсегда».Но каждый экземпляр текущего накопителя должен быть уникальным, потому что его можно отменить или отредактировать по отдельности

Основная причина, по которой я ловлю трехуровневую модель, заключается в том, что я занимаюсь благотворительностью (со многими пожилыми пользователями компьютеров-добровольцев, которые не 'ужасно «сообразительный») Я вполне могу обновлять интерфейс довольно часто, чтобы сгладить ошибки и недочеты, которые не очень понятны для начинающих пользователей.Поэтому я планирую сначала сделать бэкэнд между сервером и БД абсолютно «пуленепробиваемым», а затем сосредоточить все внимание на пользовательском интерфейсе, чтобы я мог продолжить разработку и итерацию, не беспокоясь о бэкенде (также, поскольку я будуудаленная разработка отдельных компонентов, фокусировка обновлений на стороне клиента немного проще)

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

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

Для самого сервера вам понадобится какой-то сервер JavaEE.

Обычными реализациями здесь являются GlassFish (эталонная реализация) и Apache Tomcat ... при условии, что вам не нужно ничего более продвинутого, чем контейнер сервлета. Скорее всего, вы не будете, если вы просто используете веб-сервисы.

Для клиента я предполагаю, что у вас будет приложение с графическим интерфейсом, предположительно, использующее Swing или SWF. Вы также можете создать веб-приложение, поскольку вы уже подключили веб-сервер.

Для связи между клиентом и сервером вы можете использовать реализацию JAX-WS (веб-службы SOAP) или JAX-RS (службы RESTful).

Реализации JAX-WS включают Metro Sun (который поставляется как часть Java 6 SE ) или Apache CXF .

Реализации JAX-RS включают Джерси и Apache CXF .

Что касается уровня базы данных, JDBC - не единственный ваш выбор. В Java также имеется API персистентности Java (JPA, в настоящее время версия 2.0).

JPA обычно используется в приложениях J2EE (в частности, веб-приложениях) для упрощения слоя базы данных. Распространенными реализациями являются EclipseLink JPA (устарел Oracle TopLink) и Hibernate * Аннотации .

Все они основаны на различных стандартах JavaEE: Servlet 2.5, JAX-WS 2.0, JAX-RS 1.1 и JPA 2.0.

1 голос
/ 29 июня 2010

EJB также появился, но я слышал много ненависти, нацеленной на него - это заслужено?

Это было полностью заслужено с версиями 1 и 2 спецификации EJB.Но EJB v3 представляет собой огромное упрощение, которое делает их совершенно приятными в использовании.На самом деле, я могу с чистой совестью рекомендовать использовать бины сущностей вместо JDBC вручную.

Что касается протокола связи, выставление EJB-объектов в качестве сервисов REST или SOAP в новейшей спецификации EJB 3.1 абсурдно просто - все, что требуется, - это добавить несколькоаннотации и все готово!

...