2010-10-31 43 views
0

我有一個問題,這可能聽起來很奇怪。
我很想知道J2EE容器是否允許部署的應用程序爲了自己的目的打開直接服務器套接字(本質上是容器的旁路)。
我知道想要這麼做很奇怪,但我要問的原因是,我讀過一個javax.xml.endoint不能在容器中啓動,並且想知道這是否是原因。J2EE容器允許直接服務器套接字?

UPDATE:這篇文章的答案似乎與我矛盾。一個答案(通過andri)是指EJB規範,它被禁止,但Codemwnci的其他答案(由Hippo的評論支持)說,它是生產中使用的東西。我不知道該從這些帖子得出什麼結論。任何人都可以幫助清除這個?

謝謝。

回答

2

我有一個在WebSphere應用程序服務器(WAS 7)上運行的Web應用程序。在其中一個應用程序中,作爲應用程序啓動時運行的servlet的一部分,我創建了一個ServerSocket。

這是在一個大規模的生產環境中運行,並已工作了很多年。

+0

謝謝。其他容器實現方面有什麼區別嗎?我認爲,例如在允許應用程序的線程中,各種容器所採用的方法不同。有些人不允許。或者我對此感到困惑? – Cratylus 2010-10-31 16:46:38

+1

+1。我正在研究在Websphere和Tomcat上運行的類似產品。 – AbdullahC 2010-10-31 16:47:30

+0

@ user384706我從來沒有聽說過這個特定的限制,但這並不是說有一個限制。每個供應商都可能做他們自己的事情,所以很難說明確的。 – Codemwnci 2010-10-31 16:50:05

2

嚴格地說,禁止由EJB specification,就如同管理自己的線程是被禁止的:

一個enterprise bean不能試圖監聽套接字,套接字上接受連接,或者使用多播套接字。

不允許這種情況的可能原因是分佈式應用程序和在應用程序服務器實例之間移動EJB。打開原始套接字的「官方」解決方案是編寫JCA連接器。

+1

這隻適用於EJB的權利?沒有任何一種servlet web應用程序。或者我對此感到困惑? – Cratylus 2010-10-31 17:15:10