我不能完全肯定在這裏問什麼問題,因爲我不知道的詞彙......Tomcat中的有狀態進程(守護進程?)?
的Tomcat的servlet(以及與此有關的任何服務器)很好地工作,如果他們是無狀態的,快速響應請求,狀態存儲在數據庫中。似乎如果我有長時間運行的操作,那麼也許我想在後臺運行一些其他服務,並讓Tomcat處理程序與它進行通信。有沒有辦法在與Tomcat相同的JVM中運行長時間運行的Java應用程序,並通過「常規」Tomcat servlet與它進行交互?
例子:比方說,我想提供的HTTP REST風格的數字分解服務。
這裏是一個可能的方案(我希望我有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
我能想到的是如何寫的servlet來處理查詢,但我怎麼能在同一個JVM中實現一個守護進程/獨立運行的服務?
編輯:在上面的例子中,我想要做的是讓一個後臺應用程序自動運行,包含工作隊列,以考慮質數,並且有一個Java接口,支持Tomcat servlets可以用來將服務公開給網絡。然後,我不擔心我的後臺程序的Web界面或HTTP,我不擔心我的servlet的多線程問題或質數分解。
所有的servlet都在同一個web應用程序中嗎? – 2009-10-14 21:54:52
是的。 (只是好奇:什麼會改變,如果我說沒有,但他們是在同一個JVM所有的Tomcat的servlet?) – 2009-10-14 22:08:53
如果我沒有記錯,在同一個JVM的Tomcat應用相互隔離。而不是Tomcat,你需要像JBoss那樣的Enterprise Java Beans。或者,您可以將許多servlet放入單個Tomcat應用程序中,並可以互相看到。 – 2009-10-16 01:32:17