Como dito pelo excelente post do meu amigo Ricardo Ferreira em http://architecture-journal.blogspot.com/2007/07/enterprise-java-beans-30-anti-patterns.html não é uma boa prática termos todos os DAOs controlados pelo EJB apenas para podermos injetar o EntityManager.
Então fiz um DAOFactory bem genérico que serve muito bem aos meus propósitos, mas que pode ajudar quem quer criar uma factory para EJB3. Para se buscar o DAO, deve-se então injetar o DaoFactory e utilizar o método getDAO passando como argumento a classe persistente a ser utilizada.
Segue abaixo a classe:
@Stateless
@SuppressWarnings("unchecked")
public class DAOFactory implements DaoFactoryLocal {
@PersistenceContext(unitName = "BioModel")
private EntityManager em;
private final static String POS_FIXO_DAO = "DAO";
private final static String PACOTE_ENTIDADE = ".entidade.";
private final static String PACOTE_DAO = ".dao.";
private static String getDAOName(Class classeEntidade) {
String resultado = classeEntidade.getName().replace(PACOTE_ENTIDADE,
PACOTE_DAO);
resultado = resultado.concat(POS_FIXO_DAO);
return resultado;
}
@Override
public GenericDAOImpl getDAO(Class classeEntidade) {
GenericDAOImplresult = null;
try {
result = (GenericDAOImpl) Class.forName(getDAOName(classeEntidade))
.newInstance();
result.setEntityManager(em);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return result;
}
}
Segue abaixo um exemplo de sua utilização:
@EJB
private DaoFactoryLocal daoFactory;
@SuppressWarnings("unchecked")
protected GenericDAOImplgetDAO() {
return daoFactory.getDAO(classePersistente);}
Qualquer problema me avisem.
Nenhum comentário:
Postar um comentário