Integraçao Struts x Hibernate

e ai rapaziada, blz…

  • to seguindo um tutorial de aplicação web de cadastro…to usando struts como controller da minha aplicacao, jsp como view e no modelo javabeans chamado Contato, um ContatoDAO e uma fabrica de conexao…ConnectionFactory…
  • agora quero usar o hibernate como modelo da aplicacao…o q fazer???
  • tenho meus action de inserçao, atualizacao, listagem, e os actionForm…como que fica???

como resolver isto???

obs: uso o netbeans 5.0 que ja vem com o struts integradoo…valeu

O Hibernate não atua como modelo. Ele é uma ferramenta de mapeamento OR. A mudança que você tem que fazer para utilizar o Hibernate é:

Refactorings nos DAOs para suportar o Hibernate, pois parece que você está utilizando JDBC.

Criar uma classe que faça o tramento da Session e Transaction. Geralmente um classe chamada HibernateUtil. Se quiser, tenho um exemplo aqui utilizando thread local.

Não sei se suas actions estão muito acopladas aos DAOs, mas os refactorings nelas são poucos.

Basicamente é isso. O outro passo é mapear o relacionamento entre as classes.

e ai, blz… tenho na minha aplicação:

  • ConnectionFactory.java
import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;

 public class ConnectionFactory {

 public static Connection getConnection() throws SQLException {
   try {
         Class.forName("com.mysql.jdbc.Driver");
         System.out.println(“Conectando ao banco”);
         return DriverManager.getConnection 
("jdbc:mysql://192.168.0.111/teste","root", "");
       } catch (ClassNotFoundException e) {
        throw new SQLException(e.getMessage());
     }
   }
 }
  • Contato.java
public class Contato {

 private Long id;
 private String nome;
 private String email;
 private String endereco;

 // métodos get e set para id, nome, email e endereço

 public String getNome() {
 return this.nome;
 }
 public void setNome(String novo) {
 this.nome = novo;
 }
 public String getEmail() {
 return this.email;
 }
 public void setEmail(String novo) {
 this.email = novo;
 }

 public String getEndereco() {
 return this.endereco;
 }
 public void setEndereco(String novo) {
 this.endereco = novo;
 }
public Long getId() {
 return this.id;
 }
 public void setId(Long novo) {
 this.id = novo;
 }
 }
  • no struts o form …ContatoForm.java
import org.apache.struts.action.*;

 public class ContatoForm extends ActionForm {

 private Contato contato = new Contato();

 public Contato getContato() {
 return this.contato;
 }
 }
  • e as action, colocarei somente uma action de adicionar contato
// série de imports aqui

 public class AdicionaContatoAction extends Action {

 public ActionForward execute(ActionMapping map, ActionForm form,
 HttpServletRequest request, HttpServletResponse response)
 throws Exception {

 // log
 System.out.println("Tentando criar um novo contato...");

 // formulário de cliente
 ContatoForm formulario = ((ContatoForm) form);
 // acessa o bean
 Contato contato = formulario.getContato();

 // adiciona ao banco de dados
 ContatoDAO dao = new ContatoDAO();
 dao.adiciona(contato);

 // ok.... visualização
 return map.findForward("ok");

 }
}

** ai ta mais ou menos as classes da minha aplicação…gostaria que vc
me exemplificasse como ficaria com a integração com o hibernate, pois
to meio perdidoo…
** outra dúvida, nestas classes que citei o que faz parte da minha
camada de negocios???

valeuuu

O primeiro passo é criar uma classe que substitua essa classe ConnectionFactory. Pois ela retorna uma conexão JDBC.

Depois é preciso realizar alterações no DAO. Como você deve saber, os DAOs com hibernate são diferentes. Por exemplo, para consultas você pode utilizar HQL ou a Criteria API.

Você ainda terá que criar os XMLs de mapeamento para que o hibernate consiga enxergar as propriedades dos seu POJOs. Para gerar esses XMLs você pode usar engenharia reversa nas tabelas do seu banco de dados.

Outra coisa, você precisa realmente utilizar o Struts ? tem muitos frameworks melhores por aí… mas se você não tiver escolha…

Digo isso porque a integração do Struts com o Spring por exemplo, é meio chatinha. E essa integração poderia te trazer muita produtividade.

:wink: