Rumah >Java >javaTutorial >Bagaimana untuk Menyuntik EJB ke dalam Perkhidmatan JAX-RS?

Bagaimana untuk Menyuntik EJB ke dalam Perkhidmatan JAX-RS?

DDD
DDDasal
2024-11-07 07:20:02386semak imbas

How to Inject EJBs into JAX-RS Services?

Menyuntik EJB ke dalam Perkhidmatan JAX-RS

Penerangan Masalah

Percubaan untuk menyuntik EJB Tanpa Kewarganegaraan ke dalam perkhidmatan web JAX-RS melalui anotasi menghasilkan rujukan EJB null, yang membawa kepada NullPointerException apabila digunakan.

Penyelesaian

Semasa menganotasi perkhidmatan web JAX-RS sebagai @Stateless mungkin kelihatan seperti penyelesaian langsung, ia tidak boleh dilaksanakan dengan JAX-RS bersendirian. Pertimbangkan pendekatan alternatif berikut:

Pilihan 1: SPI Pembekal Suntikan

Laksanakan penyedia suntikan yang melakukan carian dan suntikan EJB. Daftar penyedia sewajarnya.

Pilihan 2: Benamkan Sumber Buku sebagai EJB

Anotasi kelas BookResource sebagai @Stateless dan uruskan kitaran hayatnya dalam EJB. Walau bagaimanapun, pendekatan ini menjadikan ujian unit lebih mencabar.

Pilihan 3: Gunakan CDI

Gunakan CDI untuk suntikan pergantungan, seperti yang ditunjukkan dalam contoh yang disediakan. Pendekatan ini menawarkan kesederhanaan dan fleksibiliti, terutamanya dalam persekitaran ujian.

Contoh Kerja (Pilihan 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)
}

Kesimpulan

Dengan melaksanakan pembekal suntikan atau menerima pakai CDI, adalah mungkin untuk menyuntik EJB ke dalam perkhidmatan JAX-RS, mengembangkan pilihan penyepaduan antara kedua-dua rangka kerja.

Atas ialah kandungan terperinci Bagaimana untuk Menyuntik EJB ke dalam Perkhidmatan 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