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