Je ne sais pas exactement quelle question poser ici puisque je ne connais pas le vocabulaire ...processus avec état (démons?) Dans Tomcat?
Les servlets Tomcat (et n'importe quel serveur d'ailleurs) fonctionnent bien s'ils sont sans état et répondent rapidement aux requêtes, avec état stocké dans une base de données. Il semble que si j'ai des opérations de longue durée alors peut-être que je veux exécuter un autre service en arrière-plan, et que les gestionnaires Tomcat communiquent avec lui. Existe-t-il un moyen d'exécuter une application Java de longue durée dans la même JVM que Tomcat et d'interagir avec celle-ci via une servlet Tomcat "normale"?
Exemple: Disons que je veux offrir un certain nombre RESTful service factorisation en HTTP.
Voici un scénario possible (j'espère avoir le droit de syntaxe HTTP, je suis en omettant la plupart des en-têtes):
# 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
Je peux penser à la façon d'écrire le servlet pour gérer les requêtes, mais Comment puis-je implémenter un service démon/fonctionnement indépendant dans la même machine virtuelle Java?
modifier: Dans l'exemple ci-dessus, ce que je voudrais faire est d'avoir une application d'arrière-plan qui fonctionne de manière autonome, avec des files d'attente de travail, pour tenir compte des nombres premiers, et dispose d'une interface Java qui prend en charge les opérations que le Tomcat Les servlets pourraient utiliser pour exposer le service sur le web. Ensuite, je n'ai pas à m'inquiéter de l'interface Web ou du protocole HTTP dans mon application d'arrière-plan, et je n'ai pas à m'inquiéter des problèmes de multithreading ou de la factorisation en nombres premiers dans mes servlets.
sont tous les servlets dans la même application web? –
oui. (juste curieux: qu'est-ce qui changerait si je disais non, mais ils étaient tous des servlets Tomcat dans la même JVM?) –
Si je me souviens bien, les applications Tomcat dans la même JVM sont isolées les unes des autres. Au lieu de Tomcat, vous auriez besoin de quelque chose comme JBoss qui fait Enterprise Java Beans. Alternativement, vous pouvez mettre beaucoup de servlets dans une seule application Tomcat et ils peuvent se voir. –