Pessoal,
Boa tarde.
Hoje, tentei fazer uma implementação para agilizar ainda mais o ambiente de desenvolvimento e cheguei a uma conclusão que seria interessante ter uma parte da regra de negocio de forma generica.
Ex: Listar tudos (um namedquery resolve as condições do tipo SN_ATIVO, TP_Status, etc)
Listar Produto com base em Like no nome, etc…
Então, hoje tenho um DAO generico que funciona tranquilo.
pensei em também fazer um BO generico para me auxiliar.
Para ter acesso ao banco, chamo uma instancia do DAO que é uma classe que extend de um DAO
Dentro do meu BO, acesso meu DAO desta maneira
FornecedorDAO fornecedorDAO = new FornecedorDAO(entityManager);
FornecedorVO f = fornecedorDAO.getById("cdFornecedor", fornecedorVO.getCdFornecedor());
Logo, para conseguir fazer o meu BO generico, eu teria que, além de criar meu BO generico e dentro do BO generico, ele instanciar o generico para a entidade que estou trabalhando (complicado 8) )
Apos alguns N testes, estou recebendo o seguinte exception
sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
Segue o código que estou trabalhando
public abstract class GenericBO<T, K extends GenericDAO<T>> implements IGenericBO<T> {
private Class<K> daoBeanType = (Class<K>) GenericDAO.class;
private Class<K> daoGenerico;
private Constructor<K> ct;
private Class<T> entityBeanType;
@SuppressWarnings("unchecked")
public GenericBO(String persistenceUnit) {
this.entityBeanType = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; //informando ao meu BO generico qual entidade estou trabalhando
try {
ct = daoBeanType.getConstructor(EntityManager.class); //informando o construtor
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
public Class<T> getEntityBeanType() {
return entityBeanType;
}
public List<T> listAll() { //pequeno exemplo de como estou chamando meu DAO Generico dentro do BO Generico
try {
EntityManagerFactory emf = getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
K daoGenerico = ct.newInstance(em);
List<T> lista = daoGenerico.getListAll();
emf.close();
return lista;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Alguém tem alguma sugestão do motivo pelo qual estou recebendo esse exception?
java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.bo.GenericBO.listAll(GenericBO.java:59)
at com.service.FacadeService.pesquisaAgrupamento(FacadeService.java:96)