Salvar 2 Objetos Hibernate e JSF

Boa noite pessoal,

Estou com uma dúvida!

Por exemplo eu possuo 2 classes, ex: endereco e empresa

Na minha classe Bean eu chamo 2 classes para salvar minhas informações de empresa e endereco.

Ex:

enderecoRN.salvar(this.endereco);
this.getEmpresa().setEndereco(this.endereco);
empresaRN.salvar(this.empresa)

Se der algum erro para salvar a empresa o endereço é salvo.

Como eu faço para tipo um begintransaction e depois um commit na classe bean???

Obrigado.

Como vc tem feito atualmente para controlar a transação?

A minha classe EmpresaBean chama a EmpresaRN que chama EmpresaDAOHibernate

Classe:
EmpresaDAOHibernate

	public void salvar(Empresa empresa){
		this.session.save(empresa);
	}

Obrigado

Em algum lugar você tem que abrir e fechar a transação.

Então cara eu tenho mais 2 classes

DAOFactory

public static EmpresaDAO criarEmpresaDAO() {
		EmpresaDAOHibernate empresaDAO = new EmpresaDAOHibernate();
		empresaDAO.setSession(HibernateUtil.getSessionFactory()
				.getCurrentSession());
		return empresaDAO;
	}

E a HibernateUtil

private static SessionFactory buildSessionFactory(){
		try{
			AnnotationConfiguration cfg = new AnnotationConfiguration();
			cfg.configure("hibernate.cfg.xml");
			return cfg.buildSessionFactory();
		}catch(Throwable e){
			System.out.println("Criação inicial do objeto SessionFactory Falhou. Erro: " + e);
			throw new ExceptionInInitializerError(e);
		}
	}

Eu tentei colocar na minha na classe EmpresaDAOHibernate

public void salvar(Empresa empresa){  
    this.session.save(empresa);  
}  

Eu tentei comitar e fechar a sessão…
mas ele falava que a sessão jah foi fechada…

Eu tenho a minha classe ConexaoHibernateFilter que usa o método doFilter que abre e fecha a conexão.

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException {

		try {

			this.sf.getCurrentSession().beginTransaction();

			chain.doFilter(servletRequest, servletResponse);

			this.sf.getCurrentSession().getTransaction().commit();
			this.sf.getCurrentSession().close();

		} catch (Throwable ex) {
			try {
				if (this.sf.getCurrentSession().getTransaction().isActive()) {
					this.sf.getCurrentSession().getTransaction().rollback();
				}
			} catch (Throwable t) {
				t.printStackTrace();
			}
			throw new ServletException(ex);
		}
	}

mas como eu trataria isso no meu Bean??

Obrigado