嘗試透過註解將無狀態EJB 注入JAX-RS Web 服務會導致null EJB引用,導致使用時出現NullPointerException。
雖然將 JAX-RS Web 服務註解為 @Stateless 看起來像是一個直接的解決方案,但對於 JAX-RS 來說這是不可行的獨自的。考慮以下替代方法:
選項 1:注入提供者 SPI
實作執行 EJB 尋找和注入的注入提供者。相應地註冊提供程序。
選項 2:將 BookResource 嵌入為 EJB
將 BookResource 類別註解為 @Stateless 並在 EJB 中管理其生命週期。然而,這種方法使單元測試更具挑戰性。
選項 3:利用 CDI
使用 CDI 進行依賴注入,如提供的範例所示。這種方法提供了簡單性和靈活性,特別是在測試環境中。
@Path("book") public class BookResource { @Inject private BookEJB bookEJB; //... }
// EJBProvider.java @Provider public class EJBProvider implements InjectableProvider<EJB, Type> { // ... (Implementation as provided in the answer) }
透過實作注入提供者或採用CDI,可以將EJB 注入到JAX-RS 服務中,從而擴展了兩個框架之間的整合選項。
以上是如何將 EJB 注入 JAX-RS 服務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!