Я знаю «нормальную» Java, но я новичок в мире сервлетов, контейнеров и т. Д. Из-за этого я не уверен, какой подход наиболее разумен.Использование сервлета для приложения без сервлетов
Ситуация: Я создал сервлет, который получает информацию и сохраняет его в базе данных. Эта база данных считывается другими приложениями.
Теперь мне нужно приложение, которое получает точно такую же информацию и сохраняет его в той же базе данных. Однако это новое приложение должно вытащить эту информацию с другого сервера (я буду использовать httpClient для этого) вместо того, чтобы быть нажатой. Оба приложения будут сосуществовать.
Для этого новых приложений, которые я вижу следующие два варианта:
Сделать одиночку стенд приложение. Для этого я могу скопировать вставку большого количества существующего внутреннего кода, но мне нужно будет внести некоторые изменения (контейнер сервлетов предлагает контекст, простой пул соединений с базой данных и т. Д.). Кроме того, мне может понадобиться использовать некоторую оболочку, чтобы это могло работайте как правильный демон, который я могу запустить, но также изящно останавливать/перезапускать и т. д.
Сделать новое приложение частью сервлета. То есть: просто запустите новый поток в init() сервлета, который запустит новое приложение. Это позволило бы мне повторно использовать весь код, который у меня уже есть, без необходимости переписывать его. Мне нужно только написать код, который выполняет HTTP-GET-запросы на другой сервер. При таком подходе также будет проще запустить и остановить службу, потому что для этого я могу использовать контейнер Servlet.
Некоторая информация о проекте: внутренний код, который анализирует и записывает данные в базу данных, имеет несколько потоков, но не очень сложный. Написание кода для исходного сервлета составляло около одной недели работы. С существующей базой кода я считаю, что это новое приложение, вероятно, должно составлять 1, 2 дня работы max.
То, как я вижу, вариант 2 проще. Но мне кажется, что я бы «злоупотреблял» сервлетами. Итак, мой вопрос: не сервлеты для приложений, которые должны обрабатывать запросы, а не приложения, которые делают запрос? Есть ли какие-то огромные недостатки, которые я не вижу здесь? Какой вариант имеет смысл?
tl; dr: Могу ли я написать приложение, которое не обслуживает запросы в качестве сервлета?
Следующий вопрос: я не должен начинать свои собственные темы, иначе произойдут плохие вещи. Не могли бы вы рассказать об этом? В настоящий момент существующие сервлеты используют два фоновых потока для записи данных в две базы данных. Эти потоки подключены к сервлету с помощью BlockingQueue. Причина, по которой я имею это в разных потоках, заключается в том, что запись в базу данных требует много времени (из-за множества триггеров в базе данных), и данные могут поступать в пакеты. Значит, это не советский дизайн? Какая проблема может это дать? – brasilt
Извините, я обновляю ваш комментарий. – Brabster
@Brabster, вероятно, ссылается на то, что большинство серверов веб-приложений или приложений предпочитают управлять потоками в контейнере сервлетов, теоретически ваши собственные инициированные потоки небезопасны, так как контейнер может обманывать их .... –