Spring Framework 中的 EJB 替代品是什么

What is EJB alternative in Spring Framework

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

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

按照以下方式

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

  2. 业务层:业务层(Facade)在EJB中实现,具有remotelocal接口,这些EJB 可以调用其他 EJB。 WebService 层(and/or 定时器服务和 MDB)也可以调用任何 EJB)。对于与计时器服务相关的功能,我使用了 EJB Timer Service,对于消息,我使用了 Message Drive Bean 以及用于记录和审计的拦截器。

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

我已经在 Spring MVC 上工作,但无法 map/understand 正确地用于上述架构 我对 AOP 有所了解,我认为它是拦截器的完美替代品(或者至少它对我有用)

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

  1. Spring>
  2. 中的 Jersey (RestAPI) 替代方案
  3. Spring 中的 EJB 替代方案(由于 EJB 支持远程处理,对方法的每次查找调用都被视为事务,对 EJB 方法的调用可能会被拦截,并且它具有全状态和无状态两种风格)?
  4. Spring 中的计时器服务替代方案?
  5. Spring 中的 Message Drive Bean 替代方案?
  6. 拦截器替代方案是 Spring 中的 AOP(根据我的经验,符合我的目的)
  7. JPA(实体管理器)替代 spring?

这解释了 Spring 和 Java EE(您可能会在其中使用 EJB):http://www.slideshare.net/reza_rahman/java-ee-and-spring-sidebyside-34320697

  1. 泽西岛也提供 Spring 解决方案 - 查看他们的网站
  2. Spring 确实支持远程调用,例如通过 RMI;它还支持交易;据我所知,没有明确的 stateful/stateless Spring 组件——这取决于你如何使用它
  3. 据我所知,没有什么比 TimerService 更棒的了,但是,您可以使用 Quartz
  4. Spring 提供 MDP(消息驱动的 POJO)
  5. Spring 确实支持 JPA - 请先查看 link。

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

  • Spring 中的 Jersey (RestAPI) 替代品 ⇨ 它是 rest api(在 spring 中带有 @Path 注释)或 spring mvc,如果你想使用控制器(@Controller 注释)!
  • Spring 中的 EJB 替代方案 ⇨ Spring 没有提供开箱即用的有状态 bean,但您可以使用 @Service 注释(或 @Repository 用于 DAO)但是您必须手动处理交易(例如带有注释)
  • Message Drive Bean 替代品 ⇨ Spring 中没有开箱即用的等效项,您可以使用 Spring 的注入和库来使其工作(package org.springframework.jms 应该包含什么你需要)!
  • JPA(实体管理器)替代方案不是 ejb ⇨ 因此它可以在 Spring.
  • 中使用

Spring 是一个 轻量级 库,因此您可以使用 EJB 完成所有操作,但它的可配置性更高,因此您将有更多的工作要做 EJB 做的事情.但是这个配置给你带来了一些好处:你掌握了它!

Jersey (RestAPi) alternative in Spring?

Spring MVC does this perfectly fine,在我看来。只需将控制器中的方法注释为您要使用的 REST api。

EJB alternative in Spring (as EJB supports remoting, each lookup call to a method is treated as a transaction, calls to EJB's method could be intercepted and it comes with state-full and stateless flavors)?

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

Timer Service alternative in Spring?

Spring task scheduling

Message Drive Bean alternative in Spring?

Message Listener Containers

Interceptor alternative is AOP in Spring (As per my experience and that serve my purpose)

spring中有几个级别的拦截器。有handler interceptors in mvc,有像SpringAutowiringInterceptor这样的bean调用拦截器,也有可以在多层中使用的基于AOP的拦截器。

JPA(entity manager) alternative in spring?

Spring 也有多个。如果 Spring 数据不是您想要的,那么将 JPA 与 Spring-Data, it's designed to integrate to JPA. There are Spring JDBC 和其他数据层替代方案一起使用实际上非常简单。