java - Spring + EJB 3.1 CMT 与 BMT 事务

标签 java spring jakarta-ee ejb-3.1

我们有一个简单的无状态 EJB 计时器,它可以将 spring 服务的实例注入(inject)其中。 spring 服务有一个标记为事务性的方法。当 EJB 使用事务管理类型 CONTAINER 时,spring 服务调用会导致 IllegalStateException:不允许操作。所以我们将 EJB 事务管理类型设置为 BEAN,一切都像宣传的那样工作。这是正常的吗?我的印象是 spring 事务管理将加入 CMT。

示例 EJB

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@Interceptors(SpringBeanAutowiringInterceptor.class
public class TimerService {
    @Autowired
    IHelloService helloService;

    @Schedule(second="*/1", minute="*",hour="*", persistent=false)
    public void doWork(){
        helloService.hello();
    }
}

示例 Spring 服务

@Service
public class HelloService implements IHelloService {
    @Transactional
    public void hello(){

    }
}

最佳答案

如果您将 Spring 事务的传播级别定义为 SUPPORTS(默认为 REQUIRED),则可能可以解决该问题。我不记得 EJB 中默认设置的确切值,但似乎 EJB 方法没有启动事务(传播是默认的),但“你好”试图这样做,这导致了冲突。

关于java - Spring + EJB 3.1 CMT 与 BMT 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338598/

相关文章:

java - 在 Spring Data MongoDB 中使用 List 参数进行存储库查询

java - JAX-RS @Path 阻止加载静态资源

java - 自定义 Controller 中的 Spring REST 响应不同

java - 如何防止 TreeItem 选择?

java - 为什么 Spring 不将映射注入(inject)到子 Struts 2 Action 类中,而是注入(inject)父对象的对象?

ajax - 我不了解Servlets 3.0 API中的异步支持

jsp - 如何从 servlet 设置 JSP UseBean 值

java - MVC和jsp什么是 View ?

java - 我如何在我的java程序中使用随WAMP服务器安装的MySQL

java - GSON 库的 toJson() 返回错误的 json