【问题标题】:EJB3 with SpringEJB3 与 Spring
【发布时间】:2010-06-01 13:21:17
【问题描述】:

我了解到,如果我在 Spring 上下文中使用 EJB,我将获得与在“纯”EJB3 环境中使用它相同的所有好处,这是真的吗?我已经用谷歌搜索了,但找不到明确、明确的答案。

例如,假设我有一个会话 bean,它更新了数据库中的一些表,并引发了系统异常。在“纯”EJB3 环境中,事务被回滚。例如,如果我使用 Spring 的 @Autowire 这个 bean,Spring 会以与 EJB3 容器相同的方式处理事务吗?要不然是啥?它可能需要一些特定的配置还是完全“自动”的?

【问题讨论】:

  • 您似乎已经回答了自己的问题。我建议您发布您的“更新”作为答案。这样你几天后就可以接受了。
  • @ewernli:好的,按照你的建议做

标签: java spring transactions ejb-3.0 autowired


【解决方案1】:

我已经明白,如果我在 春天的背景,我都一样 就像我在使用它一样的好处 “纯”EJB3 环境,这是真的吗?

您通常使用 POJO + Spring EJB3。我对你所说的“EJB in Spring”有点困惑......

POJO + Spring 和 EJB3 现在非常接近,并且在声明式事务管理方面具有相同的设施。

我不了解安全性的所有细节,但我想说这两种技术也非常相似。

实际上 Spring 和 EJB3 都依赖于其他规范。重要的是:JPA(持久性)、JTA(分布式事务)、JMS(消息传递)、JDBC(数据源)。两种技术堆栈都对此提供了良好的支持。

这两种技术都变得非常灵活,您可以选择使用或不使用什么。因此,您可以在应用程序中使用 EJB3。服务器并且很轻。或者,您可以将 Spring 与几乎与成熟应用程序一样重的所有模块一起使用。服务器。

我认为 EJB3 模型仍然更丰富一些,包括远程处理、有状态会话 bean (SFSB)、容器管理的事务和扩展的持久性上下文。加上可能的集群支持取决于应用程序。服务器。但这些是很少使用的高级功能(而且 IMO 需要专业知识)。

EJB3 vs Spring

【讨论】:

  • 可以使用 Spring 连接会话 bean。这是一个很好的问题,这样做是否有任何意义,但到目前为止我有两个原因:1)我们拥有的“规则”要求后端服务是 EJB。 2) 使用 Spring 上下文文件很容易模拟 EJB 使用的某些服务。我不明白的是 Spring 是如何利用 EJB 的,我是否失去了容器的一些“自动”特性。
  • @fish 啊!所以你的问题实际上是关于如何将 EJB 与 Spring 集成。我错了,我的错。查看static.springsource.org/spring/docs/3.0.x/…,我的看法是Spring 启动JTA 事务,EJB 只要标有REQUIRED(这是默认设置)就注册到其中。所以这应该透明地工作。但如果我是你,无论如何我都会做一些测试来确定。
【解决方案2】:

spring 有很多特性,其中之一是transaction management,它使用一个通用的抽象来跨越所有不同的 orm 实现(jpa、raw hibernate、jdbc、jdo 等)。默认行为是在事务方法中,运行时异常会导致回滚(这可能是您想要的),但您也可以fine-tune the rollback rules

但是,这些都不需要 EJB。如果您不使用 EJB(无状态、有状态、mdb),JPA 就足够了,spring jpa support 非常棒。在 90% 的情况下,spring 将在没有 EJB 的情况下提供您需要的一切。


编辑:

阅读这篇关于Spring EJB integration的文章

【讨论】:

    【解决方案3】:

    您可以让 Spring 处理事务并相应地回滚。您必须对其进行配置才能这样做,但 EJB 也是如此。

    生活中没有什么是真正“自动”的。有时你必须告诉代码你想要什么。

    真正的问题是:为什么您认为同时需要 EJB 和 Spring?使用 EJB 可以做的任何事情都可以通过 Spring 使用 POJO 来完成。 EJB 在这里给你买了什么?

    【讨论】:

    • '你必须配置它才能这样做':公平地说:两者都有合理的默认值。在春天:定义一个平台事务管理器,使用@transactional 注释,你就可以启动并运行,这不是很多配置
    • 你可以在 Spring 中使用远程处理 POJO 吗?
    • @seanizer - “配置不多”仍然不是“零配置”。我的陈述无需更正。
    • 不是更正,而是澄清。如果没有配置,spring 什么都做不了,但是在 spring 3 中,标准情况下的配置是最少的(就像在 EJB 3 中一样)。
    【解决方案4】:

    我通过文章的链接得到了很好的答案,从那些我编译的文章中我了解到,是的,会话 bean 的工作方式相同,无论它们是否与 Spring 一起使用,只要 bean 在带有<jee:jndi-lookup> 的 Spring 上下文。还找到了一篇很好的简单文章:http://java.dzone.com/articles/ejb-30-and-spring-25

    但是我不能只接受一个答案,因为对我来说他们都一样好,但没有一个是完全正确的:) 可能是我的问题不够清楚,无法开始......

    (有人建议我将其发布为我自己问题的答案)

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2011-05-29
      • 2011-09-30
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      相关资源
      最近更新 更多