Fiz uma alteração no meu aplicativo, criei uma biblioteca java, contendo as persistencias e implementações de consultas hibertate, retirei o hibernate da aplicação web e inclui a bibliote, no entanto, ao acessar o sistema, recebo a seguinte mensagem de erro no browser:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)
root cause
java.lang.StackOverflowError
java.util.HashMap.<init>(HashMap.java:255)
java.util.HashMap.<init>(HashMap.java:305)
java.util.HashSet.<init>(HashSet.java:103)
org.hibernate.jdbc.AbstractBatcher.<init>(AbstractBatcher.java:49)
org.hibernate.jdbc.BatchingBatcher.<init>(BatchingBatcher.java:22)
org.hibernate.jdbc.BatchingBatcherFactory.createBatcher(BatchingBatcherFactory.java:16)
org.hibernate.jdbc.ConnectionManager.<init>(ConnectionManager.java:71)
org.hibernate.jdbc.JDBCContext.<init>(JDBCContext.java:64)
org.hibernate.impl.SessionImpl.<init>(SessionImpl.java:213)
org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:473)
org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:497)
org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:505)
br.com.jvmsoftware.acessojava.implement.AcsRelSistemaEmpresaImp.<init>(AcsRelSistemaEmpresaImp.java:21)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:29)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
br.com.jvmsoftware.acessojava.implement.AcsSistemasImp.<init>(AcsSistemasImp.java:25)
br.com.jvmsoftware.acessojava.implement.AcsUsuariosImp.<init>(AcsUsuariosImp.java:30)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.37 logs.
meu hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jvmsoftware_db?zeroDateTimeBehavior=convertToNull</property>
<property name="hibernate.connection.username">jvmsoftware</property>
<property name="hibernate.connection.password">Matheus1108</property>
<property name="hibernate.show_sql"/>
<!-- Condiguração do c3p0 -->
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.timeout">30</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<!-- mapeamentos -->
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsUsuarios.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsSistemas.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsCidade.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsRelSistemaEmpresa.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsEmpresa.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsRelFuncionalidadeUsuario.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsRelSistemaUsuario.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsEstado.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsRelMenuUsuario.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsTipoPessoa.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsFuncionalidades.hbm.xml"/>
<mapping resource="br/com/jvmsoftware/acessojava/mapeamento/AcsMenus.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Exemplo de implementação hibernate:
public class AcsSistemasImp {
private AcsUsuariosImp usuImp = new AcsUsuariosImp();
SessionFactory sf = getSessionFactory();
Session session = sf.openSession();
public AcsSistemasImp() {
}
public List<AcsSistemas> listSistemas() {
List<AcsSistemas> list;
list = session.createQuery("select s from AcsSistemas s order by s.nomeSistema").list();
return list;
}
public AcsSistemas getSistemaById(int idSistema) {
AcsSistemas sis;
sis = (AcsSistemas) session.createQuery("select s from AcsSistemas s where s.idSistema = :idSistema").setInteger("idSistema", idSistema).uniqueResult();
return sis;
}
public List<AcsSistemas> getSistemaSemUsuario(AcsUsuarios usuario) {
List<AcsSistemas> sistemasSemUsuario;
sistemasSemUsuario = session.createQuery("select s from AcsSistemas s where s.idSistema not in (select r.acsSistemas.idSistema from AcsRelSistemaUsuario r where r.acsUsuarios.idUsuario = :idUsuario)").setInteger("idUsuario", usuario.getIdUsuario()).list();
return sistemasSemUsuario;
}
public AcsSistemas getSistemaByCodigo(String codSistema) {
AcsSistemas sistema;
sistema = (AcsSistemas) session.createQuery(""
+ "select s "
+ "from AcsSistemas s "
+ "where s.codSistema = :codSistema").setString("codSistema", codSistema).uniqueResult();
return sistema;
}
public void alteraSistema(AcsSistemas sistema) {
session.beginTransaction();
session.saveOrUpdate(sistema);
session.beginTransaction().commit();
}
public void incluiSistema(AcsSistemas sistema) {
session.beginTransaction();
session.saveOrUpdate(sistema);
session.beginTransaction().commit();
geraRelacionamentos(sistema);
}
public void geraRelacionamentos(AcsSistemas sistema) {
session.beginTransaction();
// gerando relacionamentos sistema empresa
List<AcsEmpresa> empresasSemSistema;
empresasSemSistema = session.createQuery("select e from AcsEmpresa e where e.idEmpresa not in (select r.acsEmpresa.idEmpresa from AcsRelSistemaEmpresa r where r.acsSistemas.idSistema = :idSistema)").setInteger("idSistema", sistema.getIdSistema()).list();
for (int i = 0; i < empresasSemSistema.size(); i++) {
AcsRelSistemaEmpresa relacionamento = new AcsRelSistemaEmpresa();
AcsRelSistemaEmpresaId relacionamentoId = new AcsRelSistemaEmpresaId();
// seta AcsRelSistemaEmpresaId
relacionamentoId.setSistema(sistema.getIdSistema());
relacionamentoId.setEmpresa(empresasSemSistema.get(i).getIdEmpresa());
// seta AcsRelSistemaEmpresa
relacionamento.setId(relacionamentoId);
if (empresasSemSistema.get(i).getIdEmpresa() == 1) {
relacionamento.setAtivo(true);
} else {
relacionamento.setAtivo(false);
}
session.saveOrUpdate(relacionamento);
session.beginTransaction().commit();
}
// gerando relacionamentos sistema usuarios
List<AcsUsuarios> usuariosSemSistema;
usuariosSemSistema = usuImp.listUsuariosSemSistema(sistema);
for (int i = 0; i < usuariosSemSistema.size(); i++) {
AcsRelSistemaUsuario relacionamento = new AcsRelSistemaUsuario();
AcsRelSistemaUsuarioId relacionamentoId = new AcsRelSistemaUsuarioId();
// seta AcsRelSistemaEmpresaId
relacionamentoId.setSistema(sistema.getIdSistema());
relacionamentoId.setUsuario(usuariosSemSistema.get(i).getIdUsuario());
relacionamentoId.setEmpresa(usuariosSemSistema.get(i).getAcsEmpresa().getIdEmpresa());
// seta AcsRelSistemaEmpresa
relacionamento.setId(relacionamentoId);
if (usuariosSemSistema.get(i).getAcsEmpresa().getIdEmpresa() == 1) {
relacionamento.setAtivo(true);
} else {
relacionamento.setAtivo(false);
}
session.saveOrUpdate(relacionamento);
session.beginTransaction().commit();
}
}
}
exemplo do bean utilizando o pacote da biblioteca de classes:
@ManagedBean
@SessionScoped
public class EmpresasBean {
private AcsCidadeImp cidImp = new AcsCidadeImp();
private AcsEmpresaImp empImp = new AcsEmpresaImp();
private AcsUsuariosImp usuImp = new AcsUsuariosImp();
private AcsEstadoImp estImp = new AcsEstadoImp();
public List<AcsEstado> listEstados = new ArrayList<AcsEstado>();
public List<AcsCidade> listCidades = new ArrayList<AcsCidade>();
public List<AcsEmpresa> listEmpresas = new ArrayList<AcsEmpresa>();
public AcsEmpresa empresa = new AcsEmpresa();
public String fantasia = "";
public BigInteger cnpj = BigInteger.ZERO;
// parametros para inclusão da empresa
public int idEstadoInc;
public int idCidadeInc;
public BigInteger cnpjEmpresaInc;
public String razaoSocialInc;
public String fantasiaInc;
public String enredecoInc;
public int numeroInc;
public String complementoInc;
public String bairroInc;
public int dddInc;
public int telefoneInc;
public String emailInc;
/**
* Creates a new instance of EmpresasBean
*/
public EmpresasBean() {
listEmpresas = empImp.listEmpresas(fantasia, cnpj);
listEstados = estImp.listaEstados();
}
public void startIncluEmpresa() {
empresa = new AcsEmpresa();
idEstadoInc = 35;
listaCidades();
}
public void insereEmpresa() {
instanciaEmpresa();
empImp.insereEmpresa(empresa);
fantasia = "";
listEmpresas();
}
public void alteraEmpresa() {
empImp.alteraEmpresa(empresa);
listEmpresas();
}
public void excluiEmpresa() {
System.out.println("EmpresasBean.excluiEmpresa(): " + empresa.getFantasia());
List<AcsUsuarios> qtdUsuarios;
qtdUsuarios = usuImp.listUsuariosByEmpresa(empresa);
if (qtdUsuarios.size() > 0) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "O registro não pode ser excluido! ", "Existem usuários cadastrados para esta empresa!");
FacesContext.getCurrentInstance().addMessage(null, msg);
} else if (empresa.getIdEmpresa() == 0) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "O registro não pode ser excluido! ", "Esta empresa não pode ser excluida!");
FacesContext.getCurrentInstance().addMessage(null, msg);
} else {
empImp.excluiEmpresa(empresa);
empresa = new AcsEmpresa();
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Registro excluido com sucesso! ", null);
FacesContext.getCurrentInstance().addMessage(null, msg);
fantasia = "";
listEmpresas();
}
}
private void instanciaEmpresa() {
empresa = new AcsEmpresa();
empresa.setAcsEstado(estImp.getEstadoById(idEstadoInc));
empresa.setAcsCidade(cidImp.getCidadeById(idCidadeInc));
empresa.setAtivo(true);
empresa.setBairro(bairroInc);
empresa.setCnpjEmpresa(cnpjEmpresaInc);
empresa.setComplemento(complementoInc);
empresa.setDdd(dddInc);
empresa.setEmail(emailInc);
empresa.setEnredeco(enredecoInc);
empresa.setFantasia(fantasiaInc);
empresa.setNumero(numeroInc);
empresa.setRazaoSocial(razaoSocialInc);
empresa.setTelefone(telefoneInc);
}
public void listaCidades() {
listCidades = cidImp.listaCidadesByEstado(idEstadoInc);
}
public void listEmpresas() {
System.out.println("EmpresasBean.listEmpresas():");
listEmpresas = empImp.listEmpresas(fantasia, cnpj);
}
public List<AcsEmpresa> getListEmpresas() {
return listEmpresas;
}
public void setListEmpresas(List<AcsEmpresa> listEmpresas) {
this.listEmpresas = listEmpresas;
}
public AcsEmpresa getEmpresa() {
return empresa;
}
public void setEmpresa(AcsEmpresa empresa) {
this.empresa = empresa;
}
public String getFantasia() {
return fantasia;
}
public void setFantasia(String fantasia) {
this.fantasia = fantasia;
}
public BigInteger getCnpj() {
return cnpj;
}
public void setCnpj(BigInteger cnpj) {
this.cnpj = cnpj;
}
public List<AcsCidade> getListCidades() {
return listCidades;
}
public void setListCidades(List<AcsCidade> listCidades) {
this.listCidades = listCidades;
}
public List<AcsEstado> getListEstados() {
return listEstados;
}
public void setListEstados(List<AcsEstado> listEstados) {
this.listEstados = listEstados;
}
public int getIdEstadoInc() {
return idEstadoInc;
}
public void setIdEstadoInc(int idEstadoInc) {
this.idEstadoInc = idEstadoInc;
}
public int getIdCidadeInc() {
return idCidadeInc;
}
public void setIdCidadeInc(int idCidadeInc) {
this.idCidadeInc = idCidadeInc;
}
public BigInteger getCnpjEmpresaInc() {
return cnpjEmpresaInc;
}
public void setCnpjEmpresaInc(BigInteger cnpjEmpresaInc) {
this.cnpjEmpresaInc = cnpjEmpresaInc;
}
public String getRazaoSocialInc() {
return razaoSocialInc;
}
public void setRazaoSocialInc(String razaoSocialInc) {
this.razaoSocialInc = razaoSocialInc;
}
public String getFantasiaInc() {
return fantasiaInc;
}
public void setFantasiaInc(String fantasiaInc) {
this.fantasiaInc = fantasiaInc;
}
public String getEnredecoInc() {
return enredecoInc;
}
public void setEnredecoInc(String enredecoInc) {
this.enredecoInc = enredecoInc;
}
public int getNumeroInc() {
return numeroInc;
}
public void setNumeroInc(int numeroInc) {
this.numeroInc = numeroInc;
}
public String getComplementoInc() {
return complementoInc;
}
public void setComplementoInc(String complementoInc) {
this.complementoInc = complementoInc;
}
public String getBairroInc() {
return bairroInc;
}
public void setBairroInc(String bairroInc) {
this.bairroInc = bairroInc;
}
public int getDddInc() {
return dddInc;
}
public void setDddInc(int dddInc) {
this.dddInc = dddInc;
}
public int getTelefoneInc() {
return telefoneInc;
}
public void setTelefoneInc(int telefoneInc) {
this.telefoneInc = telefoneInc;
}
public String getEmailInc() {
return emailInc;
}
public void setEmailInc(String emailInc) {
this.emailInc = emailInc;
}
}
Conseguem dar uma força?