アノテーションを通じてステートレス EJB を JAX-RS Web サービスに挿入しようとすると、 null EJB 参照により、使用時に NullPointerException が発生します。
JAX-RS Web サービスに @Stateless としてアノテーションを付けることは直接的な解決策のように見えるかもしれませんが、JAX-RS では実現できません。一人で。次の代替アプローチを検討してください。
オプション 1: インジェクション プロバイダー SPI
EJB のルックアップとインジェクションを実行するインジェクション プロバイダーを実装します。それに応じてプロバイダーを登録します。
オプション 2: BookResource を EJB として埋め込む
BookResource クラスに @Stateless アノテーションを付け、EJB 内でそのライフサイクルを管理します。ただし、このアプローチでは単体テストがより困難になります。
オプション 3: CDI を使用する
提供された例に示すように、依存関係の注入に CDI を使用します。このアプローチは、特にテスト環境でのシンプルさと柔軟性を提供します。
@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) }
インジェクション プロバイダーを実装するか、 CDI を使用すると、JAX-RS サービスに EJB を挿入できるようになり、2 つのフレームワーク間の統合オプションが拡張されます。
以上がJAX-RS サービスに EJB を挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。