Skip to content
19 de fevereiro de 2013 / rafaelti

Generic CRUD Service – CRUD Session Bean EJB

Objetivo

Criar um Session Bean para cuidar dos CRUDs da aplicação.

Plataforma

Java, EJB 3, GlassFish

Conhecimento

Java, EJB 3

Introdução

Alguns design patterns são complicados demais para fazer coisas simples, encontrar um jeito fácil de criar CRUD é essencial.

Solução

A melhor forma que encontrei é o Generic CRUD Service que facilita bastante.

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class CrudService implements GenericCrudService {

	@PersistenceContext
	EntityManager em;

	@Override
	public <T> T create(T t) {
		em.persist(t);
		em.flush();
		em.refresh(t);
		return t;
	}

	@Override
	public <T> T find(Class<T> type, Object id) {
		return (T) em.find(type, id);
	}

	@Override
	public <T> void delete(T t) {
		t = em.merge(t);
		em.remove(t);
	}

	@Override
	public <T> T update(T t) {
		return (T) em.merge(t);
	}

	@Override
	public void delete(Class type, Object id) {
		Object ref = em.getReference(type, id);
		em.remove(ref);

	}

	@Override
	public List findWithNamedQuery(String queryName) {
		return em.createNamedQuery(queryName).getResultList();
	}

	@SuppressWarnings("rawtypes")
	@Override
	public List findWithNamedQuery(String queryName, int resultLimit) {
		return em.createNamedQuery(queryName).setMaxResults(resultLimit)
				.getResultList();
	}

	public List findByNativeQuery(String sql, Class type) {
		return em.createNativeQuery(sql, type).getResultList();
	}

	@Override
	public List findWithNamedQuery(String namedQueryName, Map parameters) {
		return findWithNamedQuery(namedQueryName, parameters, 0);
	}

	@Override
	public List findWithNamedQuery(String namedQueryName, Map parameters,
			int resultLimit) {

		return findWithNamedQuery(namedQueryName, parameters, 0, resultLimit);

	}

	public List findWithNamedQuery(String namedQueryName, Map parameters, int startPosition,
			int resultLimit){

		// Set rawParameters = parameters.entrySet();
		Query query = em.createNamedQuery(namedQueryName);

		if (startPosition > 0) {
			query.setFirstResult(startPosition);
		}

		if (resultLimit > 0) {
			query.setMaxResults(resultLimit);
		}

		for (final Entry entry : (Set<Entry>) parameters.entrySet()) {
			query.setParameter((String) entry.getKey(), entry.getValue());

		}
		return query.getResultList();
	}
}

Para usar GenericCrudService

public GenericCrudService getCrudService() {

		GenericCrudService sf = null;

		try {
			javax.naming.Context ctx;
			ctx = new javax.naming.InitialContext();
			 sf = (GenericCrudService) ctx
					.lookup("java:global/prjEAR/prjEJB/CrudService!br.com.prj.GenericCrudService");

		} catch (NamingException e) {
			e.printStackTrace();
		}
		return sf;
	}
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: