Я не совсем уверен, что вопрос задать здесь, так как я не знаю, словарный запас ...Процессы с точки зрения состояния (демоны?) В Tomcat?
Tomcat сервлетов (и любой сервер по этому вопросу) работают хорошо, если они являются лицами без гражданства и быстро реагировать на запросы, с состоянием, хранящимся в базе данных. Похоже, если у меня есть длительные операции, возможно, я хочу запустить другую службу в фоновом режиме и обработать обработчики Tomcat. Есть ли способ запустить длинное приложение Java в той же JVM, что и Tomcat, и взаимодействовать с ним через «обычный» сервлет Tomcat?
Пример: Допустим, я хочу предложить RESTful сервис число факторизации в HTTP.
Вот возможный сценарий (я надеюсь, что у меня есть правильный синтаксис HTTP, я опускаю большинство заголовков):
# comments start with #, > = request, < = response
#
# first we create a queue
> POST /factorizer/create-queue
> {information here}
< queue=12345B
# then we post some numbers to it
> POST /factorizer/queue/12345B
> 123
> 456
> 678
> 123456789
< OK
# let's look at the status
> GET /factorizer/queue/12345B/status
< requested=4
< processed=3
# query
> GET /factorizer/queue/12345B/7
< Error: invalid index
> GET /factorizer/queue/12345B/3
< Error: not complete
> GET /factorizer/queue/12345B/0
< 123=3*41
# wait a while
> GET /factorizer/queue/12345B/status
< requested=4
< processed=4
> GET /factorizer/queue/12345B/3
< 123456789=3*3*3*7*13*31*37*211*241*2161*3607*3803*2906161
я могу думать о том, как написать сервлет для обработки запросов, но как я мог бы начать реализацию службы демона/независимо работающего в той же JVM?
редактировать: В приведенном выше примере, что я хотел бы сделать, это иметь фоновое приложение, которое работает в автономном режиме, с рабочими очередями, фактор простых чисел, и имеет интерфейс Java, который поддерживает операции, которые Tomcat сервлеты могут использовать для предоставления услуги в Интернете. Тогда мне не нужно беспокоиться о веб-интерфейсе или HTTP в моем фоновом приложении, и мне не нужно беспокоиться о проблемах многопоточности или простой факторизации в моих сервлетах.
ли все сервлеты в том же веб-приложения? –
есть. (просто любопытно: что изменилось бы, если бы я сказал нет, но все они были сербами Tomcat в одной JVM?) –
Если я правильно помню, приложения Tomcat в одной JVM изолированы друг от друга. Вместо Tomcat вам понадобится нечто вроде JBoss, который использует Enterprise Java Beans. В качестве альтернативы вы можете поместить много сервлетов в одно приложение Tomcat, и они могут видеть друг друга. –