EJB - EJBTransactionRolledbackException参数类型不匹配 - 重载方法

时间:2015-03-11 21:32:28

标签: ejb jboss7.x ejb-3.0 illegalstateexception wildfly-8

我真的需要一些帮助!通过调用具有方法重载的EJB,我遇到以下异常: javax.ejb.EJBTransactionRolledbackException:参数类型不匹配

有趣的是,这种情况是随机发生的,只有在这种重载方法中才会发生。请参阅以下结构:

// superclass
public abstract class GenericService<T> {

    public void update(T object) throws Exception {
        // some logic
    }

}

// subclass
@Stateless
public class TableService extends GenericService<Table> implements ITableService {

    @Override
    public void update(Table table) throws Exception {
        /*
         * some logic
         */

        // call super
        super.update(table);
    }
}

如果我调用包含 super.update(table)语句的 TableService.update ,则会发生错误。但是,如果我从 TableService.update 中删除 super.update(table)语句,直接调用DAO(跳过 super ),它的工作原理。

更糟糕的是,通常情况并非如此。只有当我有时重启jboss wildfly时。

显然没有错,应该完全包含 super.update(table)语句。你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

容器(JBOSS)提供的EJB代理传递类型为Object的相应方法的参数。 因此,如果存在重载方法,则代理可能无法解析其中一个呼叫

    @Stateless
public class TableService extends GenericService<Table> implements ITableService {

    @Override
    public void update(Table table) throws Exception {
        /*
         * some logic
         */

        // call super
        super.update(table);
    }

    @Override
    public void update(List<Table> table) throws Exception {
        /*
         * some logic
         */

        // call super
        super.update(table);
    }
}

proxy.update(Object obj)...参数类型不匹配