Rumah >Java >javaTutorial >Mengapa Saya Mendapatkan EJB Null Apabila Menyuntikkannya ke dalam Perkhidmatan Web JAX-RS?

Mengapa Saya Mendapatkan EJB Null Apabila Menyuntikkannya ke dalam Perkhidmatan Web JAX-RS?

Susan Sarandon
Susan Sarandonasal
2024-11-08 00:21:03709semak imbas

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

Suntikan EJB ke dalam JAX-RS Webservice: Panduan Komprehensif

Dalam bidang pembangunan Java Enterprise Edition (JEE), selalunya perlu menyuntik EJB Tanpa Kewarganegaraan ke dalam perkhidmatan web JAX-RS untuk capaian data yang cekap. Walau bagaimanapun, menghadapi EJB null dan NullPointerException yang digeruni boleh mengecewakan. Artikel ini menyelidiki punca dan menyediakan penyelesaian praktikal untuk menyelesaikan isu ini.

Percubaan awal untuk menyuntik EJB melalui anotasi mungkin tidak selalu berjaya disebabkan oleh batasan platform yang mendasari. Untuk menangani perkara ini, terdapat beberapa pendekatan yang boleh anda ambil:

Pilihan 1: Gunakan SPI Penyedia Suntikan

SPI Penyedia Suntikan menyediakan cangkuk untuk menyesuaikan proses suntikan. Dengan melaksanakan InjectableProvider, anda boleh mengarahkan bekas itu cara menyelesaikan dan menyuntik EJB ke dalam sumber JAX-RS anda. Di bawah ialah contoh untuk pelayan Jersi:

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

Pilihan 2: Tingkatkan Sumber Buku kepada EJB

Dengan menjadikan BookResource sebagai EJB sendiri, anda memastikan bekas EJB menguruskan kitaran hayat dan suntikan dalam kelas. Ini menghapuskan keperluan untuk anotasi luaran:

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

Pilihan 3: Manfaatkan Kuasa CDI

CDI (Konteks dan Suntikan Ketergantungan) menawarkan pendekatan yang mudah dan dikonfigurasikan secara deklaratif untuk menyuntik EJB. Dengan menggunakan anotasi @Inject, anda boleh mengakses EJB yang disuntik dengan lancar dalam sumber JAX-RS anda:

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

Perlu diambil perhatian bahawa memilih pendekatan yang sesuai bergantung pada keperluan khusus dan pertimbangan reka bentuk aplikasi anda. Pilihan 1 menyediakan kawalan terperinci ke atas proses suntikan, manakala Pilihan 2 dan 3 memudahkannya dengan memanfaatkan mekanisme EJB atau CDI standard.

Atas ialah kandungan terperinci Mengapa Saya Mendapatkan EJB Null Apabila Menyuntikkannya ke dalam Perkhidmatan Web JAX-RS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn