Archive for junho, 2012


CRUD JSF 2 + JPA 2 – Sugestões

Parte 1 Parte 2Parte 3Parte 4 

 

Conforme sugestões dos leitores, neste post estaremos adicionando a opção de alterar e cadastro de generos ao projeto.
Futuramente vamos adicionar o controle de login utilizando o Spring Security.

Primeiramente, em nosso managedbean DvdBean vamos criar um método para recuperar o entitymanager pois iremos usar o escopo de sessão para fazer a alteração dos registros.
Este método vai recuperar e devolver o entitymanager que abrimos no filtro.

Veja:

	private EntityManager getManager() {
		FacesContext fc = FacesContext.getCurrentInstance();
		ExternalContext ec = fc.getExternalContext();
		HttpServletRequest request = (HttpServletRequest) ec.getRequest();
		return (EntityManager) request.getAttribute("entityManager");
	}

Este mesmo método também deverá ser criado no managedbean GeneroBean.

No DvdBean agora vamos criar os métodos que serão responsáveis pela edição do registro, veja:

	public String preparaAlterar(DVD dvd) {
		this.setDvd(dvd);
		this.setGeneroID(this.getDvd().getGenero().getId());

		return "index?faces-redirect=true";
	}
	public void update() {
		GeneroRepository generoRepository = new GeneroRepository(
				this.getManager());
		Genero genero = generoRepository.search(generoID);
		this.dvd.setGenero(genero);

		DvdRepository dvdRepository = new DvdRepository(this.getManager());
		dvdRepository.update(this.dvd);

		this.dvd = new DVD();
		this.generoID = null;
		this.dvds = null;
	}

Continue lendo

CRUD JSF 2 + JPA 2 – Parte 4 – Final

 

Chegamos ao ponto final do nosso CRUD, neste post iremos criar os managedbeans e as outras classes que faltam.

Vamos lá?

No pacote managedbeans vamos criar uma classe com o nome de DvdBean, ela possui a seguinte estrutura:

@ManagedBean
public class DvdBean {
	@ManagedProperty(value="#{entityManager}")
	private EntityManager entityManager;
	
	private DVD dvd = new DVD();
	private List<DVD> dvds;
	private Long generoID;
	
	public void save() {
		GeneroRepository generoRepository = new GeneroRepository(this.entityManager);
		Genero genero = generoRepository.search(generoID);
		this.dvd.setGenero(genero);
		
		DvdRepository dvdRepository = new DvdRepository(this.entityManager);
		dvdRepository.save(this.dvd);
		
		this.dvd = new DVD();
		this.dvds = null;
	}
	
	public void remove(DVD dvd) {
		DvdRepository repository = new DvdRepository(this.entityManager);
		repository.remove(dvd);
		
		this.dvds = null;
	}
	
	public List<DVD> getDvds() {
		if(this.dvds == null){
			DvdRepository repository = new DvdRepository(this.entityManager);
			this.dvds = repository.getDVDs();
		}
		
		return this.dvds;
	}
	
	public Long getCount() {
		DvdRepository repository = new DvdRepository(this.entityManager);
		
		return repository.getCountDVDs();
	}

	// get e set para dvd e generoID

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}
}

Continue lendo

CRUD JSF 2 + JPA 2 – Parte 3

 
Dando sequencia no CRUD, neste post iremos criar os repositórios e o front-end do nosso sistema como já mencionado no post anterior.

Vamos lá?

Em nosso sistema, adotamos o padrão Open Session in View ( padrão explicado no post anterior, clique aqui para ver ) e o gerenciamento das transações não é mais tarefa dos repositórios, porém o funcionamento deles ainda é afetado pelo contorle de transações.

Os repositórios precisam de Entity Managers para realizar as operações de persistência. Então, cada repositório terá um construtor para receber um Entity Manager como parâmetro.

Crie uma classe chamada DvdRepository dentro do pacote repository com a seguinte estrutura:

public class DvdRepository {
	private EntityManager entityManager;

	public DvdRepository(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	public void save(DVD dvd) {
		this.entityManager.persist(dvd);
		this.entityManager.flush();
	}

	public void remove(DVD dvd) {
		this.entityManager.remove(dvd);
	}

	@SuppressWarnings("unchecked")
	public List getDVDs() {
		return this.entityManager.createNamedQuery("DVD.findAll")
				.getResultList();
	}

	public Long getCountDVDs() {
		return (Long) this.entityManager.createNamedQuery("DVD.count")
				.getSingleResult();
	}
}

Continue lendo

CRUD JSF 2 + JPA 2 – Parte 2

 
Dando continuidade ao CRUD, no post anterior vimos os requisitos do sistema exemplo e já montamos nosso banco de dados, reforçando: Estarei utilizando a IDE Eclipse, banco de dados MySQL e servidor de aplicação Tomcat 7.

Vamos agora criar um novo Dynamic Web Project e dar um nome, no meu caso eu dei o nome de Locadora, este projeto irá ser JSF 2.0, caso queira, pode utilizar as bibliotecas que o Eclipse oferece, veja:

Continue lendo