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 ??
coloca o código aqui q vc ta usando para inicializar a sessao do hibernate e persistir o objeto.
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();
}
}
[code]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;
}
}[/code]
[code]<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>[/code]
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…
Este são outros dois metodos da minha classe hibernateUtil
[code] 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;
}[/code]
Este é o hibernate.cfg.xml
[code]<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>[/code]