Percubaan untuk menyuntik EJB Tanpa Kewarganegaraan ke dalam perkhidmatan web JAX-RS melalui anotasi menghasilkan rujukan EJB null, yang membawa kepada NullPointerException apabila digunakan.
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.
@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) }
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!