我正在将一个应用程序从GlassFish 3.1迁移到JBoss 6.1。
这段代码在GlassFish上工作得很好,但在JBoss上抛出了一个丑陋的错误:
自定义注释:
@Named
@ViewAccessScoped
@Stereotype
@Target( { ElementType.TYPE, ElementType.METHOD, ElementType.FIELD } )
@Retention(RetentionPolicy.RUNTIME)
public @interface Model {
}Bean:
@Model
public class MyBean extends BaseBean {
@Inject
UserService userService
public void save() {
startTransaction();
studioService.persist(studio);
commitTransaction();
}
}基础Bean:
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]
}
}我得到了以下异常:
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]我整个下午都在谷歌上搜索,但没有找到任何提示。有什么想法吗?
发布于 2013-02-21 19:18:28
所以。我环顾四周,试了又错,发现我错了。
如果我使用EJB,我不需要管理任何UserTransaction,因为事务是由容器管理的。因此,
@Named服务更改为@Stateless EJB@EJB注释而不是EJB将它们注入到我的Bean中希望能对其他人有所帮助。
https://stackoverflow.com/questions/14985931
复制相似问题