首頁  >  文章  >  Java  >  為什麼將 EJB 注入 JAX-RS Web 服務時會得到空 EJB?

為什麼將 EJB 注入 JAX-RS Web 服務時會得到空 EJB?

Susan Sarandon
Susan Sarandon原創
2024-11-08 00:21:03658瀏覽

Why Do I Get a Null EJB When Injecting It into a JAX-RS Webservice?

EJB 注入JAX-RS Web 服務:綜合指南

在Java Enterprise Edition (JEE) 開發領域,通常需要將無狀態EJB 注入到JAX-RS Web服務中用於高效率資料存取的JAX-RS Web 服務。然而,遇到 null EJB 和可怕的 NullPointerException 可能會令人沮喪。本文深入探討了原因並提供了解決此問題的實用解決方案。

由於底層平台限制,透過註解注入 EJB 的初始嘗試可能並不總是成功。為了解決這個問題,您可以採取多種方法:

選項 1:利用注入提供者 SPI

注入提供者 SPI 提供了一個鉤子來自訂注入過程。透過實作 InjectableProvider,您可以指示容器如何解析 EJB 並將其註入到 JAX-RS 資源中。以下是Jersey 伺服器的範例:

@Provider
public class EJBProvider implements InjectableProvider<EJB, Type> {
    // ... Implementation Details ...
}

選項2:將BookResource 提升為EJB

透過讓BookResource 本身成為EJB,您可以確保EJB 容器管理生命週期並在班級內進行注射。這消除了對外部註解的需求:

@Stateless
@Path("book")
public class BookResource {
    @EJB
    private BookEJB bookEJB;
    // ...
}

選項3:利用CDI 的強大功能

CDI(上下文和依賴項注入)提供了一種方便且以聲明方式配置的方法來注入EJB。透過利用 @Inject 註釋,您可以無縫存取 JAX-RS 資源中註入的 EJB:

@Path("book")
@RequestScoped
public class BookResource {
    @Inject
    private BookEJB bookEJB;
    // ...
}

值得注意的是,選擇適當的方法取決於應用程式的特定要求和設計注意事項。選項 1 提供對注入過程的細粒度控制,而選項 2 和 3 透過利用標準 EJB 或 CDI 機制來簡化它。

以上是為什麼將 EJB 注入 JAX-RS Web 服務時會得到空 EJB?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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