我想構建一個不僅提供Web服務(WAR)或直接JMS請求(EJB)的Java EE應用程序(EAR),但是我也希望接受套接字請求(例如UDP數據包)。一個偵聽套接字請求的EAR(Java EE)應用程序
我已經嘗試用java.net.DatagramSocket編寫一個監聽器,讓它作爲單獨的進程運行,並將請求重定向到我的EAR應用程序。
問題是...... 我該如何在我的Java EE(EAR)應用程序中無縫地構建這樣的套接字偵聽器?
謝謝。
我想構建一個不僅提供Web服務(WAR)或直接JMS請求(EJB)的Java EE應用程序(EAR),但是我也希望接受套接字請求(例如UDP數據包)。一個偵聽套接字請求的EAR(Java EE)應用程序
我已經嘗試用java.net.DatagramSocket編寫一個監聽器,讓它作爲單獨的進程運行,並將請求重定向到我的EAR應用程序。
問題是...... 我該如何在我的Java EE(EAR)應用程序中無縫地構建這樣的套接字偵聽器?
謝謝。
的權方法是創建一個JCA適配器爲。 JCA適配器可用於出站或入站連接。您可以啓動線程或安排JCA adpater的工作。從JCA適配器到EJB的連接入站使用自定義消息驅動bean完成。
您甚至可以從JCA連接器啓動事務,以便將消息/數據包傳送到EJB。 JCA是Java EE規範的一部分,並受所有應用程序服務器的支持。
另一種方法(但不符合規範)是啓動從ServletContextListener
偵聽套接字的線程。該線程將運行在Web層中,並且可以照常調用EJB。依賴注入不起作用,但JNDI查找仍然可以。
就我所知它不符合規範。
一切都應該由容器控制,因爲這是使用Java EE來擴展應用程序的唯一方法。
有幾個選項:
實現一個連接器(JCA)一個例子是在這裏:http://www.theserverside.com/tt/articles/article.tss?l=J2EE1_4可能是最好的方式,如果你現有的客戶。
使用Java消息隊列
該技術之間的關係,這裏討論http://java.sun.com/products/jms/faq.html#relship_ejbs
寫誰在數據庫中存儲請求外部服務器。(沒有的Tx支持)
如果你有隻有一臺服務器,而且開銷太大,你可以忽略這些方面。但是如果您以後需要事務或其他節點,則必須重新設計此部分。