Opinião sobre desenvolvimento correto no JSF

5 respostas
brunorota

Boa tarde galera

Estou iniciando com JSF

Eu fiz um CRUD, está funcionando normal, porém não sei se eu desenvolvi ele corretamente para eu não ter problema de consumo de memória desnecessário futuramente.

Se alguém puder dar uma opinião sobre o meu código e algumas dicas para melhorar o desempenho, ficarei grato.

Segue abaixo meu MB.

package br.com.rotatask.managedbeans;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

import com.sun.faces.config.FacesInitializer;

import br.com.rotatask.businessservice.ProjetoBS;
import br.com.rotatask.exceptions.ProjetoDescricaoException;
import br.com.rotatask.exceptions.ProjetoIsExistException;
import br.com.rotatask.exceptions.ProjetoNuloException;
import br.com.rotatask.facesutils.FacesUtils;
import br.com.rotatask.javabeans.Projeto;

@ManagedBean
@ViewScope
public class ProjetoMB {

	@EJB
	private ProjetoBS projetoBS;
	
	//Lista dos objetos que está no dataTable
	private List<Projeto> projetos;
	
	//Objeto que representa o formulário
	private Projeto projeto;
	
	//Objeto que representa a linha selecionada do dataTable
	private Projeto projetoSelect;
	
	//Variável que representa o desable dos commandButtons
	private boolean showButtons = true;
	
	@PostConstruct
	public void init(){
	
		//Carrega a tabela com os dados do banco
		projetos = new ArrayList<Projeto>();
		projetos = projetoBS.findAll();
		
		//Cria um novo objeto pro formulário
		projeto = new Projeto();
	}

	public void save(){
		
		try {
		
			//Salva o objeto no banco
			projetoBS.save(projeto);
			
			//Adiciona o objeto na lista
			projetos.add(projeto);
		
			//Reseta o formulário
			projeto = new Projeto();
			
			FacesUtils.exibirMensagemAviso("Projeto cadastrado com sucesso!");
			
		} catch (ProjetoIsExistException e) {
			
			FacesUtils.exibirMensagemErro("Esse projeto já existe");
			
			//Reseta o formulário
			projeto = new Projeto();
			
			e.printStackTrace();
		
		}catch (ProjetoNuloException e){
		
			FacesUtils.exibirMensagemErro("O projeto não pode ser nulo");
		
			e.printStackTrace();
			
		}catch (ProjetoDescricaoException e) {
			
			FacesUtils.exibirMensagemErro("A descrição do projeto não pode estar em branco");
			
			e.printStackTrace();
		}
	}
	
	public void update(){
		
		try {
			
			//Atualiza o projeto
			projetoBS.update(projetoSelect);
		
			FacesUtils.exibirMensagemAviso("Projeto atualizado com sucesso!");
			
		} catch (ProjetoNuloException e) {
			
			FacesUtils.exibirMensagemErro("Favor selecionar um projeto para atualizar.");
			e.printStackTrace();

		} catch (ProjetoDescricaoException e) {
			
			FacesUtils.exibirMensagemErro("A descriçaõ do projeto não pode estar em branco.");
			
			e.printStackTrace();
		}
	}
	
	public void delete(){
		
		try {
		
			//Remove o objeto do banco
			projetoBS.delete(projetoSelect);
		
			//Remove o objeto selecionado da lista
			projetos.remove(projetoSelect);
			
			//Reseta a lista
			projeto = new Projeto();
			
			FacesUtils.exibirMensagemAviso("Projeto removido com sucesso!");
			
		} catch (ProjetoNuloException e) {
		
			FacesUtils.exibirMensagemErro("Favor selecionar um projeto para excluir.");
			
			e.printStackTrace();
			
		} catch (ProjetoDescricaoException e) {
			
			e.printStackTrace();
		}
	}

	//Método é chamado quando uma linha da tabela é selecionada
	public void atualizaFormulario(SelectEvent e){
		
		//Carrega o objeto selecionado para o formulário
		projeto = projetoSelect;
		
		setShowButtons(false);
	
	}
	
	public void limparFormulario(UnselectEvent e){
		
		//Limpa o formulário
		projeto = new Projeto();
		
		setShowButtons(true);
	}
	
        //getters and setters
}

Att.

5 Respostas

fabiozoroastro

Bruno, tá tudo ok.

Não se preocupe tanto com performance se nem há sinais de alto consumo de memória.

=)

brunorota

Opa fabio valew

Assim eu já fico mais aliviado

É que eu já ouvi e li muito que caso você programe de maneira errada o JSF vira um bola de neve, com consumo de memória, ae antes de eu prosseguir com o projeto, como é minha primeira exp com JSF queria saber se estava tudo OK pra mais pra frente não se transformar essa bola de neve que tanta gente fala hehehe.

Mais valeww mesmo

Abraços

fabiozoroastro

Creio que o maior gargalo em aplicações JSF se deve ao framework ser baseado em componentes e ficar sempre transmitindo sua árvore de componentes entre o cliente e o servidor.
Isso deixa sim a aplicação pesada e as vezes requer um crescimento considerável em sua infraestrutura.

Mas não se preocupe com isso. Se você estiver programando conforme a especificação e começar a aparecer problemas de performance e escalabilidade é por que seu sistema está “bombando” muito e você ficará bem rico. :lol:

aix

fabiozoroastro:
…se deve ao framework ser baseado em componentes e ficar sempre transmitindo sua árvore de componentes entre o cliente e o servidor.

isto é configurável, com JSF2 você escolhe onde deixa sua árvore de componentes(no browser ou no servidor) e ainda temos AJAX para mandarmos pedaços ao invés da árvore toda.

fabiozoroastro

aix:
fabiozoroastro:
…se deve ao framework ser baseado em componentes e ficar sempre transmitindo sua árvore de componentes entre o cliente e o servidor.

isto é configurável, com JSF2 você escolhe onde deixa sua árvore de componentes(no browser ou no servidor) e ainda temos AJAX para mandarmos pedaços ao invés da árvore toda.

Olá aix, tudo bem?

Quando disse sobre ficar transmitindo a árvore, acho que é ruim deixar no cliente(pois pesa pro cliente) e também deixar no servidor(pois pesa pro servidor). A solução seria não ter a árvore de componentes. rs…

Mas daí depende do projeto. A estrutura com árvore de componentes ajuda bastante em outros requisitos.

Sobre as requisições AJAX serem respondidas com apenas pedaços da árvore, ainda assim não são leves como REST+JSon. Mas daí cai na mesma explicação acima. As vezes vale a pena e as vezes não.

PS.: Já trabalhei em uma empresa chamada AIX Sistemas.

:slight_smile:

Abraços.

Criado 19 de julho de 2011
Ultima resposta 20 de jul. de 2011
Respostas 5
Participantes 3