Java @资源UserTransaction为空

Java @资源UserTransaction为空,java,jta,Java,Jta,我有RESTfulWebService实现。其中,我通过注入@Resource来使用UserTransaction对象维护事务。我可以看到UserTransaction对象似乎是空的。这背后的原因可能是什么 import javax.transaction.UserTransaction; @Path("User") public class UserImpl { @Resource private UserTransaction tx;

我有RESTfulWebService实现。其中,我通过注入@Resource来使用UserTransaction对象维护事务。我可以看到UserTransaction对象似乎是空的。这背后的原因可能是什么

import javax.transaction.UserTransaction;

@Path("User")
    public class UserImpl { 

        @Resource
        private UserTransaction tx;

        @Context
        HttpServletRequest httpServletRequest;

     public void doAction() {
          try {
            tx.begin();
            // do the work...
          } finally {
            tx.commit();
          }
       }
    }

其背后的原因是
UserTransaction
只能注入到支持事务的托管组件中。JavaEE中支持事务的常用组件是EJB bean。为此,用
@Stateless
注释您的
UserImpl
UserTransaction
表示您希望手动管理您的事务,因此您必须告诉使用
@TransactionManagement
的容器。像这样:

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
@Path("User")
public class UserImpl

您的
UserImpl
似乎未被
管理
注入仅在容器管理的对象中有效。此问题不特定于
UserTransaction
的注入,而是一般的注入。因此,
HttpServletRequest
也为空

您能更详细地描述一下您的堆栈/系统吗?我有对象HttpServletRequest的值,但UserTransaction资源没有注入我尝试过使用lookup InitialContext ctx=new InitialContext();UserTransaction tx=(UserTransaction)ctx.lookup(“javax.transaction.UserTransaction”);它工作得很好,但是@resource注入不起作用here@Arun即使是无状态的,我也不在这里使用EJB。早些时候,我使用EJB项目来维护基于容器的事务。我使用rest客户端的EJB查找来访问EJB对象。我试图用UserTransaction对象手动执行事务。我用上面的代码段手动维护事务。现在我正在检查一个使用@ResourceNote注入UserTrasaction的解决方案:RESTful JAX-RS服务是一个容器管理的组件。它不仅是EJB,而且基本上是JEE规范的任何技术部分(JSF、JAX-WS、JAX-RS等)。