【发布时间】:2013-11-23 18:23:20
【问题描述】:
我有一个带有 webservlet 注释的 java ee 7 servlet。我已将 servlet 的方法之一标记为 @Transactional。实体管理器也提供给带有持久性上下文的 servlet。
该方法只使用注入的实体管理器并持久化作为参数传入的实体。
此方法在处理 http 请求时从 servlet 调用。 glassfish4 抛出一个异常,指出没有可用的事务。
我使用该方法定义了一个简单的托管 CDI bean,并在其上添加了 @Transactional 注释并注入了实体管理器。
我将该对象注入到 servlet 并从 servlet 调用该方法,一切正常。 em 被注入到 CDI bean,事务启动并且 em.persist 工作正常。
这是否意味着 servlet 对象的方法不能有 @Transactional 注释?
【问题讨论】:
-
我不确定,可能是 servlet 无法代理。
-
正确,或多或少。 Transactional 是为 CDI 和 EJB 使用而定义的。我认为它不适用于 Faces 托管 bean、Servlet 等。