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

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

17.10.2016, 10:40. Показов 2491. Ответов 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_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
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_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
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
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru