我真的需要一些帮助!通过调用具有方法重载的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)语句。你能帮忙吗?
答案 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)...
参数类型不匹配