Lançado VRaptor 3.1 e versão atualizada da Apostila FJ-28

O VRaptor 3.1 acaba de ser lançado com muitas correções e melhorias. Agradecimento especial ao pessoal do GUJ que tanto tem colaborado com o crescimento do framework com sugestões e correções. E agradecimento aos mais de 4 mil downloads de toda a comunidade.

Junto com o lançamento, a Caelum acaba de disponibilizar a última versão da apostila FJ-28: Desenvolvimento Ágil para a Web 2.0 com VRaptor, Hibernate e AJAX atualizada para usar a nova versão do framework. Acesse já para fazer o download gratuito do material:

http://www.caelum.com.br/curso/fj-28-vraptor-hibernate-ajax/

Entre as novidades do VRaptor 3.1 destacamos:

Você pode ver o changelog completo aqui: http://vraptor.caelum.com.br/documentacao/changelog/
E baixar a nova versão do VRaptor aqui: http://vraptor.caelum.com.br/download.jsp

E, como sempre, todo feedback da comunidade, tanto quanto ao VRaptor quanto à Apostila, é muito bem-vindo!

Sergio Lopes Boa Tarde !

Já estava até estudando JSF, mais agora volto para VRaptor 3 !
Além do VRaptor ser Maravilhoso e Brasileiro e tem um suporte Otimo aqui no Guj…
Só Falta o pessoal da DevMedia fazer um CRUD, já tem um do Menta…

Sergio Cadê os Fontes ?
Valeu !

Os fontes do VRaptor estão disponíveis no vraptor-3.1.0.zip ou em http://github.com/caelum/vraptor

Lucas Cavalcanti Boa Tarde !

Estava citando o da loja virtual da apostila, não o do VRaptor 3

dentro do zip da apostila tem o código inicial do projeto:
http://www.caelum.com.br/curso/fj-28-vraptor-hibernate-ajax/

se vc for seguir a apostila é só criar um projeto a partir do blank project, e copiar os arquivos do zip goodbuy-auxiliar

Lucas Cavalcanti Valeu estava fazendo isso…

Vamos ver no que da !

Abraço !

No NetBeans fica com uma estrutura horrível, nada haver com o padrão… ao importar para VRaptor3 o mydvds tem que apagar o web.xml, depois refazer etc…
No Eclipse fica tudo certinho ! era bom um plugin para VR3.

na apostila pg28 não falta a porta ?

    Já o XML, por mais que seja um pouco mais difícil em relação ao properties, permite que toda a configuração
seja feita nele. Por isso faremos nossa configuração no XML. O arquivo XML que o Hibernate procurará será o
hibernate.cfg.xml e ele deve estar no classpath.
    Para nosso caso, vamos seguir a convenção e criar o arquivo hibernate.cfg.xml na pasta src, dentro do
nosso projeto. O conteúdo do arquivo será esse:
<!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.username">root</property>
          <property name="hibernate.connection.password"></property>
          <property name="hibernate.connection.url">jdbc:mysql://localhost/fj28</property>
          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
          <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
          <property name="hibernate.hbm2ddl.auto">update</property>
          <property name="show_sql">true</property>
          <property name="format_sql">true</property>
     </session-factory>
</hibernate-configuration>
    As configurações que passamos nesse arquivo são parecidas quando queremos nos conectar a um banco
de dados. Para conectar em um banco de dados, precisamos informar qual é o usuário, a senha, algumas
informações do banco, como host, porta, etc.
    Um detalhe importante da nossa configuração é o banco de dados que foi passado. Na configuração
hibernate.connection.url foi passado o nome do database que utilizaremos. Para esse caso escolhemos
o database fj28.
    Abaixo segue a descrição de todas as configurações que usamos.
    ? hibernate.connection.username - usuário do banco de dados
    ? hibernate.connection.password - senha do usuário
    ? hibernate.connection.url - chamada de URL ou string de conexão, deve ser configurada de acordo com
      documentação do banco de dados
    ? hibernate.connection.driver_class - driver que deve ser utilizado
    ? hibernate.hbm2ddl.auto - como o hibernate vai se comportar em relação às tabelas do banco. Com o
      valor update ele vai criar ou modificar tabelas sempre que necessário.
    ? hibernate.dialect - dialeto a ser utilizado para a comunicação com o banco de dados
    ? show_sql - flag que indica se os SQLs gerados devem ser impressos
    ? format_sql - flag que indica se os SQLs devem ser formatados
                                      Capítulo 3 - Persistindo os dados com o Hibernate - Configurando o Hibernate - Página 6

no meu caso postgre…

para :


<!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.username">root</property>
        <property name="hibernate.connection.password">debian23</property>
    <!-- CONFIGURANDO O HIbernate -->
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/NUTECBD</property>

   

       <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

    <!-- USADO PELO HIBERNATE PARA SE COMUNICAR COM O BD  -->
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>

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


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

Dúvida ?

[quote=juniorsatanas]No NetBeans fica com uma estrutura horrível, nada haver com o padrão… ao importar para VRaptor3 o mydvds tem que apagar o web.xml, depois refazer etc…
No Eclipse fica tudo certinho ! era bom um plugin para VR3.

[/quote]

Teu netbeans é mtu ruinzinho msm hein rs zoa mano!

Uma coisa estranha do MYDVDS, e que ele tem uma classe User, sempre da um erro referente ao SQL99 que é uma palavra reservada !
Se mudar o MYDVDS para usar bacno Postgree…
segue scree…

Mais não preciso ficar 7 dias atrás de plugins hahahahah que são incompatíveis entres se e a IDE - Brincando Mano ! —

ps : -risos-

no fim a classe ficou assim:


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

import java.io.Serializable;                      **************adicionado por mim **************
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 Usuario 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;
	}

}

agora foi :

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.

    alter table DvdRental 
        drop constraint FK7F97B9B6126E7F4D

    alter table DvdRental 
        drop constraint FK7F97B9B6BBEC2ABC

    drop table Dvd

    drop table DvdRental

    drop table Usuario

    drop sequence hibernate_sequence

    create table Dvd (
        id int8 not null,
        description varchar(255),
        title varchar(255),
        type varchar(255),
        primary key (id)
    )

    create table DvdRental (
        id int8 not null,
        dvd_id int8,
        owner_login varchar(20),
        primary key (id)
    )

    create table Usuario (
        login varchar(20) not null,
        name varchar(100) not null,
        password varchar(20) not null,
        primary key (login)
    )

    alter table DvdRental 
        add constraint FK7F97B9B6126E7F4D 
        foreign key (owner_login) 
        references Usuario

    alter table DvdRental 
        add constraint FK7F97B9B6BBEC2ABC 
        foreign key (dvd_id) 
        references Dvd

    create sequence hibernate_sequence
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

erro, se alguém souber do que se trata !!

ajuda !

HTTP Status 500 -

type Exception report

message

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

exception

br.com.caelum.vraptor.InterceptionException: org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User u where u.login = :login and u.password = :password]

note The full stack traces of the exception and its root causes are available in the GlassFish v3 logs.
GlassFish v3

o nome da entidade é Usuario, e não User… vc precisa mudar os HQLs dos daos

Ok to fazendo isso Obrigado !

Tecnicamente para rodar no postgree era somente por o drive e mudar o hibernate.cfg.xml não era ?

por o jar do driver no WEB-INF/lib, mudar o hibernate.cfg.xml e criar as tabelas no banco

Eu achava que era isso… tenta ai !