terça-feira, 21 de outubro de 2014

JAVA WEB - Hibernate + JPA + MySQL + JBoss AS 7 - Configuração

Como incluir o Hibernate em seu projeto WEB? Como configurá-lo com o JBoss AS 7 utilizando o MySQL como Banco de Dados?
Estou tendo exatamente esta necessidade neste exato momento e não estou encontrando um tutorial simples e didático o suficiente para configurar meu projeto com tais tecnologias de forma rápida e fácil, sendo assim, vou "mastigar" os trechos de tutoriais que encontrei por aí e vou colocar aqui pra você o que absorvi em forma de um SIMPLES passo-a-passo! Vamos lá?

1) Você primeiramente precisará ter o MySql e seu Connector instalado em sua máquina (ou qualquer outro Banco de Dados que queira utilizar).

Clique aqui para baixar o MySQL e depois o instale (Next, Next, Next... rsrsrs porém guarde a senha que você irá fornecer durante a instalação. Iremos precisar dela);
Clique aqui para baixar o MySQL Connector/J e depois o instale (Next, Next, Next... rsrsrsrs).
Clique aqui para baixar o arquivo ".jar" referente ao conector. Usaremos ele mais adiante.

2) Depois de baixar e instalar as ferramentas de Banco de Dados agora precisamos das bibliotecas do Hibernate e do JPA (já vêm inclusas dentro do Hibernate).

Clique aqui para baixar o Hibernate ORM (Model de Objeto Relacional).

3) Você precisará também do Servidor de Aplicação JBoss 7. Baixe e descompacte a versão "JBoss AS 7.1.1.Final".

4) Iremos considerar que você já tem um projeto WEB e quer apenas configurar/adicionar tais tecnologias, PORÉM, se você está criando um projeto também neste exato momento, pode acessar este nosso tutorial onde criamos um projeto WEB do zero para criar seu projeto e depois siga pra o passo 5) deste tutorial. Clique aqui para acessar o tutorial.

5) Descompacte e abra a pasta do Hibernate que você baixou e copie os arquivos ".jar" da pasta "hibernate-release-4.3.6.Final/lib/required" para a pasta "WebContent/WEB-INF/lib" (se esta pasta não existir, crie-a!). Feito isso, clique com o botão direito do mouse em cima do seu projeto, posicione sobre "Build Path" e selecione "Configure Build Path...":


Clique em "Add JARs...", selecione os arquivos que você copiou para a pasta "WebContent/WEB-INF/lib" e clique em "OK":


Clique em "OK".

6) Dentro do diretório do JBoss AS 7 que baixamos anteriormente, na pasta "/modules/com/" crie uma pasta chamada "mysql" e dentro desta pasta crie uma outra chamada "main". Seguindo essa estrutura, dentro da pasta "/modules/com/mysql/main/" crie um arquivo XML chamado "module.xml" com o seguinte conteúdo:

 <?xml version="1.0" encoding="UTF-8"?>  
 <module xmlns="urn:jboss:module:1.1" name="com.mysql">  
   <resources>  
     <resource-root path="mysql-connector-java-5.1.15-bin.jar"/>  
   </resources>  
   <dependencies>  
     <module name="javax.api"/>  
     <module name="javax.transaction.api"/>  
     <module name="javax.servlet.api" optional="true"/>  
   </dependencies>  
 </module>  

Salve o arquivo e dentro da mesma pasta coloque o "mysql-connector-java-5.1.15-bin.jar" que baixamos anteriormente. Note que o arquivo é referenciado no XML acima então o mesmo deve conter exatamente este nome, ou então você pode alterar o XML acima com o nome do arquivo que foi baixado.

7) Abra o arquivo "module.xml" localizado dentro da pasta do JBoss AS 7 no caminho "modules/org/hibernate/main" e adicione dentro da sessão de <dependencies> o seguinte trecho:

 
<module name="com.mysql"/>  
 

O arquivo ficará assim:

 
<module xmlns="urn:jboss:module:1.1" name="org.hibernate">  
   <resources>  
     <resource-root path="hibernate-core-4.0.1.Final.jar"/>  
     <resource-root path="hibernate-commons-annotations-4.0.1.Final.jar"/>  
     <resource-root path="hibernate-entitymanager-4.0.1.Final.jar"/>  
     <resource-root path="hibernate-infinispan-4.0.1.Final.jar"/>  
   </resources>  
   
   <dependencies>  
        
           <module name="com.mysql"/>  
             
     <module name="asm.asm"/>  
     <module name="javax.api"/>  
     <module name="javax.persistence.api"/>  
     <module name="javax.transaction.api"/>  
     <module name="javax.validation.api"/>  
     <module name="org.antlr"/>  
     <module name="org.apache.commons.collections"/>  
     <module name="org.dom4j"/>  
     <module name="org.infinispan" optional="true"/>  
     <module name="org.javassist"/>  
     <module name="org.jboss.as.jpa.hibernate" slot="4" optional="true"/>  
     <module name="org.jboss.logging"/>  
     <module name="org.hibernate.envers" services="import" optional="true"/>  
   </dependencies>  
 </module>  


8) Agora temos que criar nossa Base de Dados antes de continuarmos com as configurações. Essa tarefa é simples. Ao chegar neste ponto você já deve ter instalado o MySQL em seu computador (se ainda não o fez, faça rsrs), sendo assim, abra o MySQL 5.6 Command Line Client, ele irá pedir uma senha que é a mesma que você utilizou no momento da instalação. Forneça a senha e em seguida digite o comando "create database nome_que_vc_quiser_para_o_banco ;" e dê "enter". No meu caso, para este tutorial, utilizarei o nome "ZapZap", deverá aparecer o seguinte comando indicando que a base de dados foi criada:


9) Agora iremos criar a conexão entre o JBoss e sua Base de Dados MySQL. Para isso, abra o arquivo "standalone.xml" localizado na pasta "/standalone/configuration/" do JBoss. Localize dentro do arquivo a tag "<datasources>" (no plural) e logo abaixo dela insira o seguinte código:

 
<datasource jta="false" jndi-name="java:jboss/datasources/zapzap_datasource"   
               pool-name="zapzap_datasource" enabled="true" use-ccm="false">  
    <connection-url>jdbc:mysql://localhost:3306/ZapZap</connection-url>  
    <driver-class>com.mysql.jdbc.Driver</driver-class>  
    <driver>mysql</driver>  
    <security>  
        <user-name>root</user-name>  
        <password>root</password>  
    </security>  
</datasource>
  

Trocando "ZapZap" pelo nome que você deu na criação da sua Base de Dados e "zapzap_datasource" por um nome qualquer que identifique esta conexão (lembrando que este "nome qualquer" será utilizado mais tarde).
Ainda dentro da sessão "<datasources>" (no plural rsrs), você encontrará a sessão "<drivers>" (também no plural), dentro dela, coloque o seguinte trecho de código:

 
<driver name="mysql" module="com.mysql">  
    <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>  
</driver>
  

10) Toda a configuração na parte do JBoss está concluída, agora vamos ao projeto. Crie um arquivo chamado "persistence.xml" contendo o código abaixo e salve-o no diretório "/src/META-INF/" dentro do diretório principal de seu projeto (se o diretório "META-INF" não existir, crie-o. Se o mesmo estiver em outra localização, mova-o).

 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">  
   
      <persistence-unit name="zapzap" transaction-type="RESOURCE_LOCAL">  
           <provider>org.hibernate.ejb.HibernatePersistence</provider>
           <non-jta-data-source>java:jboss/datasources/zapzap_datasource</non-jta-data-source>  
          
           <class>com.jonathan.zapzapws.util.hibernate.EntityManagerUtil</class>  
           <class>com.jonathan.zapzapws.model.CriticasSugestoesModel</class>  
             
           <properties>  
                <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />  
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />  
                <property name="hibernate.format_sql" value="true" />  
                <property name="hibernate.show_sql" value="true" />  
                <property name="hibernate.hbm2ddl.auto" value="update" />  
           </properties>  
   </persistence-unit>  
 </persistence>
  

Faça as seguintes alterações:

* Na tag "persistence-unit" altere o valor do atributo "name" de "zapzap" para qualquer outro identificador que você queira, sabendo que utilizaremos este identificador mais tarde;

* O valor da tag "non-jta-data-source" será o caminho do data-source que definimos no arquivo "standalone.xml" do JBoss no passo 9) deste tutorial.

* As tags "class" que inserimos serve para mapear as classes que se utilizarão do contexto Hibernate/JPA para injeção do EntityManager e para mapeamento das entidades do Banco de Dados. A classe EntityManagerUtil será utilizada para fornecer o EntityManager em nosso projeto e a classe CriticasSugestoesModel será utilizada para testar nossa configuração criando uma tabela e inserindo dados na base de dados. (criaremos essas classes no próximo passo).

* A propriedade "hibernate.transaction.jta.platform" tem o valor padrão pra quando se está utilizando o JBoss como Servidor de Aplicação e gerenciador de transações. Mude para o equivalente ao Servidor de Aplicação que você está usando.

* A propriedade "hibernate.hbm2ddl.auto" está definido como "update" (que atualiza o banco de dados automaticamente de acordo com as entidades criadas no código) apenas para testarmos. Em desenvolvimento eu desencorajo fortemente o seu uso e encorajo definir o valor para "validate" que valida as entidades definidas no código de acordo com o banco.

11) Crie uma classe chamada "EntityManagerUtil" que será responsável por fornecer o EntityManager para nossa aplicação. Segue o código simples da classe:

 
 public class EntityManagerUtil {  
   
      /** entity */  
      private static final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("zapzap");  
   
      /** @return the entity */  
      public static EntityManager getEntity() {  
           return entityManagerFactory.createEntityManager();  
      }  
 }  


Crie uma classe chamada "CriticasSugestoesModel" que será nossa entidade de testes do banco de dados. Segue o código da classe:


 //Indica que é uma entidade do banco de dados 
 @Entity  
 //Define o nome da tabela do banco correspondente
 @Table(name="criticas_sugestoes")  
 public class CriticasSugestoesModel{  
   
      /** id */
      //Indica que está é a chave primária da tabela  
      @Id 
      //Nome da coluna correspondente
      @Column(name="id")  
      private Long id;  
        
      /** texto */
      //Nome da coluna correspondente
      @Column(name="texto")  
      private String texto;  
        
      @Override  
      public String toString() {  
           return this.userId.toString();  
      }  
        
      @Override  
      public boolean equals(Object obj) {  
           if(obj != null && obj instanceof CriticasSugestoesModel){  
                if(((CriticasSugestoesModel)obj).getId() != null && ((CriticasSugestoesModel)obj).getId().equals(this.id)){  
                     return true;  
                }  
           }  
             
           return false;  
      }  
        
        
        
        
      /**  
       * @return the id  
       */  
      public Long getId() {  
           return id;  
      }  
   
      /**  
       * @param id the id to set  
       */  
      public void setId(Long id) {  
           this.id = id;  
      }  
   
      /**  
       * @return the texto  
       */  
      public String getTexto() {  
           return texto;  
      }  
   
      /**  
       * @param texto the texto to set  
       */  
      public void setTexto(String texto) {  
           this.texto = texto;  
      }  
 }  
   

Altere seu arquivo "persistence.xml" com o caminho correto das classes criadas acima.

12) Pronto! Para testar sua configuração inicie seu Servidor de Aplicação, execute seu projeto e utilize o seguinte trecho de código:

     
     CriticasSugestoesModel critica = new CriticasSugestoesModel();  
     EntityManager em = EntityManagerUtil.getEntity();  
             
      em.getTransaction().begin();  
             
      try {  
           critica.setTexto("Testando");  
           critica.setId(new Long(1));  
                  
           em.persist(critica);  
           em.getTransaction().commit();  
      } catch (Exception e) {  
           em.getTransaction().rollback();  
      }            
      em.close();  
   




É isso aí!! Se tudo ocorreu bem e você seguiu todo o passo-a-passo, certamente terá em mãos uma aplicação WEB configurada para utilizar os frameworks Hibernate e JPA com Base de Dados MySQL gerenciados em um Servidor de Aplicação JBoss!

Nenhum comentário:

Postar um comentário