2016-02-26 79 views
0

我試圖實現一個將通過HTTP協議接收數據的入站資源適配器。我有兩種實現方式:將Jetty用作內部服務器,並使用WildFly中的Web容器。我知道如何使用Jetty,但認爲Undertow使用是最好的。但是如何? WildFly在RAR中看不到@WebServlet。我如何告訴WildFly部署一個位於RAR的servlet?如何在WildFly的資源適配器中使用HTTP協議

回答

1

說到整個生態系統對我不利的地步,我通常會問自己我是否確定整個想法是正確的。你的想法似乎並不正確。不過,如果你確定的話,我會解釋一下接近你想要的東西的方法。

在資源適配器內部使用servlet的想法有點奇怪。實現入站HTTP適配器也很奇怪。在某種邏輯意義上,servlet容器本身就是一個入站HTTP資源適配器。它並沒有真正使用JCA容器,但它非常接近入站資源適配器所代表的含義。

不這樣做的另一個原因是資源適配器和應用程序部署具有完全不同的生命週期。儘管WAR/EAR部署代表了一種「充當其生命」的應用程序,但RAR語義卻有很大不同:資源適配器並不是做一些業務邏輯,而是爲其他部署提供接口。您可以將RAR捆綁到您的EAR中,但如果您的目標不是怪異巨石,那麼您將最終將RAR部署爲應用程序使用的單獨製品。資源適配器不應該包含任何特定的業務邏輯。如果您需要這樣做,請考慮重新考慮您是否首先需要應用程序服務器:與EJB和Web相比,JCA容器相當差,如果您不需要全部功能,Java SE可能會派上用場。

現在,如果你還是100%肯定你需要這個,讓我們來看看你的選擇:

  1. 您可以嘗試實行ServiceActivator - JBoss的特定起點爲自定義擴展。從此激活器中,您可以訪問UndertowService並手動執行servlet容器引導。 Here是Wildfly團隊以SA爲動力的人工製品的一個例子。由於您的問題很不尋常,我無法確認JCA部署是否會支持它,但似乎。

  2. 如果您不能只強制Wildfly的web容器來處理RAR部署,您可以回退到手動容器實例化。暗流本身只是內部Wildfly一個模塊,所以你可以在你的RAR的JAR指定模塊依賴條款訪問它表現就像這樣:然後

    Dependencies: io.undertow 
    

    暗潮的班會通過你的類加載器提供給您在部署時,你會能夠實例化一個帶有自定義servlet的新服務器。

+0

是的,我早早地得出了同樣的答案。 –