DAO generico com EJB3

8 respostas
Cherubini

Olá pessoal,

eu estou começando com EJB3 e estou com uma duvida em qual modelo
de DAO generico adotar:

segue um exemplo meu, de como estou usando, gostaria de saber se esse jeito está bom ou se
teria algo melhor(Patterns)

segue código:
Classe FactoryDao:

@Stateless
public class FactoryDao implements IFactoryDao {

	@PersistenceContext
	private EntityManager entityManager;

	public Dao<User> getUserDao() {
		return new Dao<User>(User.class, this.entityManager);
	}

	public RoleDao getRoleDao() {
		return new RoleDao(this.entityManager);
	}

}

classe Dao:

@Stateless
public class Dao<T> implements IDao<T> {

	private static Logger logger = Logger.getLogger(Dao.class);

	private Class<T> classe;

	private EntityManager entityManager;

	public Dao(Class<T> persistentClass, EntityManager manager) {
		this.entityManager = manager;
		this.classe = persistentClass;
	}

	public T procura(Long id) {
		logger.info("lendo " + classe + " com id " + id);
		return (T) entityManager.find(classe, id);
	}

	public void salva(T objeto) {
		try {
			logger.info("salvando " + objeto);

			entityManager.persist(objeto);

			logger.info("objeto salvo " + objeto);
		} catch (Exception e) {

			logger.error(e.getMessage());
			e.printStackTrace();
		}

	}
}

Classe RoleDao:

@Stateless
public class RoleDao extends Dao<Role> implements IRoleDao {

	public RoleDao(EntityManager manager) {
		super(Role.class, manager);
	}

	@SuppressWarnings("unchecked")
	public List<Role> procuarar() {
		Criteria c = getSession().createCriteria(Role.class);
		return (List<Role>) c.list();

	}

}

bom ficarei no aguardo e desde já agradeço

8 Respostas

Regis_A_Rocha

mais alguns exemplos com EJB 3

// EJB3 CMT: @TransactionAttribute(TransactionAttributeType.REQUIRED)
public void execute() {

    // JTA: UserTransaction utx = jndiContext.lookup("UserTransaction");
    // JTA: utx.begin();

    // Plain JDBC: HibernateUtil.getCurrentSession().beginTransaction();

    DAOFactory factory = DAOFactory.instance(DAOFactory.HIBERNATE);
    ItemDAO itemDAO = factory.getItemDAO();
    UserDAO userDAO = factory.getUserDAO();

    Bid currentMaxBid = itemDAO.getMaxBid(itemId);
    Bid currentMinBid = itemDAO.getMinBid(itemId);

    Item item = itemDAO.findById(itemId, true);

    newBid = item.placeBid(userDAO.findById(userId, false),
                            bidAmount,
                            currentMaxBid,
                            currentMinBid);

    // JTA: utx.commit(); // Don't forget exception handling

    // Plain JDBC: HibernateUtil.getCurrentSession().getTransaction().commit(); // Don't forget exception handling

}
Regis_A_Rocha
// EJB3 CMT: @TransactionAttribute(TransactionAttributeType.REQUIRED)
public void execute() {

    // JTA: UserTransaction utx = jndiContext.lookup("UserTransaction");
    // JTA: utx.begin();

    // Plain JDBC: HibernateUtil.getCurrentSession().beginTransaction();

    ItemDAOHibernate itemDAO = new ItemDAOHibernate();
    itemDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());

    UserDAOHibernate userDAO = new UserDAOHibernate();
    userDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());

    Bid currentMaxBid = itemDAO.getMaxBid(itemId);
    Bid currentMinBid = itemDAO.getMinBid(itemId);

    Item item = itemDAO.findById(itemId, true);

    newBid = item.placeBid(userDAO.findById(userId, false),
                            bidAmount,
                            currentMaxBid,
                            currentMinBid);

    // JTA: utx.commit(); // Don't forget exception handling

    // Plain JDBC: HibernateUtil.getCurrentSession().getTransaction().commit(); // Don't forget exception handling

}
Regis_A_Rocha
public abstract class GenericHibernateDAO<T, ID extends Serializable>
        implements GenericDAO<T, ID> {

    private Class<T> persistentClass;
    private Session session;

    public GenericHibernateDAO() {
        this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
                                .getGenericSuperclass()).getActualTypeArguments()[0];
   }

   public void setSession(Session session) {
        this.session = session;
   }

   protected void getSession() {
       if (session == null)
           session = HibernateUtil.getSessionFactory().getCurrentSession();
       return session;
   }
Regis_A_Rocha
// EJB3 CMT: @TransactionAttribute(TransactionAttributeType.REQUIRED)
public void execute() {

    // JTA: UserTransaction utx = jndiContext.lookup("UserTransaction");
    // JTA: utx.begin();

    // Plain JDBC: HibernateUtil.getCurrentSession().beginTransaction();

    ItemDAO itemDAO = new ItemDAOHibernate();
    UserDAO userDAO = new UserDAOHibernate();

    Bid currentMaxBid = itemDAO.getMaxBid(itemId);
    Bid currentMinBid = itemDAO.getMinBid(itemId);

    Item item = itemDAO.findById(itemId, true);

    newBid = item.placeBid(userDAO.findById(userId, false),
                            bidAmount,
                            currentMaxBid,
                            currentMinBid);

    // JTA: utx.commit(); // Don't forget exception handling

    // Plain JDBC: HibernateUtil.getCurrentSession().getTransaction().commit(); // Don't forget exception handling

}
Regis_A_Rocha
@Stateless
public abstract class GenericHibernateDAO<T, ID extends Serializable>
        implements GenericDAO<T, ID> {

    private Class<T> persistentClass;
    
    @PersistenceContext
    private EntityManager em;

    public GenericHibernateDAO() {
       setSession( (Session)em.getDelegate() );    
    }
Regis_A_Rocha
@Stateless
public class ManageAuctionController implements ManageAuction {

    @EJB ItemDAO itemDAO;
    @EJB UserDAO userDAO;

    @TransactionAttribute(TransactionAttributeType.REQUIRED) // This is even the default
    public void execute() {

        Bid currentMaxBid = itemDAO.getMaxBid(itemId);
        Bid currentMinBid = itemDAO.getMinBid(itemId);

        Item item = itemDAO.findById(itemId, true);

        newBid = item.placeBid(userDAO.findById(userId, false),
                               bidAmount,
                               currentMaxBid,
                               currentMinBid);

    }
}
Regis_A_Rocha
public interface ItemDAO extends GenericDAO<Item, Long> {

    public static final String QUERY_MAXBID = "ItemDAO.QUERY_MAXBID";
    public static final String QUERY_MINBID = "ItemDAO.QUERY_MINBID";

    Bid getMaxBid(Long itemId);
    Bid getMinBid(Long itemId);

}
Cherubini

Fala ai Regis!!

blz ?

então cara, vc nao entendeu oq falei!!

Eu quero um modelo + robusto mais so em EJB3!!

pq os outros jeito q estou acostumado a faze,eu nao estou conseguindo colocar como EJBs!!

Mais vlws!!!

Criado 12 de agosto de 2009
Ultima resposta 13 de ago. de 2009
Respostas 8
Participantes 2