自从我开始使用 JSF 以来,我正在审查我的代码。 最复杂的问题之一再次出现。 CDI 和 EJB 之间的决定。
我正在使用三层,我想知道在每一层上使用哪种类型的注释: - 支持 bean(MVC 中定义的 Controller ) - 服务层 - DAO 的
我的支持 bean 使用 CDI,只要我不需要 EJB 的任何东西。 但我被其他两个困住了。我记得读过有关使用 EJB bean 的文章,因为池功能可以防止大量请求(或攻击,如果你愿意的话)。 所以简而言之,是否有任何理由使用 EJB(Stateless、Stateful、LocalBean 等),考虑到安全性或其他任何因素(不包括 ViewScoped)?
提前致谢。
最佳答案
您在这里犯了概念性错误。 CDI 绝对不是 EJB 的替代品。默认情况下的 CDI 根本不提供事务管理。 CDI 是一个 bean 管理和依赖注入(inject) API,而不是服务层 API。为了管理 CDI 中的事务,您必须添加另一个 API 以及一堆其他注释。
CDI 可以替代例如 JSF 托管 bean 注释,但绝对不能替换 EJB 注释。
所以没有有效的“CDI vs EJB”问题。两者都有自己完全不同的目的。请注意,您可以在基于 CDI 的托管 bean 类中完美地注入(inject)基于 EJB 的服务类。
至于安全性,不清楚您为什么在标题和标签中提到该部分,但 CDI 和 EJB 之间的决定与安全性无关(仅仅是因为没有有效的“CDI vs EJB”问题排在首位)。
关于java - CDI和EJB,安全问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13015504/