2010-06-29 4 views
3

В настоящее время я нахожусь в стадии исследования для небольшого приложения базы данных.Трехъярусное (не веб-приложение) приложение базы данных на Java - какие API/технологии подходят?

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

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

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

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

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

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

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

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

EDIT:

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

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

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

+0

Возможно, вы могли бы объяснить, насколько сложным является ваше приложение? –

+0

@Romain - Да, ты абсолютно прав. Обновленный вопрос соответственно, приветствия –

ответ

2

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

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

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

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

Варианты исполнения JAX-WS включают в себя Metro ВС (который поставляется как part of Java 6 SE) или Apache CXF.

Реализации JAX-RS включают в себя Jersey и Apache CXF.

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

JPA обычно используется в приложениях J2EE (специально для веб-приложений) для упрощения уровня базы данных. Общие реализации: EclipseLink JPA (oborsletes Oracle TopLink) и HibernateAnnotations.

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

+0

Спасибо за все ссылки + информацию - дайте немного больше ясности о том, как все эти кусочки техники. подходить друг другу. Но единственная проблема, с которой я столкнулся, - это вопрос, который я должен был начать - как я могу выбрать между этими комбинациями технологий? Это чисто личный вкус к тому, с чем вам нравится, или они преуспевают в конкретных вещах? Например, чтобы выбрать из JAXWS или JAXRS? –

+0

'JAX-WS' более широко поддерживается, чем' JAX-RS', если это помогает ... это даже в стандартном JRE, поэтому вам не нужно включать в него отдельную библиотеку (хотя вы можете выбрать на стороне сервера, поскольку я слышал, что CXF легче справиться). – Powerlord

1

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

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

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

+0

Я согласен с тем, что EJB 3.x намного проще, я просто задаю вопрос о необходимости среднего уровня в его случае. Конечно, со средним уровнем вы вводите еще один пункт администрирования и еще один момент неудачи. –