MyDvds + Vraptor + PosGreSql Bug!

28 respostas
juniorsatanas

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;
	}

}

28 Respostas

Lucas_Cavalcanti

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

não tem erro nenhum

juniorsatanas

quando eu rodo no navegador :

juniorsatanas

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 !

Lucas_Cavalcanti

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

juniorsatanas

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>
G

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

juniorsatanas

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 !

juniorsatanas

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 !

Lucas_Cavalcanti

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…

G

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.

juniorsatanas

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>
juniorsatanas

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


G

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…

Paulo_Silveira

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!

juniorsatanas

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 !
Lucas_Cavalcanti

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

juniorsatanas

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

Lucas_Cavalcanti

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

juniorsatanas

ok então !

Paulo_Silveira

Oi Lucas

Acho que o Junior quis perguntar se tinha transacoes no MyDvds. Junior, tem sim! O HibernateProvider, que vem com o VRaptor, abre e fecha a transacao pra voce.

Liga o log em debug mode pra gente e posta o que aparece quando voce tenta criar um usuario por favor.

juniorsatanas

Paulo Silveira Opa…

Foi isso mesmo Paulo… testei aqui !

juniorsatanas

Paulo Silveira Dei um tempo no Mydvds, vou fazer a Loja Virtual, pois tem tudo na apostila…
Depois parto para o Mydvds novamente !

wariows

O erro anterior era porque vc não pode criar uma tabela com nome ‘user’ no postgresql, é palavra reservada.

juniorsatanas

sim SQL 99 !

juniorsatanas

Paulo Silveira Voltei a Trabalhar com VRaptor ! terminei os tapa buraco aqui no Struts e JSF !

Sugestão : por que você não hospeda o MYDVDS E LOJA VIRTUAL NA WEB ? para as pessoas olharem rodando !?

E outras funcionalidade, assim o pessoal ia ver como é eficiente VR3 !

Abraço !

juniorsatanas
init:
deps-module-jar:
deps-ear-jar:
deps-jar:
library-inclusion-in-archive:
library-inclusion-in-manifest:
compile:
compile-jsps:
Iniciando processo Tomcat...
Esperando Tomcat...
Servidor Tomcat iniciado.
Desimplantando...
OK - Undeployed application at context path /
Deployment localizado em D:\Desenvolvimento\vraptor-mydvds-3.0.2\build\web
deploy?config=file%3A%2FC%3A%2FDOCUME%7E1%2FADMINI%7E1%2FCONFIG%7E1%2FTemp%2Fcontext5196618318282379863.xml&path=/
OK - Deployed application at context path /
Inicialização em andamento...
start?path=/
OK - Started application at context path /
run-deploy:
Browsing: http://localhost:8084/
run-display-browser:
run:
CONSTRUÍDO COM SUCESSO (tempo total: 17 segundos)
Chaia

Ola
Configurei a aplicação MyDvd para usar PostgreSQL, é esta gravando normalmente, minha configuração é a seguinte:

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.PostgreSQLDialect</property>
		<property name="hibernate.default_schema">public</property>
		<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
		<!-- property name="hibernate.connection.password">novotom</property-->
		<property name="hibernate.connection.url">jdbc:postgresql://localhost/dvd</property>
		<property name="hibernate.connection.password">brasil12</property>
		<property name="hibernate.connection.username">postgres</property>
		<property name="org.postgresql.Driver.logDebug">true</property>
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">false</property>
		<property name="hibernate.bytecode.use_reflection_optimizer">true</property>
		<property name="hibernate.jdbc.batch_versioned_data">true</property>
		<property name="hibernate.max_fetch_depth">2</property>
		<property name="hibernate.default_batch_fetch_size">4</property>
		<property name="hibernate.cache.use_query_cache">false</property>
		<property name="hibernate.cache.use_second_level_cache">false</property>
		<property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
		<property name="hibernate.connection.autocommit">true</property>
		<property name="hibernate.connection.release_mode">after_statement</property>
		<property name="org.postgresql.Driver.logDebug">true</property>


		<!--
			property
			name="hibernate.connection.url">jdbc:hsqldb:mem:dvd</property>
			<property
			name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
			<property name="hibernate.connection.username">root</property>
			<property name="hibernate.connection.password"></property
		-->

		<property name="hibernate.show_sql">false</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

		<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.User" />

	</session-factory>

</hibernate-configuration>

E nas classes mudei a marcação de geração de Id, pois no postgres e diferente do mysql

@Id
	@SequenceGenerator(name = "sequence_dvd", sequenceName = "sequence_dvd", initialValue = 1, allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence_dvd")
	private Long id;
juniorsatanas

posta no 4shared ele para eu da uma olhada no teu modificado !

arbaço.

jr 666

Criado 14 de janeiro de 2010
Ultima resposta 6 de mai. de 2010
Respostas 28
Participantes 6