Я пытаюсь расширить EJB из универсального класса следующим образом:
Мой абстрактный общий класс:
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; } }
Моя EJB-логика
@Stateless public class UsuarioDAO extends CrudDAO<UsuarioEntity>{ public UsuarioDAO() { this.entityClass = UsuarioEntity.class; } }
У моей сущности есть только геттеры и сеттеры
У меня есть еще один 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 для развертывания.