Cannot open connection- Struts + Hibernate?

4 respostas
S

Olá… não sei o que está acontecendo…

Estou tentando fazer umexemplo simples para inserir um campo no banco de dados…

Estou usando struts e hibernate.

Quando faço a persistência por uma classe (Main) da certo… mas quando vou fazer pela página da o seguinte erro…

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Cannot open connection
	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

org.hibernate.exception.JDBCConnectionException: Cannot open connection
	org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
	org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
	org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:327)
	org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:118)
	org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:127)
	org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
	org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1307)
	institutoSkill.ulisses.model.HibernateUtil.persiste(HibernateUtil.java:65)
	institutoSkill.ulisses.controler.action.InserirConcursoAction.execute(InserirConcursoAction.java:48)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

o que é isso ??

4 Respostas

D

coloca o código aqui q vc ta usando para inicializar a sessao do hibernate e persistir o objeto.

S

Este é o codigo do minha classe que faz a persistência.

Abaixo tem a classe e o arquivo hbm.

public static void persiste( Object objeto ){
        Session session = getSession();
        Transaction tx = session.beginTransaction();
        try{
            System.out.println("Persiste - Salvando Registro");
            tx.begin();
            session.persist( objeto );
            session.flush();
            tx.commit();
            //log.info( "Objeto salvo com Sucesso !! " );
        }catch( Exception e ){
            //log.info( "Holve problemas ao inserir o objeto: " + objeto.getClass().getName() );
            System.out.println(e);
            System.out.println(e);
            e.printStackTrace();
            tx.rollback();
        }finally{
            session.close();
        }
    }
public class Concurso implements Serializable{
    
    private long id;
    
    private String nome;
    
    private Set cargos;
    
    
    public Concurso(long id , String nome){
        setId(id);
        setNome(nome);
        
    }
    
    /** Creates a new instance of Concurso */
    public Concurso() {
        this(0 , null);
    }
    
    

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Set getCargos() {
        return cargos;
    }

    public void setCargos(Set cargos) {
        this.cargos = cargos;
    }
    
}
<hibernate-mapping>

    <class name="institutoSkill.ulisses.model.beans.Concurso" table="CONCURSO">
        
        <id name="id" column="id_concurso" type="long">
            <generator class="sequence" >
                <param name="sequence">public."concurso_id_concurso_seq"</param>    
            </generator>
        </id>
        
        <property name="nome" type="string" column="concurso_nome" />
        
        <set name="cargos" table="CARGO" inverse="true">
            <key column="ID_CONCURSO_FK"/>
            <one-to-many class="institutoSkill.ulisses.model.beans.Cargo"/>
        </set>
        
        
    </class>

</hibernate-mapping>
D

Acredito q nao seja problema de mapeamento, pois vc disse q sem ser pela web funciona. Como vc ta obtendo a sessao? Vc poderia por o metodo getSession ai pra nos? Aproveita e coloca o seu arquivo de configuração do hibernate ai tbm…

S

Este são outros dois metodos da minha classe hibernateUtil

static {
        try {
            cfg = new Configuration();
            sessionFactory = cfg.configure().buildSessionFactory();
            
        } catch (Throwable ex) {
            ex.printStackTrace();
            log.error( "Erro ao instanciar o objeto SessionFactory" );
            throw new ExceptionInInitializerError(ex);
        }
    }
    
    
    public static Session getSession()throws HibernateException {
        Session session = null;
        
        session = sessionFactory.openSession();
        
        return session;
    }

Este é o hibernate.cfg.xml

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.url">jdbc:postgresql://localhost:5432/skill</property>
        <property name="connection.username">postgres</property>
        <property name="connection.password">postgres</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        
        <!-- Enable Hibernate's automatic session context management
        <property name="current_session_context_class">thread</property>
        -->
        
        <!-- Disable the second-level cache-->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        
        <property name="hibernate.cglib.use_reflection_optimizer">true</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <mapping resource="institutoSkill/ulisses/model/beans/Concurso.hbm.xml"/>
       
        
    </session-factory>

</hibernate-configuration>
Criado 24 de maio de 2006
Ultima resposta 24 de mai. de 2006
Respostas 4
Participantes 2