С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29

Tomcat или другие application server - какая архитектура приложения будет правильной?

17.10.2016, 10:40. Показов 2392. Ответов 26

Студворк — интернет-сервис помощи студентам
Добрый день.
Начинаю погружаться в мир J2EE, до этого писал только на чистой Яве.
К примеру, стоит задача написать довольно тяжелую программу, которая периодически (по параметру в конфиге) запускает тяжелый и продолжительный процесс. Пусть это будет парсинг из PBF-дампа OpenStreetMap в базу данных Firebird. При этом промежуточный этап использует еще и базу данных H2. Такой процесс занимает около 10 часов, включая загрузку свежего дампа с Интернета. Сам процесс разбит на несколько шагов, выполнять которые или нет - тоже прописано в конфиге. Т.е. можно пропустить несколько начальных шагов, и приступить сразу к финальным.
Описанная часть задачи сделана, теперь потребовалось прикрутить веб-интерфейс для управления шагами процесса и редактирования полученных финальных данных.
Вот тут и встает вопрос, какой из вариантов использовать:
1. Дописать в программу модуль, реализующий HttpComponents , например. Тут получается основная логика будет "на одном уровне" с веб-сервером.
2. Перенести программу в текущем виде в среду Tomcat и использовать уже его web-возможности. Но тут не очень ясно, как запускать отдельные шаги нашей тяжелой задачи в отдельных потоках и выдержит ли (спроектирован ли для этого) Tomcat. Тут получается, что основная логика будет запускаться из веб-сервера.
3. Может быть еще какие-то варианты есть?

Спасибо всем откликнувшимся!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2016, 10:40
Ответы с готовыми решениями:

Какая архитектура будет правильной для игры?
Добрый день! Пишу сетевую стратегию с использованием Unity, но уровень мой - начинающий и мне бы хотелось понять, какую технологию...

Какая разница между Apache HTTP Server и Apache Tomcat?
Какая разница?

Будет ли корректным вызывать внутри методов get или set другие функции или менять свойства контролов?
Всем привет. Скажите разрешается, не в том смысле, что понятно все разрешено, а будет ли корректным вызывать внутри методов get или set...

26
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.10.2016, 10:55
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Перенести программу в текущем виде в среду Tomcat и использовать уже его web-возможности
да
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Но тут не очень ясно, как запускать отдельные шаги нашей тяжелой задачи в отдельных потоках
так же как без томката
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.10.2016, 11:00
lanmaster2, нет смысла переносить ваш процесс на томкат. Оставьте его как есть, напишите поверх небольшой api для запуска и получения результатов
Затем напишите отдельную веб аппликацию (быстрее будет взять Спринг бут со встроенным томкатом) и оттуда обращайтесь к вашемy api
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29
17.10.2016, 11:17  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
так же как без томката
Ну без томката у меня в основном потоке инициализируется периодический TimerTask, который, когда пришло время - запускает все шаги. Но для этого у меня есть основной поток, в котором я могу это сделать. А как в томкате? Я просто не очень представляю, с чего там начинается запуск отдельных потоков, не привязанных к веб-запросам.
Подозреваю, что где-то в web.xml надо что-то прописать и, вероятно, томкат запустит поток, не получив даже ни одного запроса по веб. Подскажите, как это сделать? И не поплохеет ли томкату, когда поток начнет есть 99% CPU и занимать около 8Гб оперативки?

Добавлено через 10 минут
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
lanmaster2, нет смысла переносить ваш процесс на томкат. Оставьте его как есть, напишите поверх небольшой api для запуска и получения результатов
Затем напишите отдельную веб аппликацию (быстрее будет взять Спринг бут со встроенным томкатом) и оттуда обращайтесь к вашемy api
Была такая мысль, но это уже получится два проекта, станет запутаннее. К тому же, пока основная программа не доведена до продакшена, может быть имеет смысл завернуть ее в томкат и получить один проект...
Вообще говоря, есть еще одна задача, которую надо писать совсем с нуля. И там похоже сразу придется писать под Tomcat.
Задача примерно такая: используя gwtbootstrap3, сделать веб-приложение, которое будет предоставлять удаленное рабочее место для работников call-центра. Там довольно простая логика, не потребуется много памяти под приложение на сервере, но часть логики должна быть отвязана от запросов и работать сама по-себе.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.10.2016, 11:18
есть всякие schedulerы, например кварц. http://www.quartz-scheduler.org/
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29
17.10.2016, 11:21  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
есть всякие schedulerы, например кварц. http://www.quartz-scheduler.org/
Спасибо, посмотрю. Может быть, подскажете еще, как хранить объекты List или HashMap в памяти статично, между получениями запросов?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.10.2016, 11:22
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Была такая мысль, но это уже получится два проекта, станет запутаннее. К тому же, пока основная программа не доведена до продакшена
вы назвали две причины чтобы как раз разделить эти два решения на разные проекты.

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

Если вы запустите ваш тяжелый процесс, на той же JVM что и томкат и он сожрет всю память, ваш веб интерфейс само собой тоже будет тормозить. Я невижу ни одной причины вставлять ваш процесс в томкат.
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29
17.10.2016, 11:30  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Если вы запустите ваш тяжелый процесс, на той же JVM что и томкат и он сожрет всю память, ваш веб интерфейс само собой тоже будет тормозить. Я невижу ни одной причины вставлять ваш процесс в томкат.
Вообще говоря, эта "тяжелая" является больше сервисной, ее будут запускать с 2-3 рабочих мест. В этом случае, мне кажется, логичнее завернуть ее в томкат, и пусть тормозит, пока выполняется. Но с другой стороны, на том же томкате скорее всего, будет и вторая программа, которую я описал чуть выше (про call-центр). Вот она как раз очень критична к тормозам, поэтому придется писать веб-интерфейс к первой задаче с использованием апи-вызовов с "тяжелой" задаче на отдельном сервере. Можете подсказать еще по второй задаче?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.10.2016, 11:58
Цитата Сообщение от lanmaster2 Посмотреть сообщение
В этом случае, мне кажется, логичнее завернуть ее в томкат, и пусть тормозит
ну с таким отношением пишите где хотите....

Цитата Сообщение от lanmaster2 Посмотреть сообщение
Можете подсказать еще по второй задаче?
зачем вам gwtbootstrap3? У вас какая-то мания к плохим решениям
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29
17.10.2016, 12:08  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
ну с таким отношением пишите где хотите....
А что не так с отношением? Там задачи тяжелые и продолжительные, пока они выполняются, не требуют вмешательства.
Как вариант - было бы неплохо иметь возможность запускать их через веб-интерфейс и периодически смотреть прогресс через него же. Да и вынести на отдельный сервер это хозяйство не помешает.

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
зачем вам gwtbootstrap3? У вас какая-то мания к плохим решениям
Основное условие подбора технологии было такое: сотрудник, который будет заниматься этим проектом, не писал до сего момента на Java вообще, у него есть опыт в Delphi, C++, ассемблере. Чтобы обеспечить ему ускоренное погружение в веб-Java, выбрали GWT. Там хотя бы не придется (мы надеемся) лазить в код JavaScript, а писать только на Java. К тому же одностраничный интерфейс очень приветствуется.
Мы долго выбирали как сделать веб-интерфейс для call-центра, перебрали все что можно, и пришли к GWT.
Чем он по-вашему плох и чем лучше его заменить?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.10.2016, 12:13
Цитата Сообщение от lanmaster2 Посмотреть сообщение
перебрали все что можно
что например?

Цитата Сообщение от lanmaster2 Посмотреть сообщение
Да и вынести на отдельный сервер это хозяйство не помешает.
каким же образом вы будите выносить тяжелый модуль на отдельный сервер если он будет интегрирован в томкат?
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29
17.10.2016, 12:21  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
что например?
CUBA Platform
Vaadin
Sencha GXT
Wicket
GWT, GWTP

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
каким же образом вы будите выносить тяжелый модуль на отдельный сервер если он будет интегрирован в томкат?
Вместе с томкатом, конечно!
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.10.2016, 13:07
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Вместе с томкатом, конечно!
то есть у вас будет два томката один из которых просто будет запускать этот процесс? Это очень плохое решение.

Цитата Сообщение от lanmaster2 Посмотреть сообщение
CUBA Platform
Vaadin
Sencha GXT
Wicket
GWT, GWTP
чем Vaadin не угодил? Он основан на GWT, но намного более простой в использовании иинтеграции с современными фреймворками
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29
17.10.2016, 13:14  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
то есть у вас будет два томката один из которых просто будет запускать этот процесс? Это очень плохое решение.
Один томкат. Если уж объединять основное приложение с веб-запросами, то в один томкат его и грузить, вынесенный на отдельный сервер.

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
чем Vaadin не угодил? Он основан на GWT, но намного более простой в использовании иинтеграции с современными фреймворками
Про Vaadin почитали отзывы, вроде как он на каждый чих в интерфейсе делает запросы на сервер... Стало тревожно, т.к. приложение должно иметь высокую скорость отклика. Лишний трафик тут не помощник. Или мы что-то упустили и можно сделать на Vaadin с таким же уровнем производительности, как на чистом GWT?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.10.2016, 13:26
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Стало тревожно, т.к. приложение должно иметь высокую скорость отклика. Лишний трафик тут не помощник.
Это так. Ваадин серверный фреймворк. Однако если у вас будет много пользователей, то GWT так же будет тормозить т.к оба фреймворка предназначены для создания аппликаций бек оффиса и не расчитаны на большое кол-во юзеров. Если нужна быстрота отклика и производительность, пишите на html + js
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29
17.10.2016, 13:35  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Это так. Ваадин серверный фреймворк.
Ok. Не могли бы вы еще просвятить как на томкате сохранять данные между запросами? Например, какие-то предварительно загруженные или периодически обновляющиеся данные из базы данных или из других источников, которые должны быть доступны с минимальной задержкой для поступающих запросов. В обычной Яве я мог бы создать отдельный класс-хранилище, со статическими полями и методами доступа и обновления данных в хранилище. А как в томкате сделать такое?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.10.2016, 15:01
lanmaster2, делаете зарпос в БД и возвращаете....не очень понял ваш вопрос....Сохранять что-либо между запросами это пример плохой архитектуры. Вся ваша аппликация не должна хранить какое либо состояние. По-моему вы рано взялись за такую программу....попробуйте написать простые веб аппликации для начала чтобы понять что к чему.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,761
17.10.2016, 18:16
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Там хотя бы не придется (мы надеемся) лазить в код JavaScript
Зря надеетесь.
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 29
18.10.2016, 08:29  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
попробуйте написать простые веб аппликации для начала чтобы понять что к чему.
Спасибо, это само собой...
Цитата Сообщение от korvin_ Посмотреть сообщение
Зря надеетесь.
Все настолько плохо? А чем пользуетесь вы в разработке веб-приложений?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,761
18.10.2016, 16:26
Цитата Сообщение от lanmaster2 Посмотреть сообщение
А чем пользуетесь вы в разработке веб-приложений?
Для какой части? Я фронт-энд не пишу. Коллеги используют Angular 2.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2016, 16:26
Помогаю со студенческими работами здесь

Написать программу, которая будет запускать другие приложения по выбору пользователя
нужно составить программу, которая будет вызывать другие 5 программ и по требованию запускать одну из них. как запустить одну программу я...

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

Определить, какая площадь и квадратных метрах будет покрашена и какая будет побелена
Длина класса L метров, ширина - b метров, высота класса – h метров. В классе имеется дверь размером dl x dh и три окна размером ol x oh см....

Достать исходный код application из Oracle Application Server
Господа, возникла проблема. Понадобилось вытянуть исходники одного приложения из Oracle Application Server. С java не знаком, а нужно...

Какая операция будет быстрее в компьютере: 2х2 или 2+2 ?
Какая операция будет быстрее в компьютере: 2х2 или 2+2 ? по идее 2+2 будет быстрее?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru