我有Restful Webservice实现。通过注入@Resource使用UserTransaction对象维护事务的位置。我可以看到UserTransaction对象似乎是null。这背后的原因可能是什么?
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();
}
}
}
答案 0 :(得分:1)
背后的原因是UserTransaction
只能注入支持事务的托管组件。支持Java EE中事务的常用组件是EJB bean。使用UserImpl
为您的@Stateless
课程添加注释。 UserTransaction
表示您要手动管理您的交易,因此您必须告诉容器@TransactionManagement
。像这样:
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
@Path("User")
public class UserImpl
答案 1 :(得分:0)
您的UserImpl
似乎不是managed
。 注入仅适用于容器管理对象。此问题并非特定于注入UserTransaction
,而是注入一般情况。结果HttpServletRequest
也为空。