什么是Spring Framework中的EJB替代方案

我试图学习Spring Framework,之前我曾经用EJB创建应用程序

[Web services]->[Business Layer]->[DAO Layer] | [数据库]

以下方式

  1. WebServices :使用Jerseyurl mappings Restful API,支持JSON和XML格式( news/list.jsonnews/list.xml )。 一旦端点(url-mapped-method)收到请求,它就会通过查找(远程,本地)转发到相关的EJB。 EJB处理每一件事,应用业务规则并将结果作为DTO(数据传输对象)返回,然后Service将结果转换为所需的格式(JSON,XML)

  2. 业务层 :在EJB使用remotelocal接口实现的业务层(Facade),这些EJB可以调用其他EJB。 WebService层(和/或Timer服务和MDB)也可以调用任何EJB)。 对于与计时器服务相关的function,我使用了EJB Timer Service ,而Message使用了Message Drive Bean和拦截器来进行日志记录和审计。

  3. DAO Layer :所有与数据库相关的函数(添加,编辑,删除,搜索)使用EntityManager编写JPA/Hibernate (实体bean和HQL)。 无缝事务支持,每个EJB的方法(基于查询)调用被视为一个单独的事务,DAO层的调用方法是同一事务的一部分(假设没有提供额外的配置)。 在单个事务中执行多个操作如果一个db操作失败,则所有其他操作将自动回滚。 每个表都映射为具有关系等的实体类。

我曾经在Spring MVC但是无法正确地映射/理解上面的架构我对AOP有点了解并且我认为它是拦截器的完美替代品(或者至少它对我有用)

现在我的问题是如何在Spring框架中替换所有这些

  1. 泽西(RestAPi)替代spring>
  2. Spring中的EJB替代方案(因为EJB支持远程处理,对方法的每次查找调用都被视为事务,对EJB方法的调用可以被拦截,并且它带有状态完全和无状态的风格)?
  3. Spring中的定时服务替代方案?
  4. Spring中的Message Drive Bean替代方案?
  5. 拦截器替代品是春季的AOP(根据我的经验,这符合我的目的)
  6. 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

  1. Jersey也提供Spring解决方案 – 请访问他们的网站
  2. Spring确实支持远程调用,例如RMI; 它还支持交易; AFAIK,没有明确的有状态/无状态Spring组件 – 它取决于你如何使用它
  3. AFAIK没有TimerService那么棒,但是,你可以使用Quartz
  4. Spring提供MDP(消息驱动的POJO)
  5. Spring确实支持JPA – 请参阅第一个链接。

另一个很酷的比较幻灯片: http ://www.slideshare.net/kelapure/java-e-evsspringshootout