Então cara…o seu código funciona…bem ou mal funciona.
Agora eu não achei legal esse lance de serviços. Pq parece que é preciso escrever muito mais código do que realmente necessário. No JSF já existem tags para validação de campo então pra que criar uma outra validação ???
Vc poderia muito bem validar na view (assim como era feito com javascript) e exibir uma mensagem em tempo real para o usuário de que o campo é obrigatório e quando passar pela validação vc chama o seu DAO no Handler. Só aí nessa brincadeira vc já economizou um monte de códigos com a remoção dessa classe serviços.
Agora vou te apresentar um DAO genérico para vc não ter vários DAOs. (não sei se vc conhece):
public class HibernateDAO<E> implements DAO<E> {
private Session sessao;
private Transaction transacao;
//Construtor cria sessao do Hibernate, Poderia ser um Connection tb caso não use hibernate
public HibernateDAO(){
//O método FabricaSessao.getSession(sessao) foi construído do mesmo modo que uma ConnectionFactory de JDBC
this.sessao = FabricaSessao.getSession(sessao);
}
public void atualizar(E obj) {
//Código para inserir objetos aqui.
this.sessao.update(obj);
}
public void beginTransaction() {
this.transacao = this.sessao.beginTransaction();
}
public void close() {
this.sessao.close();
this.sessao = null;
}
Modo de usar no seu Handler:
Usuario usuario = new Usuario();
//Getters and Setters
public void adicionar(){
HibernateDAO<Usuario> dao = new HibernateDAO<Usuario>();
dao.beginTransaction();
dao.inserir(usuario);
dao.commit();
dao.close();
dao = null;
}
Ficou muito limpo, pouquissímo código e grande extensibilidade.
Vc compreendeu a prática ???