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