JavaEE - нужна помощь
От: 20BW Казахстан  
Дата: 01.08.11 07:00
Оценка:
Доброго времени суток, Господа.

Задача следующая: написать на JavaEE продукт, который принимал данные с GPS трекеров. Т.е. трекер подключается к некоему приложению, и отправляет пакет данных, приложение пакет парсит и записывает в БД.

Проблема в том, что я не совсем понимаю как выстроить данное приложение. Т.е. не ясна общая структура подобных систем на Java. Поэтому прошу дать толчек в нужное направление. Или линк на статейки/книги.

Заранее прошу не пинать ногами и Спасибо!
Re: JavaEE - нужна помощь
От: stenkil  
Дата: 01.08.11 07:25
Оценка:
Здравствуйте, 20BW, Вы писали:

BW>Доброго времени суток, Господа.


BW>Задача следующая: написать на JavaEE продукт, который принимал данные с GPS трекеров. Т.е. трекер подключается к некоему приложению, и отправляет пакет данных, приложение пакет парсит и записывает в БД.

Ключевые слова: PostGIS, OpenLayers
Re: JavaEE - нужна помощь
От: C0s Россия  
Дата: 01.08.11 07:28
Оценка:
Здравствуйте, 20BW, Вы писали:

BW>написать на JavaEE продукт


JEE здесь как бы ни причём, я думаю

BW>Проблема в том, что я не совсем понимаю как выстроить данное приложение


достаточно standalone приложения (на ioc-контейнере, например, spring framework), которое внутри себя будет иметь listener и некоторую простую логику приёма-записи данных в БД
даже не зная, какую гамму коммуникационных протоколов gps-трекеры готовы поддержать, рискну предположить, что обычного http(https) listener'а будет достаточно, а способ упаковки данных в http-запрос будет зависеть исключительно от сложности их структуры
Re: JavaEE - нужна помощь
От: Donz Россия http://donz-ru.livejournal.com
Дата: 01.08.11 07:29
Оценка:
Здравствуйте, 20BW, Вы писали:

BW>Задача следующая: написать на JavaEE продукт, который принимал данные с GPS трекеров. Т.е. трекер подключается к некоему приложению, и отправляет пакет данных, приложение пакет парсит и записывает в БД.

BW>Проблема в том, что я не совсем понимаю как выстроить данное приложение. Т.е. не ясна общая структура подобных систем на Java. Поэтому прошу дать толчек в нужное направление. Или линк на статейки/книги.

Обычно три слоя. Зависимость между ними только сверху вниз, но не наоборот.
-Фронтовой (например, web-service). Принимает данные, проводит синтаксическую и интеграционную в рамках этих данных валидацию, трансформирует данные в доменные объекты и вызывает сервисный слой.
-Сервисный. В нем заложена вся бизнес-логика. Проводит валидацию интеграции поступивших данных со структурой БД и уже существующими данными. Выполняет саму логику работы.
-DAO. Содержит мэппинг доменных объектов на структуру БД. Выполняет примитивные операции с объектами: получить, сохранить, изменить. Не должен содержать какую-либо логику.

Фронт — веб-сервисы. Управление бинами через Spring Core (IoC контроллер). Если данных немного, то Hibernate в качестве ORM.
Re[2]: JavaEE - нужна помощь
От: 20BW Казахстан  
Дата: 01.08.11 08:14
Оценка:
Здравствуйте, Donz, Вы писали:

D>Здравствуйте, 20BW, Вы писали:


BW>>Задача следующая: написать на JavaEE продукт, который принимал данные с GPS трекеров. Т.е. трекер подключается к некоему приложению, и отправляет пакет данных, приложение пакет парсит и записывает в БД.

BW>>Проблема в том, что я не совсем понимаю как выстроить данное приложение. Т.е. не ясна общая структура подобных систем на Java. Поэтому прошу дать толчек в нужное направление. Или линк на статейки/книги.

D>Обычно три слоя. Зависимость между ними только сверху вниз, но не наоборот.

D>-Фронтовой (например, web-service). Принимает данные, проводит синтаксическую и интеграционную в рамках этих данных валидацию, трансформирует данные в доменные объекты и вызывает сервисный слой.
D>-Сервисный. В нем заложена вся бизнес-логика. Проводит валидацию интеграции поступивших данных со структурой БД и уже существующими данными. Выполняет саму логику работы.
D>-DAO. Содержит мэппинг доменных объектов на структуру БД. Выполняет примитивные операции с объектами: получить, сохранить, изменить. Не должен содержать какую-либо логику.

D>Фронт — веб-сервисы. Управление бинами через Spring Core (IoC контроллер). Если данных немного, то Hibernate в качестве ORM.


Спасибо. Не могли бы Вы назвать книги/статьи, где про все это можно прочитать? Хотя бы про общие концепции.
Re[2]: JavaEE - нужна помощь
От: 20BW Казахстан  
Дата: 01.08.11 08:17
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, 20BW, Вы писали:


BW>>написать на JavaEE продукт


C0s>JEE здесь как бы ни причём, я думаю


BW>>Проблема в том, что я не совсем понимаю как выстроить данное приложение


C0s>достаточно standalone приложения (на ioc-контейнере, например, spring framework), которое внутри себя будет иметь listener и некоторую простую логику приёма-записи данных в БД

C0s>даже не зная, какую гамму коммуникационных протоколов gps-трекеры готовы поддержать, рискну предположить, что обычного http(https) listener'а будет достаточно, а способ упаковки данных в http-запрос будет зависеть исключительно от сложности их структуры

Проблема в том, что этих трекеров может быть несколько сотен (если не тысяч), и данные они передают каждые 1-10 минут, в зависимости от настроек. Поэтому я полагаю, нагрузка будет не слабая, и следовательно нужна возможность масштабирования.
Re[3]: JavaEE - нужна помощь
От: C0s Россия  
Дата: 01.08.11 08:21
Оценка:
Здравствуйте, 20BW, Вы писали:

BW>Проблема в том, что этих трекеров может быть несколько сотен (если не тысяч), и данные они передают каждые 1-10 минут, в зависимости от настроек. Поэтому я полагаю, нагрузка будет не слабая, и следовательно нужна возможность масштабирования.


так это, не задача JEE, а задача поиска грамотного сисадмина в команду развёртывания. (dns, мапящийся не несколько фронтовых http-серверов, которые в свою очередь раунд-робят на уже упомянутые standalone-приложения)
Re[3]: JavaEE - нужна помощь
От: Donz Россия http://donz-ru.livejournal.com
Дата: 01.08.11 08:30
Оценка:
Здравствуйте, 20BW, Вы писали:

BW>Спасибо. Не могли бы Вы назвать книги/статьи, где про все это можно прочитать? Хотя бы про общие концепции.


По каждому фреймворку есть хорошая документация на сайте разработчиков. Плюс по Спрингу на РСДН есть хорошая статья: http://www.rsdn.ru/article/java/spring.xml
Автор(ы): Сергей Роговский
Дата: 12.07.2005
При создании программного обеспечения при помощи ООП очень часто связи между компонентами становятся сложнее, чем сами компоненты, это приводит к усложнению самих компонентов, которые в свою очередь становятся менее гибкими. В этой статье рассмотрены основные паттерны ослабления связей между компонентами системы, а также использование паттерна IoC в Sping Framework.
Требуется знание Java.

А вообще по разработке WS и других J2EE приложений сказать не могу.
Re[2]: JavaEE - нужна помощь
От: Donz Россия http://donz-ru.livejournal.com
Дата: 01.08.11 08:33
Оценка:
Здравствуйте, C0s, Вы писали:

BW>>написать на JavaEE продукт

C0s>JEE здесь как бы ни причём, я думаю

ИМХО, веб-сервисы тут отлично подходят. Зачем изобретать велосипед через сокеты и стенд-алон приложение? С одной многопоточностью можно огрести проблемы.
Re[4]: JavaEE - нужна помощь
От: 20BW Казахстан  
Дата: 01.08.11 08:36
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, 20BW, Вы писали:


BW>>Проблема в том, что этих трекеров может быть несколько сотен (если не тысяч), и данные они передают каждые 1-10 минут, в зависимости от настроек. Поэтому я полагаю, нагрузка будет не слабая, и следовательно нужна возможность масштабирования.


C0s>так это, не задача JEE, а задача поиска грамотного сисадмина в команду развёртывания. (dns, мапящийся не несколько фронтовых http-серверов, которые в свою очередь раунд-робят на уже упомянутые standalone-приложения)


Гм.. т.е. Вы советуете использовать обычное standalone-приложения... спасибо... подумаю...
Re[3]: JavaEE - нужна помощь
От: hrensgory Россия  
Дата: 01.08.11 08:39
Оценка:
On 01.08.2011 12:14, 20BW wrote:

> Спасибо. Не могли бы Вы назвать книги/статьи, где про все это можно

> прочитать? Хотя бы про общие концепции.

http://download.oracle.com/javaee/6/firstcup/doc/

Подробнее:

http://download.oracle.com/javaee/6/tutorial/doc/

С выходом Java Enterprise Edition 6 нужда в спринге (если рассматривать
его сугубо как IoC фреймворк) отпала:

http://download.oracle.com/javaee/6/tutorial/doc/gjbnr.html

Масштабируются jee приложения (судя по описанию задачи вам будет
достаточно web profile) нормально — просто размножаются в кластерах и
всё (разумеется, админам придётся в это вникнуть), главное не отходить
далеко от спеки и не тащить в HttpSession чего-нибудь тяжёлого или
несереализуемого.

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: JavaEE - нужна помощь
От: C0s Россия  
Дата: 01.08.11 08:40
Оценка:
Здравствуйте, Donz, Вы писали:

D>ИМХО, веб-сервисы тут отлично подходят. Зачем изобретать велосипед через сокеты и стенд-алон приложение? С одной многопоточностью можно огрести проблемы.


про сокеты я не говорил.
т.к. WS не на http-транспорте — это экзотика, то будем считать, что и там, и сям HTTP — будет.
дальше, я просто замечаю, что условия задачи никоим образом не требуют дополнительных библиотек или технологий "сверху", поэтому я бы обошёлся минимумом, а именно — http.
возможно, что минимум будет даже плюсом не только с точки зрения "учить и прикручивать на одну технологию меньше", но и в runtime — если там и вправду будет горячая нагрузка.
про многопоточность не понял. с ней, вообще, всегда можно огрести проблемы... ws здесь ничем не лучше, чем http handlers / servlets
Re[4]: JavaEE - нужна помощь
От: Donz Россия http://donz-ru.livejournal.com
Дата: 01.08.11 09:02
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>дальше, я просто замечаю, что условия задачи никоим образом не требуют дополнительных библиотек или технологий "сверху", поэтому я бы обошёлся минимумом, а именно — http.

C0s>возможно, что минимум будет даже плюсом не только с точки зрения "учить и прикручивать на одну технологию меньше", но и в runtime — если там и вправду будет горячая нагрузка.

Мэппинг на БД нужен. Или берем готовый фреймворк, или изобретаем свой.
Управление бинами нужно. Или берем Spring IoC (или CDI, как советуют ниже), или вколачиваем все зависимости молотком, или опять же изобретаем свой IoC контейнер.
Если будут коннекты по HTTP, очевидно, нужен веб-сервер. И опять: или изобретаем свой, или берем уже готовый. А еще лучше готовый веб-сервер с готовым низкоуровневым фреймворком, скрывающий от нас детали протокола и имеющий тучу надстроек, которые вообще сделают неважным, откуда и каким образом до нас приходят данные, в приложении мы будем оперировать привычными ява-объектами, а не xml'ем или параметрами get-запроса.

Обещанная нагрузка — сотни, возможно тысячи, запросов за 1-10 минут. Возьмем 5000 устройств, отсылающих данные каждые пять минут. 1000 запросов в минуту. 17 запросов в секунду. Учитывая, что алгоритмически задача простейшая и надо только складировать данные в БД, о какой-либо серьезной нагрузке речи не идет. Если не хватит одного сервера, то, как ты и сказал, просто добавляется еще один и балансировка обеспечивается на административном уровне, а не на разработческом.
Пытаться здесб что-то оптимизировать путем написания собственного хттп-сервера — это однозначно преждевременная оптимизация.

C0s>про многопоточность не понял. с ней, вообще, всегда можно огрести проблемы... ws здесь ничем не лучше, чем http handlers / servlets


Сервлеты — это уже J2EE. И сервлеты, и WS гораздо лучше собственного велосипеда тем, что потоками управляет сервлет-контейнер. В собственном велосипеде придется вручную создавать нити и следить, чтобы они друг друга не испортили.
Re[4]: JavaEE - нужна помощь
От: 20BW Казахстан  
Дата: 01.08.11 09:14
Оценка:
Здравствуйте, hrensgory, Вы писали:

H>On 01.08.2011 12:14, 20BW wrote:


>> Спасибо. Не могли бы Вы назвать книги/статьи, где про все это можно

>> прочитать? Хотя бы про общие концепции.

H>http://download.oracle.com/javaee/6/firstcup/doc/


H>Подробнее:


H>http://download.oracle.com/javaee/6/tutorial/doc/


H>С выходом Java Enterprise Edition 6 нужда в спринге (если рассматривать

H>его сугубо как IoC фреймворк) отпала:

H>http://download.oracle.com/javaee/6/tutorial/doc/gjbnr.html


H>Масштабируются jee приложения (судя по описанию задачи вам будет

H>достаточно web profile) нормально — просто размножаются в кластерах и
H>всё (разумеется, админам придётся в это вникнуть), главное не отходить
H>далеко от спеки и не тащить в HttpSession чего-нибудь тяжёлого или
H>несереализуемого.

H>--

H>WBR,
H>Serge.

Вот! Вот это я и искал! Огромное спасибо. Буду изучать.
Re[5]: JavaEE - нужна помощь
От: C0s Россия  
Дата: 01.08.11 09:14
Оценка:
Здравствуйте, Donz, Вы писали:

D>Мэппинг на БД нужен. Или берем готовый фреймворк, или изобретаем свой.


очень спорно, что нужен "мапинг на БД". не вижу ни одной предпосылки. достаточно тупых инсертов.

D>Управление бинами нужно. Или берем Spring IoC (или CDI, как советуют ниже), или вколачиваем все зависимости молотком, или опять же изобретаем свой IoC контейнер.


ну да, я сразу упомянул spring, выбор другого — дело вкуса

D>Если будут коннекты по HTTP, очевидно, нужен веб-сервер. И опять: или изобретаем свой, или берем уже готовый.


да, я бы в упомянутый standalone заембеддил бы несколько кусочков jetty — только тех, что нужны под задачу

D>А еще лучше готовый веб-сервер с готовым низкоуровневым фреймворком, скрывающий от нас детали протокола и имеющий тучу надстроек, которые вообще сделают неважным, откуда и каким образом до нас приходят данные, в приложении мы будем оперировать привычными ява-объектами, а не xml'ем или параметрами get-запроса.


спорное удобство

D>Обещанная нагрузка — сотни, возможно тысячи, запросов за 1-10 минут. Возьмем 5000 устройств, отсылающих данные каждые пять минут. 1000 запросов в минуту. 17 запросов в секунду. Учитывая, что алгоритмически задача простейшая и надо только складировать данные в БД, о какой-либо серьезной нагрузке речи не идет. Если не хватит одного сервера, то, как ты и сказал, просто добавляется еще один и балансировка обеспечивается на административном уровне, а не на разработческом.

D>Пытаться здесб что-то оптимизировать путем написания собственного хттп-сервера — это однозначно преждевременная оптимизация.

дело не в оптимизации, а в том, что более простой набор кубиков не сложнее в понимании и не сложнее в ассемблировании
повторюсь, не вижу ни одной серьёзной причины тащить в такого рода задачи больше кубиков, чем нужно

C0s>>про многопоточность не понял. с ней, вообще, всегда можно огрести проблемы... ws здесь ничем не лучше, чем http handlers / servlets


D>Сервлеты — это уже J2EE. И сервлеты, и WS гораздо лучше собственного велосипеда тем, что потоками управляет сервлет-контейнер. В собственном велосипеде придется вручную создавать нити и следить, чтобы они друг друга не испортили.


я, кстати, не говорил писать свой http-сервер, а тот же jetty позволяет оперировать не только в терминах сервлетов

пойми: слышать, что для решения простейшей задачи "получить данные по сети и положить их в БД" нужен jee... мне, по меньшей мере, странно, поэтому я и предлагаю необходимый минимум. далее, я показал, пусть и крайне кратко, что он достаточен, а если это не так — то аргументируйте
Re[4]: JavaEE - нужна помощь
От: Donz Россия http://donz-ru.livejournal.com
Дата: 01.08.11 09:33
Оценка:
Здравствуйте, hrensgory, Вы писали:

H>С выходом Java Enterprise Edition 6 нужда в спринге (если рассматривать

H>его сугубо как IoC фреймворк) отпала:

Есть личный опыт? Можно вкратце, чем CDI лучше?
Re[5]: JavaEE - нужна помощь
От: hrensgory Россия  
Дата: 01.08.11 09:57
Оценка:
On 01.08.2011 13:33, Donz wrote:

> H>С выходом Java Enterprise Edition 6 нужда в спринге (если рассматривать

> H>его сугубо как IoC фреймворк) отпала:
>
> Есть личный опыт? Можно вкратце, чем CDI лучше?

Личный опыт есть, но пока небольшой (сейчас как раз в процессе перехода
в production, в течении августа должны сдать проект).

Ничем особо не лучше (а большей частью это было уже давно, например
инжекция @EJB и @Resource в сервисном слое уже давно работает), просто
теперь отпала нужда в дополнительной библиотеке (Spring) и её
зависимостях, так же как после появления в стандарте JPA — отпала нужда
в Hibernate.

Ещё раз повторюсь — речь именно про IoC, т.к. у спринга много ведь и
других фишек.

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[6]: JavaEE - нужна помощь
От: Donz Россия http://donz-ru.livejournal.com
Дата: 01.08.11 10:12
Оценка:
Здравствуйте, C0s, Вы писали:

D>>Мэппинг на БД нужен. Или берем готовый фреймворк, или изобретаем свой.

C0s>очень спорно, что нужен "мапинг на БД". не вижу ни одной предпосылки. достаточно тупых инсертов.

Мэппинг в любом случае будет. И в любом случае хранить запросы в отдельном ресурсе лучше, чем хардкодить. Если хибернейт кажется монструозным, то можно взять myBatis, например.

D>>Если будут коннекты по HTTP, очевидно, нужен веб-сервер. И опять: или изобретаем свой, или берем уже готовый.

C0s>да, я бы в упомянутый standalone заембеддил бы несколько кусочков jetty — только тех, что нужны под задачу

Просто для интереса (ни разу сам подобным не занимался). Добавить в проект часть другого очень крупного проекта — это проще, чем взять тот же полноценный Jetty или Tomcat?

D>>А еще лучше готовый веб-сервер с готовым низкоуровневым фреймворком, скрывающий от нас детали протокола и имеющий тучу надстроек, которые вообще сделают неважным, откуда и каким образом до нас приходят данные, в приложении мы будем оперировать привычными ява-объектами, а не xml'ем или параметрами get-запроса.

C0s>спорное удобство

Что именно смущает? Мне вот лень вручную парсить гет-запросы. И даже с мапой уже распарсенных параметров лень разбираться. Не проще ли на вход получить уже готовый объект, который будет гарантировано провалидирован на синтаксис и простейшие констрейнты?
Хотя тут, конечно, зависит от формата выдачи данных устройствами-клиентами.

C0s>дело не в оптимизации, а в том, что более простой набор кубиков не сложнее в понимании и не сложнее в ассемблировании

C0s>повторюсь, не вижу ни одной серьёзной причины тащить в такого рода задачи больше кубиков, чем нужно

Все кубики в той или иной степени должны присутствовать в приложении. Зачем их выпиливать из дерева самому? Тем более, что в данном случае набор кубиков настолько типичный, что любая проблема будет решена копипастом в гугл полученной ошибки.

C0s>пойми: слышать, что для решения простейшей задачи "получить данные по сети и положить их в БД" нужен jee... мне, по меньшей мере, странно, поэтому я и предлагаю необходимый минимум. далее, я показал, пусть и крайне кратко, что он достаточен, а если это не так — то аргументируйте


А чем страшит J2EE? Спринг намного сложнее, чем те же сервлеты, которые делают работу по разбору запросов за программиста.
Re[7]: JavaEE - нужна помощь
От: Cyberax Марс  
Дата: 01.08.11 10:16
Оценка:
Здравствуйте, Donz, Вы писали:

D>>>Если будут коннекты по HTTP, очевидно, нужен веб-сервер. И опять: или изобретаем свой, или берем уже готовый.

C0s>>да, я бы в упомянутый standalone заембеддил бы несколько кусочков jetty — только тех, что нужны под задачу
D>Просто для интереса (ни разу сам подобным не занимался). Добавить в проект часть другого очень крупного проекта — это проще, чем взять тот же полноценный Jetty или Tomcat?
Jetty, однозначно. Её подключение — это примерно 20 строк кода и одна зависимость в POM'е.

Есть embedded tomcat, но это такая гадость, блин.
Sapienti sat!
Re[8]: JavaEE - нужна помощь
От: Donz Россия http://donz-ru.livejournal.com
Дата: 01.08.11 10:19
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Jetty, однозначно. Её подключение — это примерно 20 строк кода и одна зависимость в POM'е.


В смысле полноценный Jetty или как раз embedded?
Для меня вот запуск в Томкате является простейшей операцией, и совсем непонятно, что в этом такого страшного. А вот разбираться в новом проекте, да еще брать оттуда какую-то часть — это действительно пугает.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.