Apostila de VRaptor, Hibernate e AJAX disponível

Fábio,

O código segue abaixo:

HibernateUtil.java

package br.com.caelum.lojavirtual.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

	private static SessionFactory factory;

	/**
	 * @return
	 */
	static {
		Configuration conf = new AnnotationConfiguration();
		conf.configure();
		factory = conf.buildSessionFactory();
	}
	
	public static Session getSession() {				
		return factory.openSession();		
	}

}

É isso mesmo. Você está abrindo transação em uma Session que não é a usada pelo Dao/DaoFactory.

Controle as transações chamando métodos na DaoFactory ao invés de criar outra Session.

Fábio,

E como ficaria, por exemplo?

Obrigado.

Uma coisa que eu reparei.

Se eu altero um valor diretamente no banco de dados, essa alteração não se reflete imediatamente na página web. Por exemplo, carrego a página inicial e depois altero o preço de uma música. Se dou um reload na página, continua aparecendo o preço antigo.

Por quê? Imagino que seja algum tipo de cache, para não precisar ir buscar no banco toda hora, certo?

Tem como alterar isso, para fazer buscar os dados no banco a cada request?

Obrigado e parabéns pelo ótimo trabalho.

[editado] Eu reparei que depois de um tempo, cerca de 10, 15 minutos (talvez menos) ele atualiza, mas precisava que atualizasse na próxima consulta.

Pessoal,

Descobri qual era o erro.
Era a versão do VRaptor, eu estava usando a 2.3.2, mudei para a 2.3.3 e funcionou.

Tirei o @In, e colocou a palavra final.

@Component
@InterceptedBy(DaoInterceptor.class)
public class UsuarioLogic {

	private final DaoFactory daoFactory;
	private List<Usuario> usuarios;

               // continua o codigo...

}

:smiley:
Achei otimo, mas nao estou conseguindo acompanhar pois me faltam librarys que o projeto depende!!!

po, será que alguem tem um outro zip com todos os jars ultilizados ? :frowning:
abrass

bom dia…to seguindo a apostila, configurei o log4j no src, o vraptor.xml tbem no src e o web.xml no web-inf …mas quando acesso a http://localhost:8080/loja/usuario.formulario.logic…gera que a servlet nao esta avaliada…erro 404…

***15/06/2007 09:34:32 org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet vraptor2 is currently unavailable

** web.xml

&lt?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt

&lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"&gt;

	&lt;servlet&gt;
		&lt;servlet-name&gt;vraptor2&lt;/servlet-name&gt;
		&lt;servlet-class&gt;org.vraptor.VRaptorServlet&lt;/servlet-class&gt;
		&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
	&lt;/servlet&gt;

	&lt;servlet-mapping&gt;
		&lt;servlet-name&gt;vraptor2&lt;/servlet-name&gt;
		&lt;url-pattern&gt;*.logic&lt;/url-pattern&gt;
	&lt;/servlet-mapping&gt;

&lt;/web-app&gt;

**vraptor.xml


&lt;vraptor&gt;
&lt;component&gt;br.com.ricardo.lojavirtual.logic.UsuarioLogic&lt;/component&gt;
&lt;/vraptor&gt;

**log4j


&lt?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;
&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;

        &lt;appender name="stdout" class="org.apache.log4j.ConsoleAppender"&gt;
                &lt;layout class="org.apache.log4j.PatternLayout"&gt;
                        &lt;param name="ConversionPattern" 
                                value="%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n"/&gt;
                &lt;/layout&gt;
        &lt;/appender&gt;

        &lt;category name="org.vraptor"&gt;
                &lt;priority value="DEBUG" /&gt;
                &lt;appender-ref ref="stdout" /&gt;
        &lt;/category&gt;

        &lt;category name="org.vraptor"&gt;
                &lt;priority value="INFO" /&gt;
                &lt;appender-ref ref="stdout" /&gt;
        &lt;/category&gt;

&lt;/log4j:configuration&gt;

*** valeuu

Maravilha!! agora vou pegar firme! rsss essas apostilas da Caelum são Muito boas quando puder farei um treinamento por lá.

Oi Ricardo,

Precisamos do log da exception que ocorre, senão não há como saber o que está acontecendo.

Opa… apostilas da caelum são ótimas… já li duas e aprendi MTO… vou para esta agora hehe…

só estou com uma dúvida, no Apêndice B - Criando o Ambiente todo o ambiente é montado, mas não se faz referência ao JQUERY… ele já vem implementado!!! desculpem a dúvida iniciante… mas é o que sou hehe :smiley:

Eu gostei muito da apostila, mas acredito que na parte de pesquisa utilisando o HQL…ainda ta fraco.

mas no geral…irado

to me divertindo com ela…e tendo varias dores de cabeça…

vai la a diva para vcs,

disponibilizar mais material sobre consultas HQL

valeu.

Parabéns pela ótima iniciativa! Contineum com o excelante trabalho e dissiminando o conhecimento do Java.

algum dos programadores poderra fornecer os fontes para mim, não consigo por para funcionar aqui, gostaria de ver onde estar o erro !

junior,

Qual o erro que dá? O que acontece que você não está conseguindo colocar-lo para rodar.

Falae Galera…

APOSTILA É MUITO BOA!!!ACABEI DE TERMINAR MEU ESTUDO COM ELA!!!

porém… agora queria me especializar mais nas bibliotecas utilizadas… alguém indica algum material bom?! um livro?! uma apostila?! um site?!

PARABÉNS PARA QUEM FEZ A APOSTILA, PARABÉNS PARA OS BRASILEIROS CRIADORES DO VRAPTOR!!!

em baixo

fsquadro, não copila fica dando erro:

NÃO EXISTE MAPEAMENTO DE SEVELET ESPECIFICADO NO WEB.XML PARA O SERVELET USUARIO.

os arquivos:
estar ai meus fontes:
tabela.sql
/***************************************************/
CREATE TABLE banco.Usuario (
id int(11) NOT NULL,
usuario varchar(50) NOT NULL,
senha varchar(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

/*****************************************************/

hibernate.cfg.xml
/*****************************************************/
&lt?xml version=“1.0” encoding=“UTF-8”?&gt
<!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.connection.driver_class”>
com.mysql.jdbc.Driver
</property>
<property name=“hibernate.connection.url”>
jdbc:mysql://localhost/teste
</property>
<property name=“hibernate.dialect”>
org.hibernate.dialect.MySQLDialect

<property name=“hibernate.connection.username”>root</property>
<property name=“hibernate.connection.password”>123456</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>

<property name=“hibernate.show_sql”>true</property>
<property name=“hibernate.format_sql”>true</property>

<mapping class=“br.com.caelum.lojavirtual.modelo.Usuario”/>

</session-factory>
</hibernate-configuration>

/************************************************/

varaptor.xml
/*************************************************/
<vraptor>

<component>org.vraptor.util.StatsQuery</component>

<plugin>org.vraptor.plugin.hibernate.HibernateValidatorPlugin</plugin>

</vraptor>
/************************************************/

Usuario.java
/***************************************************/
package br.com.caelum.lojavirtual.modelo;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.*;
/**

  • Classe de entidade Usuario
  • @author root
    */
    @Entity
    @Table(name = “Usuario”)
    @NamedQueries( {
    @NamedQuery(name = “Usuario.findById”, query = “SELECT u FROM Usuario u WHERE u.id = :id”),
    @NamedQuery(name = “Usuario.findByUsuario”, query = “SELECT u FROM Usuario u WHERE u.usuario = :usuario”),
    @NamedQuery(name = “Usuario.findBySenha”, query = “SELECT u FROM Usuario u WHERE u.senha = :senha”)
    })
    public class Usuario implements Serializable {

@Id
@Column(name = “id”, nullable = false)
private Integer id;

@Column(name = “usuario”, nullable = false)
private String usuario;

@Column(name = “senha”, nullable = false)
private String senha;

/** Creates a new instance of Usuario */
public Usuario() {
}

/**

  • Cria uma nova instância de Usuario com os valores especificados.
  • @param id o id do Usuario
    */
    public Usuario(Integer id) {
    this.id = id;
    }

/**

  • Cria uma nova instância de Usuario com os valores especificados.
  • @param id o id do Usuario
  • @param usuario o usuario do Usuario
  • @param senha o senha do Usuario
    */
    public Usuario(Integer id, String usuario, String senha) {
    this.id = id;
    this.usuario = usuario;
    this.senha = senha;
    }

/**

  • Define o id deste Usuario.
  • @return o id
    */
    public Integer getId() {
    return this.id;
    }

/**

  • Define o id deste Usuario para o valor especificado.
  • @param id o novo id
    */
    public void setId(Integer id) {
    this.id = id;
    }

/**

  • Define o usuario deste Usuario.
  • @return o usuario
    */
    public String getUsuario() {
    return this.usuario;
    }

/**

  • Define o usuario deste Usuario para o valor especificado.
  • @param usuario o novo usuario
    */
    public void setUsuario(String usuario) {
    this.usuario = usuario;
    }

/**

  • Define o senha deste Usuario.
  • @return o senha
    */
    public String getSenha() {
    return this.senha;
    }

/**

  • Define o senha deste Usuario para o valor especificado.
  • @param senha o novo senha
    */
    public void setSenha(String senha) {
    this.senha = senha;
    }

/**

  • Retorna um valor de código hash para o objeto. Esta implementação computa
  • um valor de código hash baseado nos campos id deste objeto.
  • @return um valor de código hash para este objeto.
    */
    @Override
    public int hashCode() {
    int hash = 0;
    hash += (this.id != null ? this.id.hashCode() : 0);
    return hash;
    }

/**

  • Determina se outro objeto é igual a este Usuario. O resultado é
  • <code>true</code> se e somente se o argumento não for nulo e for um objeto Usuario o qual
  • tem o mesmo valor para o campo id como este objeto.
  • @param object o objeto de referência com o qual comparar
  • @return <code>true</code> se este objeto é o mesmo como o argumento;
  • <code>false</code> caso contrário.
    */
    @Override
    public boolean equals(Object object) {
    // TODO: Warning - this method won’t work in the case the id fields are not set
    if (!(object instanceof Usuario)) {
    return false;
    }
    Usuario other = (Usuario)object;
    if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) return false;
    return true;
    }

/**

  • Retorna uma representação literal deste objeto. Esta implementação cria
  • uma representação baseada nos campos id.
  • @return uma representação literal deste objeto.
    */
    @Override
    public String toString() {
    return “br.com.caelum.lojavirtual.modelo.Usuario[id=” + id + “]”;
    }

public void setLogin(String string) {
throw new UnsupportedOperationException(“Not yet implemented”);
}

public boolean getLogin() {
return false;
}

}
/**********************************************/

Peço a ajuda de vocês.

Aqui não cosigo baixar nenhum arquivo compactado ou executável mesmo que for para nível de estudo. Se alguém poder enviar essa apostilar para o meu e-mail agradeço.

inocencio.oliveira@gmail.com

[quote=Grinvon]Peço a ajuda de vocês.

Aqui não cosigo baixar nenhum arquivo compactado ou executável mesmo que for para nível de estudo. Se alguém poder enviar essa apostilar para o meu e-mail agradeço.

inocencio.oliveira@gmail.com[/quote]

Apostila enviada!!

Grinvon , cara bota linux ai que você baixa ate o capeta !