- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试学习 Spring Framework,在此之前我曾使用 EJB 创建应用程序
[Web 服务]->[业务层]->[DAO 层]
| [数据库]
按照以下方式
WebServices:使用 Jersey
和 url mappings
的 Restful API,支持 JSON 和 XML 格式(news/list.json
, news/list.xml
).一旦请求被端点(url 映射方法)接收到,它就会通过查找(远程、本地)转发到相关的 EJB。 EJB处理每一件事,应用业务规则并将结果作为DTO(数据传输对象)返回,服务然后将结果转换为所需的格式(JSON,XML)
业务层:业务层(Facade)在EJB
中实现,具有remote
和local
接口(interface),这些 EJB 可以调用其他 EJB。 WebService 层(和/或定时器服务和 MDB)也可以调用任何 EJB)。对于与计时器服务相关的功能,我使用了 EJB Timer Service
,对于消息,我使用了 Message Drive Bean
和用于日志记录和审计的拦截器。
DAO 层:所有与数据库相关的功能(添加、编辑、删除、搜索)JPA/Hibernate
使用EntityManager
是写在这里(实体 bean 和 HQL)。无缝事务支持,每个 EJB 的方法(基于查找)调用被视为一个单独的事务,DAO 层的调用方法是同一事务的一部分(前提是没有提供额外的配置)。在单个事务中执行多个操作如果一个数据库操作失败,所有其他操作都会自动回滚。每个表都映射为具有关系等的实体类。
我曾在 Spring MVC
上工作,但无法正确映射/理解上述架构我对 AOP 了解一些,我认为它是拦截器的完美替代品(或者至少它对我有用)
现在我的问题是如何在 Spring 框架中替换所有这些?
最佳答案
Jersey (RestAPi) alternative in Spring?
Spring MVC does this perfectly fine , 在我看来。只需将 Controller 中的方法注释为您要使用的 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 remoting,作为事务的 Spring 事务,用于拦截调用的 Spring AOP 拦截器。但是,例如远程调用的 XA 事务是您在 Spring 中无法获得的。然而,Spring 与 EJB 一起工作得很好,所以如果您喜欢它们,您仍然可以拥有它们并在软件的其他部分使用 Spring。
Timer Service alternative in Spring?
Message Drive Bean alternative in Spring?
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 也有多个。将 JPA 与 Spring-Data 一起使用实际上非常简单,它是 designed to integrate to JPA .有Spring JDBC如果 Spring Data 不是您想要的,还有其他数据层替代方案。
关于java - 什么是 Spring Framework 中的 EJB 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33415530/
我需要审核 ejb bean 的调用。说审计我的意思是将当前登录的用户、方法名称、附加描述等信息写入数据库。我决定使用 CDI 装饰器来做到这一点: @Decorator public class A
当我使用 EJB 3.0 部署 Web 应用程序时,我看到了以下警告: WARNING: jar 'E:\mws\MCDS\portal\portal-web\target\portal-web-1.
我正在学习 EJB,当尝试使用 junit 测试它时,出现以下错误 cd.espoirmur.Ejb.InterfaceEjbLocal_80488159 Jun 03, 2016 10:33:58
是否可以在另一个 EJB 中使用 @EJB?我现在正在尝试这样做,但我的 EJB 最终为空。我将在示例中概述我的问题。 @Stateless @LocalBean @Local(LoginServic
我已通读 article试图理解为什么要在客户端和实体 bean 之间有一个 session bean。是不是因为让客户端直接访问实体bean,就让客户端对数据库一清二楚了? 因此,通过使用中间人(
我们正在尝试在具有两个节点的以域模式运行的 Wildfly 中查找远程 EJB。 设置是这样的: Wildfly 节点 1: 模块 A:EJB 客户端 模块 B:远程 EJB Wildfly 节点 2
我正在使用 Jboss 7,并且有两个单独的部署,它们都包含单例 EJB。 我需要一个 EJB 才能访问另一个 EJB 并能够调用其方法,但是,当应用程序服务器启动并尝试部署它们时,它似乎无法保证哪个
可能最好的方法是手动完成。但是在大型项目中,您需要一些工具来帮助您。正是这个想法促使我搜索了一个工具。 是否有任何 EJB 迁移工具可用于将 EJB 2.0 迁移到 3.x。 最佳答案 它的开发时间很
I am migrating Ejb 2.1 to Ejb 3.1. I changed Java Version from 1.6 to 1.8, and Ejb Version from 2.1
我已经使用 @ActivationConfigProperty 配置了消息目标类型、名称等。在 EJB 3.0 中,但我想配置 MDB使用部署描述符 ( ejb-jar.xml ),就像在 EJB 2
假设我有两个 EJB jar:A.jar 和 B.jar。我可以使用 CDI 将不是 EJB 的实用程序类 Autil 注入(inject) A.jar 中的 POJO 到 B.jar 中的 EJB
我有一个需要配置不同的现有项目。这需要在没有重大代码更改的情况下发生。我实际上希望我只能通过配置以某种方式做到这一点。在过去的 2 到 3 天里,我一直在阅读我能找到的关于这个问题的所有内容。我了解
我有一个非常简单的带有maven的ejb 3.0模块,它只有两个 session bean,一个是无状态的,另一个是单例的...当我尝试在Glassfish 3.0服务器上部署该项目时,我得到了这个异
我们在微服务中看到的是一个孤立的组件,通过协议(protocol)通过网络与该组件的父消费者进行通信。 我们在 EJB 1.0 中看到了非常相似的模式。 我的问题是:微服务架构模式是否类似于 EJB
我在 Java EE6 Singleton Session Bean 中有一个方法,它每 30 秒由 @Schedule(...) 计时器调用。这按预期工作,直到在方法中抛出并捕获异常(异常在 try
我正在 JDeveloper 11.1.1.4 中开发一个 JAX-WS WebService,它应该使用之前部署到 WebLogic 服务器的 JAR 中的 EJB。 WebService项目和EJ
我正在尝试使用 JAX-RS 注释将一些 EJB 公开为 REST Web 服务。当我部署 war WEB-INF/lib 中包含 EJB Jar 的文件到 Wildfly 8,我可以在 Web 管理
我是 EJB 方面的新手,但我已经获得了 EJB 级别的提升。 该层由一个 EJB 组成,它公开可用的操作: @Stateless(name = "myejb") public class Facad
假设我想创建一个我将在未来项目中使用的库,但我还想在该库中包含引用其他 EJB 等的 EJB。该库还将包含简单的 Java 类。最好的方法是什么?在这种情况下如何定义依赖关系?我想我会用注释来定义它们
我想知道是否可以按照这些思路做一些事情: 1)服务器端(EJB类) @Statefull public class SomeEJB implements SomeEJBRemote { @Resour
我是一名优秀的程序员,十分优秀!