Java Spring框架中的EJB替代方案是什么

Java Spring框架中的EJB替代方案是什么,java,spring,spring-mvc,jpa,ejb-3.0,Java,Spring,Spring Mvc,Jpa,Ejb 3.0,我试图学习Spring框架,在此之前我使用EJB创建应用程序 [Web服务]->[Business Layer]->[DAO Layer]|[Database] 依循 WebServices:使用带有url映射的Jersey的Restful API,支持JSON和XML格式(news/list.JSON,news/list.XML)。端点(url映射方法)接收到请求后,通过查找(远程、本地)将其转发到相关EJB。EJB处理每件事,应用业务规则并将结果作为DTO(数据传输对象)返回,然后服务将结果

我试图学习Spring框架,在此之前我使用EJB创建应用程序

[Web服务]->[Business Layer]->[DAO Layer]
|[Database]

依循

  • WebServices:使用带有
    url映射的
    Jersey
    的Restful API,支持JSON和XML格式(
    news/list.JSON
    news/list.XML
    )。端点(url映射方法)接收到请求后,通过查找(远程、本地)将其转发到相关EJB。EJB处理每件事,应用业务规则并将结果作为DTO(数据传输对象)返回,然后服务将结果转换为所需的格式(JSON、XML)

  • 业务层:使用
    远程
    本地
    接口在
    EJB
    中实现的业务层(Facade),这些EJB可以调用其他EJB。WebService层(和/或计时器服务和MDB)也可以调用任何EJB)。对于计时器服务相关的功能,我使用了
    EJB计时器服务
    ,对于消息,我使用了
    消息驱动Bean
    和用于日志记录和审计的拦截器

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

  • 我曾在
    springmvc
    上工作过,但无法正确映射/理解上述体系结构 我对AOP略知一二,我认为它是拦截器的完美替代品(或者至少它对我有用)

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

  • 泽西岛(RestAPi)春季替代方案>
  • Spring中的EJB替代方案(由于EJB支持远程处理,对方法的每个查找调用都被视为一个事务,对EJB方法的调用可以被拦截,并且具有状态完整和无状态的风格)
  • 春季的计时器服务替代方案
  • 春季的消息驱动Bean替代方案
  • 拦截器的替代方案是春季的AOP(根据我的经验和我的目的)
  • JPA(实体经理)春季替代方案

  • 这将同时解释Spring和Java EE(您将在其中使用EJB):

  • 泽西岛也提供Spring解决方案-请访问他们的网站
  • Spring支持远程调用,例如RMI;它还支持交易;好吧,没有显式的有状态/无状态Spring组件——这取决于您如何使用它
  • 虽然没有什么比TimerService更棒的了,但是,您可以使用石英
  • Spring提供MDP(消息驱动的POJO)
  • Spring确实支持JPA—请参阅第一个链接
  • 另一个很酷的比较幻灯片:

    • 泽西岛(RestAPi)春季替代方案⇨ 如果您想使用控制器(
      @Controller
      annotation),它是RESTAPI(在spring中带有
      @Path
      annotation)或spring mvc
    • 春天的EJB替代方案⇨ Spring并没有提供现成的statefull bean,但您可以使用
      @Service
      注释(或DAO的
      @Repository
      ),但您必须手动处理事务(例如使用注释)
    • 消息驱动Bean替代方案⇨ Spring中没有现成的等价物,您可以使用Spring的注入和库使其工作(
      package org.springframework.jms
      应该包含您需要的内容)
    • JPA(实体管理器)替代方案不是ejb⇨ 所以它可以在春天使用
    Spring是一个轻量级的库,因此您可以使用EJB执行所有操作,但它更具可配置性,因此您将有更多的工作要做,就像EJB一样。但是这种配置给您带来了一些好处:您可以控制它

    泽西岛(RestAPi)春季替代方案

    在我看来,春季MVC。只需将控制器中的方法注释为您想要使用的RESTAPI

    Spring中的EJB替代方案(由于EJB支持远程处理,对方法的每个查找调用都被视为一个事务,对EJB方法的调用可以被拦截,并且具有状态完整和无状态的风格)

    没有完全的替代方案。有几种技术可以部分实现这一点:用于远程调用的Spring远程处理、作为事务的Spring事务、用于拦截调用的Spring AOP拦截器。然而,例如,远程调用上的XA事务在Spring中是无法实现的。然而,Spring可以很好地与EJB配合使用,所以如果您喜欢它们,您仍然可以使用它们并在软件的其他部分使用Spring

    春季的计时器服务替代方案

    春季的消息驱动Bean替代方案

    拦截器的替代方案是春季的AOP(根据我的经验和我的目的)

    在春天有几个级别的拦截器。有,有bean调用拦截器,比如SpringAutowiringInterceptor,还有基于AOP的拦截器,可以在多个层中使用

    JPA(实体经理)春季替代方案


    Spring也有很多这样的功能。实际上,只使用JPA是非常简单的。如果Spring数据不是您想要的,那么还有其他数据层替代方案。

    这几乎是一个只提供链接的答案。你会考虑直接在你的答案中添加相关的细节吗?