Попытка расширить EJB из универсального класса: IllegalArgumentException Аргумент {0} не является допустимым локальным клиентским представлением для EJB {1}

Я пытаюсь расширить 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. У моей сущности есть только геттеры и сеттеры

  4. У меня есть еще один EJB, который внедряет UsuarioDAO и предоставляет метод через интерфейс службе Restfull.

    @Stateless
    public class AuthBean implements IAuthServiceBean {
    
        @Inject
        private UsuarioDAO usuarioDAO;
    
        @Override
        public UsuarioEntity agregarUsuario(UsuarioEntity usuario) {
            return usuarioSpadiesDAO.create(usuario);
        }
    }
    

Мой сервис Restfull вызывает agregarUsuario Injecting AuthBean. Моя проблема в том, что когда я пытаюсь получить доступ к сервису Restfull, он выдает это исключение:

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

У меня есть EAR, который содержит компонент WAR и EJB. Компонент EJB является зависимостью компонента WAR. Restfull Services находится в компоненте WAR, другие материалы находятся в компоненте EJB.

Я использую WebLogic 12c для развертывания.


person Andres Decastro    schedule 23.11.2015    source источник
comment
Пожалуйста, покажите структуру вашего ear-модуля и как модуль war включает в себя ejb-модуль (интерфейс API или зависимость ejb-jar?)   -  person maress    schedule 23.11.2015
comment
Есть ли прогресс в решении этой проблемы? Я испытываю ту же проблему. Он внезапно появился на моем экземпляре Weblogic 12.1.3 без каких-либо изменений кода... Полная переустановка Weblogic устранила проблему, но как долго?   -  person Waterstraal    schedule 03.12.2015


Ответы (1)


Установка патча 19533331 решила проблему для меня.

19533331 Внедрение зависимостей 12.1.3.0.3 CDI не учитывает все суперклассы и интерфейсы EJB при обработке EJB.

person Waterstraal    schedule 03.12.2015