我最近接到了一个涉及编写 Web 应用程序的项目。我以前从未做过 Java EE。网络上的很多资源都过时了,我无法弄清楚各种标准和 Java 技术之间的当前差异。
最初我认为由于依赖注入、JPA、会话管理和 Web 服务,我真的需要 EJB 3.1。我开始尝试 Glassfish,但被告知我们必须在 Tomcat 中编写。所以我一直试图弄清楚我需要什么以及如何将什么以及如何放入 Tomcat 中才能到达那里。我开始怀疑我是否需要 EJB。
我想,我想将 JFS 用于 MVC 架构。在了解这一点时,我遇到了 ManagedBeans 和 CDI,根据一些人的说法,这使得前者已经过时,而且似乎还提供了我想要启用单元测试的所有依赖注入东西。我也开始意识到我可以在 EJB 之外以 Hibernate 和其他一些形式获得 JPA。此外,我不知道我是否需要的 Web 服务似乎以另一种标准的形式出现,我现在想不出这个名字,这也可以独立安装。
我的主要问题是会话管理和状态。在我看来,EJB 剩下要做的就是提供@Stateless/@Stateful 和@Local/@Remote。但是,据我了解,其中一些已经以 servlet 容器中的会话管理的形式存在......但我不知道我需要考虑多少或主要差异才能做出决定如果我需要这些东西。
所以我的问题是,为了决定 EJB 是否值得研究,或者我是否有足够的其他库和技术的形式,我需要知道哪些基本的、本质的区别?我一直在谷歌和 Usenet 上,但无法在任何地方找到这些信息。
刚刚又想到了一点。据我了解,@Stateful bean 注释为我提供了线程安全的状态保存。我可能不会直接使用线程,但我知道 Java 经常在幕后这样做,尤其怀疑 EE。当我需要保持状态时,如果已经提供了线程,我不想处理线程。