MyDvds + Vraptor + PosGreSql Bug!

Pessoal teoricamente um sistema que pega com Mysql/PostgreSql/hsql , simplesmente trocando os arquivos: hibernate.cfg.xm.l e adicionando nas suas bibliotecas o drive do correspondente banco… FUNCIONARIA.

Fiz isso, mais encontrei um erro referente a classe User.java, que é uma palavra reservada do SQL99…

Eu fiz o que falou o Paulo ai em cima… mais mesmo assim não deu !

segue o erro e a classe:

init:
deps-module-jar:
deps-ear-jar:
deps-jar:
compile-single:
run-main:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/junior/vraptor-mydvds-3.1.0/WebContent/WEB-INF/lib/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/junior/sges-v3/glassfish/modules/bean-validator.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/junior/sges-v3/glassfish/modules/weld-osgi-bundle.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

package br.com.caelum.vraptor.mydvds.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;

import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;

import com.google.common.base.Function;
import com.google.common.collect.Collections2;


@Entity
@Component
@SessionScoped
public class User implements Serializable {

	// Hibernate validator's annnotations/rules
	@Id
	@NotNull
	@Length(min = 3, max = 20)
	private String login;

	// Hibernate validator's annnotations/rules
	@NotNull
	@Length(min = 6, max = 20)
	private String password;

	// Hibernate validator's annnotations/rules
	@NotNull
	@Length(min = 3, max = 100)
	private String name;

	// user to dvd mapping,
	@OneToMany(mappedBy="owner")
	private Set<DvdRental> rents;

	public Set<DvdRental> getRents() {
		if (rents == null) {
			rents = new HashSet<DvdRental>();
		}
		return rents;
	}

	public void setRents(Set<DvdRental> dvds) {
		this.rents = dvds;
	}


	public Set<Dvd> getDvds() {
		return new HashSet<Dvd>(Collections2.transform(getRents(), new Function<DvdRental, Dvd>() {
                                          @Override
			public Dvd apply(DvdRental copy) {
				return copy.getDvd();
			}
		}));
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

não tem erro nenhum

quando eu rodo no navegador :

Como falei, compila normal, entra nas telas etc… mas na hora de logar ou cadastrar ou visualizar da erro !

Entendeu ?

É como se por causa disso “erro no User.java” ele não conseguir-se conectar no Banco, nem o meu GeraBanco.java Cria as tabelas !

então o hibernate.cfg.xml tah errado… por exemplo a url do banco, ou o usuario e senha

nãopega nem o gera banco !


<?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>
    <!-- CONFIGURANDO O HIbernate -->
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/NUTECBD</property>
    <property name="hibernate.connectionUsuarios.name">root</property>
    <property name="hibernate.connection.password">debian23</property>
    <!-- USADO PELO HIBERNATE PARA SE COMUNICAR COM O BD  -->
    
 <!-- CLASSES  -->
 		<mapping class="br.com.caelum.vraptor.mydvds.model.Dvd" />
 		<mapping class="br.com.caelum.vraptor.mydvds.model.DvdRental" />
 		<mapping class="br.com.caelum.vraptor.mydvds.model.Usuario" />

	</session-factory>

</hibernate-configuration>
	

Junior, sei que você vai me odiar por uns minutos, mas creio que logo você entenda meu puxão de orelha como algo bom.

Você precisa ler melhor as mensagens de erro. Já notei muito post seu com erros muito básicos de Java, e muitos deles se você tivesse lido a mensagem de erro teria entendido o que aconteceu.

Nesse seu caso: cannot open connection. Isso significa que a conexão não pode ser aberta. Quais podem ser os motivos? A exception completa pode te dizer, mas isso você também pode investigar. Sabe como?

Primeira coisa a fazer é ver se o banco está online. Você pode fazer um telnet na porta do banco de dados, no caso de um pgsql local você faz telnet localhost 5432. Assim você sabe se o banco está up ou não e isola o erro.

Caso o banco estiver ok proximo passo é ver se o URL que você colocou na definição da conexão está ok. Se você usa um datasource teste-o pelo próprio admin do glassfish.

Abraços

Garcia ! Ficou chateado nada, fico é agradecido !

Fiz tudo isso !
Tenho outro sisteminha aqui que ta usando o mesmo banco, logo ta funcionando normalmente o mydvds que não funciona, refiz todas as classes user para usuario.

Abraço !

esta classe era para pega normal :

public class GeraBanco {
public static void main(String[] args) {
AnnotationConfiguration conf = new AnnotationConfiguration();

conf.configure();

SchemaExport se = new SchemaExport(conf);

se.create(true, true);

}

}

mais não pega !

confira se as configurações do hibernate.cfg.xml estão corretas…

não adianta postar aqui seu xml de novo, pq vc precisa saber se está tudo certo na sua máquina… vê se vc consegue se conectar diretamente ao Postgresql usando essas configurações…

Junior, primeiro faça o teste para ver se o banco está ok. Há dois testes a fazer:

  • faça um telnet no ip e porta do banco, exemplo, telnet localhost 5432
  • tente conectar no pgsql por uma classe java qualquer

Assim você sabe se o erro é no seu código ou no pgsql. A impressão que tenho pela mensagem é que o banco não está rodando, ou então há um firewall bloquenado a porta caso você use remoto.

Lucas e Garcia, Obrigado pela Paciência !

infelizmente era o hibernate.cfg.xml - risos -

correto seria, erro na parte de nome, deletei o log4, e mostrou tudo ! e criou a tabela, NETBEANS satânico !

<?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>
    <!-- CONFIGURANDO O HIbernate -->
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/NUTECBD</property>
    <property name="connection.username">root</property>                                        **************************************erro tava aqui****************
    <property name="hibernate.connection.password">debian23</property>
    <!-- USADO PELO HIBERNATE PARA SE COMUNICAR COM O BD  -->
    
 <!-- CLASSES  -->
	
 		<mapping class="br.com.caelum.vraptor.mydvds.model.Dvd" />
 		<mapping class="br.com.caelum.vraptor.mydvds.model.DvdRental" />
 		<mapping class="br.com.caelum.vraptor.mydvds.model.Usuario" />

	</session-factory>

</hibernate-configuration>
	

=====================BOM PROBLEMA RESOLVIDO===========================
Mas na Hora de Cadastrar os usuários ou logar no sistema não funciona !


Junior, te peço a mesma coisa de sempre: mande as mensagens, descreva os comportamentos, se for realmente necessário mostre o trecho do código que faz isso…

oi junior

se o cadastro nao ta funcionando, poste pra gente o erro. se tiver stacktrace, pote ela inteira (inclusive os caused by). caso nao apareca nada precisa ligar o log no nivel debug.

abracos!

Paulo Silveira !

        Primeiro era o problema com hibernate.cfg.xml , depois o problema com User.java, agora ele entra na famigerada tela de login, mas não cadastra nem loga no sistema, acho que dever ser algo no controller, estou vendo aqui mas meus conhecimento tão se resumindo a isso !

vc tá usando transações? possivelmente o postgre não salve nada se vc não colocar dentro de uma transação

Então o Mydvds é só um exemplo ilustrativo ?

o que vc quer dizer com isso?
ele é uma aplicação de exemplo, para mostrar algumas funcionalidades… não necessariamente uma aplicação útil…

ok então !