首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IllegalArgumentException:无法将UserTransaction字段设置为ServerVMClientUserTransaction

IllegalArgumentException:无法将UserTransaction字段设置为ServerVMClientUserTransaction
EN

Stack Overflow用户
提问于 2013-02-21 01:17:41
回答 1查看 1.1K关注 0票数 1

我正在将一个应用程序从GlassFish 3.1迁移到JBoss 6.1。

这段代码在GlassFish上工作得很好,但在JBoss上抛出了一个丑陋的错误:

自定义注释:

代码语言:javascript
复制
@Named
@ViewAccessScoped
@Stereotype
@Target( { ElementType.TYPE, ElementType.METHOD, ElementType.FIELD } )
@Retention(RetentionPolicy.RUNTIME)
public  @interface Model {        
}

Bean:

代码语言:javascript
复制
@Model
public class MyBean extends BaseBean {

    @Inject
    UserService userService

    public void save() {
        startTransaction();
        studioService.persist(studio);
        commitTransaction();
    }
}

基础Bean:

代码语言:javascript
复制
public class BaseBean implements Serializable {

    @Resource
    protected UserTransaction transaction;
    @PersistenceContext(unitName = "fits_PU")
    protected EntityManager entityManager;
    [...]

    protected void startTransaction() {
        try {
            transaction.begin();
            entityManager.joinTransaction();
        } catch [a few exceptions]
    }

    protected void commitTransaction() {
        try {
            transaction.commit();
        } catch [an awful lot of exceptions]
    }
}

我得到了以下异常:

代码语言:javascript
复制
Caused by: java.lang.IllegalArgumentException: Can not set javax.transaction.UserTransaction field my.company.project.BaseBean.transaction to org.jboss.tm.usertx.client.ServerVMClientUserTransaction
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164) [:1.7.0_11]
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168) [:1.7.0_11]
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) [:1.7.0_11]
    at java.lang.reflect.Field.set(Field.java:680) [:1.7.0_11]

我整个下午都在谷歌上搜索,但没有找到任何提示。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-21 19:18:28

所以。我环顾四周,试了又错,发现我错了。

如果我使用EJB,我不需要管理任何UserTransaction,因为事务是由容器管理的。因此,

  1. 我删除了Bean中对它的所有引用
  2. 我将@Named服务更改为@Stateless EJB
  3. 我使用@EJB注释而不是EJB将它们注入到我的Bean中

希望能对其他人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14985931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档