首頁 >Java >java教程 >如何將 EJB 注入 JAX-RS 服務?

如何將 EJB 注入 JAX-RS 服務?

DDD
DDD原創
2024-11-07 07:20:02386瀏覽

How to Inject EJBs into JAX-RS Services?

將EJB 注入JAX-RS 服務

問題描述

嘗試透過註解將無狀態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 進行依賴注入,如提供的範例所示。這種方法提供了簡單性和靈活性,特別是在測試環境中。

工作範例(選項1)

@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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn