在Java Enterprise Edition (JEE) 開發領域,通常需要將無狀態EJB 注入到JAX-RS Web服務中用於高效率資料存取的JAX-RS Web 服務。然而,遇到 null EJB 和可怕的 NullPointerException 可能會令人沮喪。本文深入探討了原因並提供了解決此問題的實用解決方案。
由於底層平台限制,透過註解注入 EJB 的初始嘗試可能並不總是成功。為了解決這個問題,您可以採取多種方法:
注入提供者 SPI 提供了一個鉤子來自訂注入過程。透過實作 InjectableProvider,您可以指示容器如何解析 EJB 並將其註入到 JAX-RS 資源中。以下是Jersey 伺服器的範例:
@Provider public class EJBProvider implements InjectableProvider<EJB, Type> { // ... Implementation Details ... }
透過讓BookResource 本身成為EJB,您可以確保EJB 容器管理生命週期並在班級內進行注射。這消除了對外部註解的需求:
@Stateless @Path("book") public class BookResource { @EJB private BookEJB bookEJB; // ... }
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中文網其他相關文章!