什么是Spring Framework中的EJB替代方案
我试图学习Spring Framework,之前我曾经用EJB创建应用程序
[Web services]->[Business Layer]->[DAO Layer]
| [数据库]
以下方式
-
WebServices :使用
Jersey
和url mappings
Restful API,支持JSON和XML格式(news/list.json
,news/list.xml
)。 一旦端点(url-mapped-method)收到请求,它就会通过查找(远程,本地)转发到相关的EJB。 EJB处理每一件事,应用业务规则并将结果作为DTO(数据传输对象)返回,然后Service将结果转换为所需的格式(JSON,XML) -
业务层 :在
EJB
使用remote
和local
接口实现的业务层(Facade),这些EJB可以调用其他EJB。 WebService层(和/或Timer服务和MDB)也可以调用任何EJB)。 对于与计时器服务相关的function,我使用了EJB Timer Service
,而Message使用了Message Drive Bean
和拦截器来进行日志记录和审计。 -
DAO Layer :所有与数据库相关的函数(添加,编辑,删除,搜索)使用
EntityManager
编写JPA/Hibernate
(实体bean和HQL)。 无缝事务支持,每个EJB的方法(基于查询)调用被视为一个单独的事务,DAO层的调用方法是同一事务的一部分(假设没有提供额外的配置)。 在单个事务中执行多个操作如果一个db操作失败,则所有其他操作将自动回滚。 每个表都映射为具有关系等的实体类。
我曾经在Spring MVC
但是无法正确地映射/理解上面的架构我对AOP有点了解并且我认为它是拦截器的完美替代品(或者至少它对我有用)
现在我的问题是如何在Spring框架中替换所有这些 ?
- 泽西(RestAPi)替代spring>
- Spring中的EJB替代方案(因为EJB支持远程处理,对方法的每次查找调用都被视为事务,对EJB方法的调用可以被拦截,并且它带有状态完全和无状态的风格)?
- Spring中的定时服务替代方案?
- Spring中的Message Drive Bean替代方案?
- 拦截器替代品是春季的AOP(根据我的经验,这符合我的目的)
- JPA(实体经理)在春季的替代方案?
泽西(RestAPi)在spring的另类选择?
在我看来,Spring MVC 做得非常好 。 只需在控制器中注释您的方法作为您要使用的REST apis。
Spring中的EJB替代方案(因为EJB支持远程处理,对方法的每次查找调用都被视为事务,对EJB方法的调用可以被拦截,并且它带有状态完全和无状态的风格)?
没有完整的选择。 有几种技术可以部分实现:远程调用的Spring远程处理,事务处理的Spring事务,拦截调用的Spring AOP拦截器。 但是,例如,远程调用上的XA事务是Spring中没有得到的。 然而,Spring适用于EJB,所以如果你喜欢它们,你仍然可以使用它们并在软件的其他部分使用Spring。
Spring中的定时服务替代方案?
Spring任务调度
Spring中的Message Drive Bean替代方案?
消息侦听器容器
拦截器替代品是春季的AOP(根据我的经验,这符合我的目的)
spring有几级拦截器。 在mvc中有处理程序拦截器 ,有类似SpringAutowiringInterceptor的bean调用拦截器,并且有基于AOP的拦截器可以在多个层中使用。
JPA(实体经理)在春季的替代方案?
Spring也有多个。 将JPA与Spring-Data一起使用实际上非常简单,它旨在与JPA集成 。 如果Spring Data不是您想要的,那么有Spring JDBC和其他数据层替代方案。
- 如果你想使用控制器(@Controller注释),那么Spring中的泽西(RestAPi)替代方案=>它的restapi(在spring用@Path注释)或spring mvc!
- Spring中的EJB替代方法=> Spring不会从盒子中提供statefull bean,但是你可以使用@service注释(或@Repository for DAO),但你必须手动处理事务(例如注释)
- 消息驱动器Bean替代=> Spring中没有开箱即用的相应function,您可以使用Spring的注入和库来使其正常工作(包org.springframework.jms应该包含您需要的内容)!
- JPA(实体管理器)替代品不是ejb:因此它可以在Spring中使用。
Spring是一个“轻量级”库,因此您可以使用EJB完成所有操作,但它更易于配置,因此您将有更多工作与EJB相同。 但是这种配置带给您一些优势:您可以随心所欲!
这解释了Spring和Java EE(你可以使用EJB): http : //www.slideshare.net/reza_rahman/java-ee-and-spring-sidebyside-34320697
- Jersey也提供Spring解决方案 – 请访问他们的网站
- Spring确实支持远程调用,例如RMI; 它还支持交易; AFAIK,没有明确的有状态/无状态Spring组件 – 它取决于你如何使用它
- AFAIK没有TimerService那么棒,但是,你可以使用Quartz
- Spring提供MDP(消息驱动的POJO)
- Spring确实支持JPA – 请参阅第一个链接。
另一个很酷的比较幻灯片: http ://www.slideshare.net/kelapure/java-e-evsspringshootout
- 我如何从EJB3和JBoss开始?
- 示例或用途解释EJB事务属性的案例
- SessionContext.getBusinessObject()的返回值与bean中使用的’this’关键字有何不同?
- 如何在群集环境中使用javax.ejb.Singleton?
- 可以使用@Resource在EJB3.0中注入原语吗?
- EJB 3.x中@Schedule方法的动态参数
- weblogic ejb ComplianceException
- 在没有注释的情况下将Hibernate迁移到JPA
- 如何避免使用collection fetch指定的警告“firstResult / maxResults; 在内存中应用!“在使用Hibernate时?