Я разрабатываю/разрабатываю веб-приложение, которое в конечном итоге будет использоваться как WAR для Tomcat. Одной из особенностей этого приложения будет возможность для пользователей загружать изображения на наш сервер и редактировать их (создавать эскизы и т. Д.). Под капотом мы будем использовать ImageMagick
и его библиотеку адаптеров Java IM4Java
.Когда в нить и когда ВОЙНА?
Первоначальные прототипы показали, что ImageMagick занимает некоторое время, чтобы «разогреваться» на наших серверах при каждом повторном развертывании приложения. Это побудило нас рассмотреть один из двух вариантов, либо:
- Создание
ImageService.war
веб-сервис, который развертывается вместе с первичным приложением и в основном обрабатывает все вызовыIM4Java
под капотом (разоблачительные, скажем, RESTful сервис и просто запускает ImageMagick, когда он получает запрос; основное веб-приложение cann может найти отредактированный файл (ы) в той же локальной файловой системе); или - Просто создайте
Thread
подкласс (т.е.ImageServiceThread
), пнуть его и запустить его при развёртывании времени, и убедитесь, что он получает закрыли, когда Tomcat отменяет развертывание приложения
Эти две перспективы заставили меня задуматься о эта проблема в более абстрактном смысле: , когда нужно просто делегировать работу в отдельный поток, и когда уместно сделать полномасштабное отдельное приложение (в нашем случае WAR)?
Наше основное приложение будет единственным пользователем этого «Image Service», в котором я думаю, что отдельная ВОЙНА переполнена и ненужна. Но я никогда не рассматривал потоки внутри Tomcat и не знаю, можно ли порождать и убивать поток, чтобы его жизненный цикл совпадал с его потоком основного/основного приложения.
Какие факторы следует рассматривать как часть такого решения? Заранее спасибо.
Как часто вы ожидаете фактического передислокации в производство? Кажется, что много хлопот обслуживания, чтобы сохранить некоторое раздражение в развитии. – Affe
4-недельные спринты, поэтому ежемесячные выпуски выпуска и обычно 2 - 3 сборки QA для каждого выпуска продукции. – IAmYourFaja
. Как комментарий к вашей последней части, довольно легко порождать нить или подобное и завершать ее в ContextListener - вы почти всегда хотите для управления потоками внутри tomcat в прослушивателе контекста (завершение его в контекстеDestroyed и запуск его в контекстеInitialized методы). Наконец, используйте Исполнителя вместо создания собственных потоков. – nos