ホームページ >Java >&#&チュートリアル >JAX-RS サービスに EJB を挿入するにはどうすればよいですか?

JAX-RS サービスに EJB を挿入するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-07 07:20:02376ブラウズ

How to Inject EJBs into JAX-RS Services?

JAX-RS サービスへの EJB の挿入

問題の説明

アノテーションを通じてステートレス 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 を使用します。このアプローチは、特にテスト環境でのシンプルさと柔軟性を提供します。

作業例 (オプション 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)
}

結論

インジェクション プロバイダーを実装するか、 CDI を使用すると、JAX-RS サービスに EJB を挿入できるようになり、2 つのフレームワーク間の統合オプションが拡張されます。

以上がJAX-RS サービスに EJB を挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。