[Resolvido] JSF 2 + Hibernate - Problema com a persistencia!

e ai galera beleza estou começando agora a estudar JSF e Hibernate, estou estudando por conta própria.

estou com uma telinha simples de cadastro de usuário,
consigo pegar o valor, jogar dentro das variáveis… e passar para dentro do método que persiste,
mas por algum motivo está parando no:

transaction = entityManager.getTransaction(); do GenericDao.java…

não sei se pulei algum passo…

segue algumas partes do meu código:

usuario.xhtml

<?xml version="1.0" encoding="ISO-8859-1"?>

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">

<h:head>
	
	<title>Cadastro de Usuário</title>
</h:head>
<h:body>
	<h:form>
	<h:messages/>
		<h:panelGrid>
				<h:outputLabel value="Nome:" for="nome" />
				<h:inputText id="nome" label="Nome" value="#{usuarios.nome}" required="true"/>
		
				<h:outputLabel value="Sobrenome:" for="sobreNome" />
				<h:inputText id="sobreNome" label="Sobrenome" value="#{usuarios.sobreNome}" required="true"/>
		
				<h:outputLabel value="Login:" for="login" />
				<h:inputText id="login" label="Login" value="#{usuarios.login}" required="true"/>
		
				<h:outputLabel value="Password:" for="password" />
				<h:inputSecret id="password" label="Password" value="#{usuarios.password}" required="true"/>
		
				<h:outputLabel value="Confirmar Password:" for="confirmaPassword" />
				<h:inputSecret id="confirmaPassword" label="Confirmar Password" value="#{usuarios.confirmaPassword}" required="true"/>
		
				<h:commandButton action="#{usuarios.testeGravar}" value="Gravar"/>
		</h:panelGrid>
	</h:form>
</h:body>
</html>

Usuarios.java

@ManagedBean(name="usuarios")
@RequestScoped
@Entity
@Table(name="usuarios", schema="GUSTAVOAMARO")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Usuarios extends PessoaGenerica{

	@Column (name="login")
	private String login;
	
	@Column (name="password")
	private String password;
	
	@Transient
	private String confirmaPassword;

       //geters and setters

	public String testeGravar(){
		UsuariosDAO testeDao = new UsuariosDAO();
		Usuarios testeUser = new Usuarios();
		FacesContext context = FacesContext.getCurrentInstance();
		try{
			
			if (!getConfirmaPassword().equals(getPassword())){
				context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "As senhas são diferentes",""));
				return "usuario";
			}
			else {
				testeUser.setNome(getNome());
				testeUser.setSobreNome(getSobreNome());
				testeUser.setLogin(getLogin());
				testeUser.setPassword(getPassword());
				testeDao.insert(testeUser);
				return "sucesso";
			}
		}catch (Exception e) {
			return "usuario";	
		}
	}
}

GenericDao.java

public class GenericDao extends AbstractDao {

	private static final long serialVersionUID = 1L;
	protected transient Logger logger = Logger.getLogger(GenericDao.class);
	@PersistenceContext
	protected EntityManager entityManager = null;

	public GenericDao() {
		super();
		try {
			entityManager = GenericDao.getEntityManager();
			
		} catch (DAOException e) {
			logger.error(e.getCause());
		}
	}
        public <T> void insert(T entity) throws DAOException {
	    	EntityTransaction transaction = null;
		
		try {
			transaction = entityManager.getTransaction();
			transaction.begin();
			entityManager.flush();
			entityManager.persist(entity);
			AppLog.infoLog("Registro Inserido com sucesso.");
			transaction.commit();
			
		} catch (Exception e) {
			AppLog.erroLog("Falha ao inserir o registro na tabela.");
			logger.error(e.getMessage());
			transaction.rollback();
			throw new DAOException(e);
		}
	}
}

espero que alguém tenha saco pra dar uma olhada… pois ficou muita coisa pra olhar neh…

obrigado desde já… abraços

cara,

primeiro, utilize o padrão MVC, pois do jeito que vc ta fazendo vai ficar muito confuso.
segundo, como seu projeto é web, utilize EJB ou Spring, com eles vc deixa para o container gerenciar suas transações, obter o entitymanager de forma mais simples, entre outros recursos.

segue umas apostilas para complementar seus estudos, http://www.k19.com.br/downloads/apostilas-java

t+

valeu brother vou dar uma estudada nesse padrão MVC e no EJB :wink:

Não acredito que precise radicalizar, apenas tomar alguns cuidados.
Onde está o abstractdao?
Você postou apenas uma parte do projeto, o erro pode estar acima desta classe.

Eu não entendi qual o seu problema com a psersistência. O.o

o meu AbstractDAO ta ai:



import java.io.Serializable;
import java.util.Date;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;

import org.apache.log4j.Logger;

@SuppressWarnings("serial")
public abstract class AbstractDao implements Serializable {

	protected static final Logger logger = Logger.getLogger(AbstractDao.class);
	@PersistenceContext
	private static EntityManager instance = null;

	public static final String PERSISTENCE_UNIT = "ProjetoImobiliaria";

	public AbstractDao() {
		super();
	}

	// =======================================================================//
	/**
	 * Retorna um objeto do tipo EntityManager. Este e usado para fazer acesso
	 * aos dados.
	 */
	public synchronized static EntityManager getEntityManager() throws DAOException {
		try {

			if (instance == null) {
				logger.info("Criando o EntityManager" + new Date());
				instance = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT).createEntityManager();
				logger.info("Finalizando criação do EntityManager" + new Date());
			}
		} catch (Exception e) {
			logger.error(e.getCause());
			throw new DAOException(e);
		}

		return instance;
	}

	// =======================================================================//
	/**
	 * Retorna um objeto do tipo EntityManager. Este e usado para fazer acesso
	 * aos dados.
	 */
	public synchronized EntityManager getEntityManager(String persistenceUnit) throws DAOException {

		try {
			if (instance == null)
				instance = Persistence.createEntityManagerFactory(persistenceUnit).createEntityManager();

			return instance;

		} catch (Exception e) {
			logger.error(e.getCause());
			throw new DAOException(e);
		}

	}
}

Encerrando o tópico… comecei o projeto do zero seguindo MVC …