私は最近、Web アプリケーションの作成を含むプロジェクトを任されました。私はJava EEをやったことがありません。Web 上の多くのリソースは古く、さまざまな標準と Java テクノロジの現在の違いを理解するのに苦労しています。
当初、依存性注入、JPA、セッション管理、および Web サービスのために、EJB 3.1 が本当に必要だと思っていました。私は Glassfish で実験を始めましたが、Tomcat で書く必要があると言われました。だから私は何が必要なのか、Tomcatに何をどのように入れればそこにたどり着くのかを理解しようとしてきました。EJB が必要なのかどうかさえ疑問に思うようになりました。
私は、MVC アーキテクチャに JFS を使用したいと考えています。それについて学ぶ中で、ManagedBeans と CDI の両方に出くわしました。これは、前者を時代遅れにするものもあれば、単体テストを有効にしたいすべての依存性注入機能を提供しているように見えるものもあります。また、Hibernate などの形で EJB の外部に JPA を取得できることにも気付きました。さらに、とにかく必要かどうかわからないWebサービスは、今は名前が思いつかない別の標準の形で提供されているようで、これも個別にインストールできます。
ここでの私の主な問題は、セッション管理と状態です。EJB がやるべきことは、@Stateless/@Stateful と @Local/@Remote を提供することだけのように思えます。ただし、私が理解しているように、これの一部は既にサーブレット コンテナー内のセッション管理の形で存在しています...しかし、決定するために説明する必要がある主な違いがどれだけあるか、またはどのような違いがあるかはわかりません。これらのものが必要な場合。
そこで私の質問は、EJB を検討する価値があるかどうか、または他のライブラリやテクノロジの形で十分かどうかを判断するために知っておく必要がある、基本的で本質的な違いは何ですか? 私はグーグルとユーズネットのいたるところにいましたが、この情報をどこにも見つけることができませんでした。
もうちょっと考えただけ。私が理解しているように、 @Stateful Bean アノテーションはスレッドセーフな状態保存を提供します。私はおそらくスレッドを直接使用するつもりはありませんが、Java が舞台裏で多くのことを行っていることは知っており、特に EE を疑っています。状態を保持する必要がある場合、これが既に提供している場合、スレッドを処理したくありません。