我了解到,如果我在 Spring 上下文中使用 EJB,我将获得与在“纯”EJB3 环境中使用它相同的所有好处,这是真的吗?我用谷歌搜索,但找不到明确、明确的答案。
例如,假设我有一个会话 bean,它更新了数据库中的一些表,并引发了系统异常。在“纯”EJB3 环境中,事务被回滚。例如,如果我使用 Spring 来 @Autowire 这个 bean,Spring 会以与 EJB3 容器相同的方式处理事务吗?要不然是啥?它可能需要一些特定的配置还是完全“自动”的?
我了解到,如果我在 Spring 上下文中使用 EJB,我将获得与在“纯”EJB3 环境中使用它相同的所有好处,这是真的吗?我用谷歌搜索,但找不到明确、明确的答案。
例如,假设我有一个会话 bean,它更新了数据库中的一些表,并引发了系统异常。在“纯”EJB3 环境中,事务被回滚。例如,如果我使用 Spring 来 @Autowire 这个 bean,Spring 会以与 EJB3 容器相同的方式处理事务吗?要不然是啥?它可能需要一些特定的配置还是完全“自动”的?
我了解到,如果我在 Spring 上下文中使用 EJB,我将获得与在“纯”EJB3 环境中使用它相同的所有好处,这是真的吗?
您通常使用 POJO + Spring或EJB3。我对你所说的“EJB in Spring”有点困惑......
POJO + Spring 和 EJB3 现在非常接近,并且在声明式事务管理方面具有相同的设施。
我不知道有关安全性的所有细节,但我想说这两种技术也非常相似。
实际上 Spring 和 EJB3 都依赖于其他规范。重要的有:JPA(持久性)、JTA(分布式事务)、JMS(消息传递)、JDBC(数据源)。两个技术堆栈中都存在对此的良好支持。
这两种技术都变得非常灵活,您可以选择使用或不使用什么。因此,您可以在应用程序中使用 EJB3。服务器并且很轻。或者,您可以将 Spring 与几乎与成熟应用程序一样重的所有模块一起使用。服务器。
我认为 EJB3 模型仍然更丰富一些,包括远程处理、有状态会话 bean (SFSB)、容器管理的事务和扩展的持久性上下文。加上可能的集群支持取决于应用程序。服务器。但这些是很少使用的高级功能(而且 IMO 需要专业知识)。
spring 有很多特性,其中之一是事务管理,它使用一个通用的抽象来跨越所有不同的 orm 实现(jpa、raw hibernate、jdbc、jdo 等)。默认行为是在事务方法中,运行时异常会导致回滚(这可能是您想要的),但您也可以微调回滚规则。
但是,这些都不需要 EJB。如果你不使用 EJB(无状态、有状态、mdb),JPA 就足够了,而且spring jpa 支持非常好。在 90% 的情况下,spring 将在没有 EJB 的情况下提供您需要的一切。
编辑:
阅读有关Spring EJB 集成的信息
您可以让 Spring 处理事务并相应地回滚。您必须对其进行配置才能这样做,但对于 EJB 也是如此。
生活中没有什么是真正“自动的”。有时你必须告诉代码你想要什么。
真正的问题是:为什么你认为你需要 EJB 和 Spring?使用 EJB 可以做的任何事情都可以通过 Spring 使用 POJO 来完成。EJB 在这里给你买了什么?
我通过文章的链接得到了很好的答案,并且从我编译的那些中得到了我的理解,是的,会话 bean 的工作方式相同,无论它们是否与 Spring 一起使用,只要 bean 是在 Spring 上下文中定义的<jee:jndi-lookup>
. 还找到了一篇关于此的简单好文章:http: //java.dzone.com/articles/ejb-30-and-spring-25
但是我不能只接受一个答案,因为对我来说它们都一样好,但没有一个是完全正确的:) 可能是我的问题不够清楚,无法开始......
(有人建议我将其发布为我自己问题的答案)