gpt4 book ai didi

java - 尝试从通用类扩展 EJB : IllegalArgumentException The Argument {0} is not a valid local client view for the EJB {1}

转载 作者:行者123 更新时间:2023-11-30 08:44:14 25 4
gpt4 key购买 nike

我正在尝试从泛型类扩展 EJB,如下所示:

  1. 我的抽象通用类:

    public abstract class CrudDAO<T> {

    @PersistenceContext(unitName = "MYPU")
    protected EntityManager em;

    protected Class<T> entityClass;

    public int count() {
    Query count = em.createQuery("select count(u) from " + entityClass.getSimpleName() + " u");
    return Integer.parseInt(count.getSingleResult().toString());
    }

    public T create(T entity){
    em.persist(entity);
    return entity;
    }

    public T update(T entity){
    return em.merge(entity);
    }

    public void delete(int id) {
    T entity = em.find(entityClass, id);
    em.remove(entity);
    }

    public T find(int id){
    return em.find(entityClass, id);
    }

    public List<T> findAll(Integer page, Integer maxRecords) {
    Query q = em.createQuery("select u from " + entityClass.getSimpleName() + " u");
    if (page != null && maxRecords != null) {
    q.setFirstResult((page - 1) * maxRecords);
    q.setMaxResults(maxRecords);
    }
    return q.getResultList();
    }

    public<V> List<V> executeListNamedQuery(String name){
    return em.createNamedQuery(name).getResultList();
    }

    public<V> List<V> executeListNamedQuery(String name, Map<String,Object> params){
    Query q = em.createNamedQuery(name);
    for (Map.Entry<String, Object> entry : params.entrySet()) {
    q.setParameter(entry.getKey(), entry.getValue());
    }
    return q.getResultList();
    }

    public<V> V executeSingleNamedQuery(String name){
    List<V> lista = em.createNamedQuery(name).getResultList();
    if(!lista.isEmpty()){
    return lista.get(0);
    }
    return null;
    }

    public<V> V executeSingleNamedQuery(String name, Map<String,Object> params){
    Query q = em.createNamedQuery(name);
    for (Map.Entry<String, Object> entry : params.entrySet()) {
    q.setParameter(entry.getKey(), entry.getValue());
    }
    List<V> lista = q.getResultList();
    if(!lista.isEmpty()){
    return lista.get(0);
    }
    return null;
    }
    }
  2. 我的 EJB 逻辑

    @Stateless
    public class UsuarioDAO extends CrudDAO<UsuarioEntity>{
    public UsuarioDAO() {
    this.entityClass = UsuarioEntity.class;
    }
    }
  3. 我的实体只有 getter 和 setter

  4. 我有另一个 EJB,它注入(inject) UsuarioDAO 并通过接口(interface)向 Restfull 服务公开一个方法。

    @Stateless
    public class AuthBean implements IAuthServiceBean {

    @Inject
    private UsuarioDAO usuarioDAO;

    @Override
    public UsuarioEntity agregarUsuario(UsuarioEntity usuario) {
    return usuarioSpadiesDAO.create(usuario);
    }
    }

我的 Restfull 服务调用 agregarUsuario 注入(inject) AuthBean。我的问题是当我尝试访问 Restfull 服务时它抛出了这个异常:

The argument package.to.dao.CrudDAO is not a valid local client view for the EJB UsuarioDAO(Application: <MyEarSnapShot>, EJBComponent: <MyWarSnapshot>)

我有一个包含 WAR 和 EJB 组件的 EAR。 EJB 组件是 WAR 组件的依赖。 Restfull Services 在 WAR 组件中,其他东西在 EJB 组件中。

我正在使用 WebLogic 12c 进行部署。

最佳答案

安装补丁 19533331 为我解决了这个问题。

19533331 依赖注入(inject) 12.1.3.0.3 CDI 在处理 EJB 时不考虑 EJB 的所有父类(super class)和接口(interface)。

关于java - 尝试从通用类扩展 EJB : IllegalArgumentException The Argument {0} is not a valid local client view for the EJB {1},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com