Tutorial Hibernate + Vraptor para projetos Restful. Configurando o Projeto Passo 1 Baixe o Eclipse IDE for Java EE Developers: https://www.eclipse.org/downloads. Passo 2 Vamos criar um novo projeto Maven, para isso clique em New ->Project -> Maven Project.
Passo 3 Marque a opção Create a simple Project (skip archetype selection). Passo 4 Em group id coloque a URL que o teu projeto será publicado futuramente (escrevendo ao contrário). Em artifact pode colocar o nome do projeto. Em packaging troque para WAR.
Passo 5 Aqui você pode ver que foi criada a estrutura padrão de packages java de um projeto Maven. Passo 6 Vamos criar o web.xml na pasta src/main/webapp/web-inf para configuramos o weld como listener para ativar o CDI.
Não esqueça de especificar a pasta WEB-INF no parent folder para criar a pasta WEB-INF. <?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>vraptor4</display-name> <listener> <listener-class>org.jboss.weld.environment.servlet.listener</listener-class> </listener> </web-app> Passo 7 Agora vamos configurar o Tomcat. Baixe o Tomcat * em: http://tomcat.apache.org/download-80.cgi. Baixe o Binary Distributions Core, a versão zip ou tar.gz. Descompacte no seu computador.
Na aba Servers, clique em No servers are available. Click this link to create a new server. Selecione Tomcat v8.0 Server
Em Tomcat installation directory informe a pasta onde o Tomcat foi descompactado e depois clique em Finish. Adicione nosso projeto no Tomcat
Passo 8 Agora que aplicação está configurada, vamos configurar no pom.xml do Maven as libs do nosso projeto restful. Os pacotes são: jstl: Javax servlet. java.inject: Dependência para o CDI funcionar no VRaptor. vraptor 4.1.0: Framework web. weld-servlet-core: Referência do CDI para o Tomcat. weld-core-impl: Referência do CDI para o Tomcat. javax.el: Para JSPs. hibernate-validator-cdi: Dependência para o validator para o VRaptor (vou fazer um post só sobre o Validator). hibernate-core: Core do Hibernate 4. vraptor-hibernate: Plugin do VRaptor para injetar a SectionFactory do Hibernate no seu DAO ou Repository. Mysql: No meu projeto estou usando o mysql como banco de dados. <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschemainstance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>br.ufpi.teste</groupid> <artifactid>vraptor4</artifactid> <version>0.0.1-snapshot</version> <packaging>war</packaging> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <project.reporting.outputencoding>utf-8</project.reporting.outputencoding> </properties> <dependencies> <groupid>jstl</groupid> <artifactid>jstl</artifactid>
<version>1.2</version> <groupid>javax.inject</groupid> <artifactid>javax.inject</artifactid> <version>1</version> <groupid>br.com.caelum</groupid> <artifactid>vraptor</artifactid> <version>4.1.0.final</version> <groupid>org.jboss.weld.servlet</groupid> <artifactid>weld-servlet-core</artifactid> <version>2.1.2.final</version> <groupid>org.jboss.weld</groupid> <artifactid>weld-core-impl</artifactid> <version>2.1.2.final</version> <groupid>javax.el</groupid> <artifactid>el-api</artifactid> <version>2.2</version> <scope>provided</scope> <groupid>org.hibernate</groupid> <artifactid>hibernate-validator-cdi</artifactid> <version>5.1.1.final</version> <groupid>org.hibernate</groupid> <artifactid>hibernate-core</artifactid> <version>4.3.6.final</version> <groupid>br.com.caelum.vraptor</groupid> <artifactid>vraptor-hibernate</artifactid> <version>4.0.0.final</version> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.6</version> </dependencies> <build> <pluginmanagement> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </pluginmanagement>
</build> </project> Colocamos na tag <build> o plugin maven-compiler para dizer que usaremos o Java-SE 1.7, ou seja, Java 7, fazendo isso o projeto vai dar erro, para resolver clicamos com o botão direito no projeto, Maven -> Update Project
Passo 9 Criamos o beans.xml na pasta src/main/resources/meta-inf para que o CDI funcione corretamente.
Não esqueça de especificar a pasta META-INF no parent folder para criar a pasta META-INF <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" version="1.1" bean-discovery-mode="all"> </beans> Passo 10 Criamos o hibernate.cfg.xml no build path src/main/resources e configuramos os dados da SessionFactory para acesso ao Mysql. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD.//EM" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.url">jdbc:mysql://localhost:3306/vraptor4</property> <property name="connection.driver_class">com.mysql.jdbc.driver</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="dialect">org.hibernate.dialect.mysql5innodbdialect</property> <property name="hbm2ddl.auto">update</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping class="br.ufpi.vraptor4.model.entity.empresa"/> </session-factory> </hibernate-configuration> Note que já mapeamos a nossa Entity que criaremos posteriormente Também deixamos a propriedade hbm2ddl.auto como update, para que o Hibernate crie a tabela no banco de dados quando usarmos a aplicação Não esqueça de criar o SCHEMA vraptor4 no mysql. Passo 11 Criamos nossa Entity Empresa na package br.ufpi.vraptor4.model.entity.
package br.ufpi.vraptor4.model.entity; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.generationtype; import javax.persistence.id; import javax.persistence.sequencegenerator; @Entity public class Empresa {
@Id @SequenceGenerator(name = empresa_seq, sequencename = empresa_seq, allocationsize = 1) @GeneratedValue(strategy = GenerationType.IDENTITY, generator = empresa_seq ) private Long id; private String nome; private Long documento; 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 Long getdocumento() { return documento; public void setdocumento(long documento) { this.documento = documento; Passo 12 Criarmos nosso Repository Empresa na package br.ufpi.vraptor4.model.repository.
package br.ufpi.vraptor4.model.repository; import javax.enterprise.context.requestscoped; import javax.inject.inject; import java.util.list; import org.hibernate.criteria; import org.hibernate.session; import br.ufpi.vraptor4.model.entity.empresa; @RequestScoped public class EmpresaRepository { @Inject private Session session; private Criteria createcriteria() { return session.createcriteria(empresa.class); @SuppressWarnings("unchecked") public List<Empresa> list() { return createcriteria().list(); Passo 13 Criamos nossa Controller Empresa na package br.ufpi.vraptor4.model.controller.
A anotação @Controller mapeia nossa Controller no VRaptor. package br.ufpi.vraptor4.controller; import javax.inject.inject; import br.com.caelum.vraptor.controller; import br.com.caelum.vraptor.get;
import br.com.caelum.vraptor.path; import br.com.caelum.vraptor.result; import br.com.caelum.vraptor.view.results; import br.ufpi.vraptor4.model.repository.empresarepository; @Controller @Path("/empresa") public class EmpresaController { @Inject private Result result; @Inject private EmpresaRepository empresarepository; @Get @Path("/list") public void listall() { result.use(results.json()).withoutroot().from(empresarepository.list()).serialize(); Passo 14 Enfim, vamos testar nossa aplicação!! iniciamos o servidor Tomcat, botão direito Start. Em seguida, acessamos o endpoint /empresa/list.