sexta-feira, 16 de julho de 2010

Fábrica de Sessões para HIBERNATE

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

public class CreateSession {

private static SessionFactory factory;


//Bloco estático que inicializa o Hibernate e dá condições de criar uma sessão
// ou seja, essa é a nossa Fábrica de Sessões
static {
try {

//Substitua o "endereco" pelo endereço do arquivo "hibernate.cfg.xml" no seu Projeto
factory = new Configuration().configure("endereco/hibernate.cfg.xml").buildSessionFactory();

} catch (Exception e) {
e.printStackTrace();
factory = null;
}
}


//Método que retorna a sessão aberta
public static Session getSession() {
return factory.openSession();
}
}

Classe DAO para uso com HIBERNATE

package com.cts.persistence.DAO;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.cts.persistence.Session.CreateSession;

/**
*
* @author pedro.dias
*/

// Coloque a anotação de referência Genérica "T" na frente do nome da classe
public class GenericDAO {

private static Session sessao;
private Transaction transacao;

/** Creates a new instance of GenericDAO */

public void inserir(T obj) throws Exception {
sessao = CreateSession.getSession();
transacao = sessao.beginTransaction();
sessao.save(obj);
sessao.flush();
transacao.commit();
sessao.close();
}

public void alterar(T obj) throws Exception {
sessao = CreateSession.getSession();
transacao = sessao.beginTransaction();

sessao.update(obj);
sessao.flush();
transacao.commit();
sessao.close();

}

public void deletar(T obj) throws Exception {
sessao = CreateSession.getSession();
transacao = sessao.beginTransaction();

sessao.delete(obj);
sessao.flush();
transacao.commit();
sessao.close();

}

public List listarTudo(Class clazz) throws Exception {
sessao = CreateSession.getSession();
transacao = sessao.beginTransaction();

List objts;
objts = null;
Criteria selectAll = sessao.createCriteria(clazz);
transacao.commit();
objts = selectAll.list();
sessao.close();
return objts;
}

public Object buscar(Class clazz, String pk) throws Exception {
sessao = CreateSession.getSession();
transacao = sessao.beginTransaction();
Object objt = (Object) sessao.load(clazz, new Integer(Integer
.parseInt(pk)));
transacao.commit();
sessao.flush();
sessao.close();
return objt;
}

public void rollBack() {
transacao.rollback();
sessao.close();
}

public void closeConnection() throws Exception {
sessao = CreateSession.getSession();
sessao.connection().createStatement().execute("SHUTDOWN");
}

}

APLICAÇÃO EJB no ECLIPSE (passo a passo) usando o HIBERNATE 3, MySQL, FLEX, GRANITE E JBOSS

O primeiro passo do nosso TUTORIAL é a configuração de ambiente, onde serão necessários:
- Eclipse Ganymede, com os seguintes plugins instalados:
- flex 3, hibernate tools, graniteds.
- JBoss 4.2.3 GA
Dentro da sua workspace, você deve:
Criar 1 projeto JPA:
-“New JPA Project”
Seguimos um padrão colocando o nome do projeto da seguinte maneira: “NomeProjetoJPA”
Nesse projeto deve permanecer toda a lógica de negócios e de persistência.
O arquivo “persistence.xml” que fica na pasta META-INF deve ser configurado da seguinte maneira:



Esse arquivo irá garantir a solidez e o bom funcionamento do seu banco de dados e tudo o que se refere à persistência.
Na pasta “src” você vai desenvolver a lógica da sua aplicação:
- Ex: Na pasta “src” você cria um package br.com.ejb.estudo e coloca as suas classes “*.java”dentro desse local.
Criar 1 projeto WAR:
- “New Dinamic Web Project”
Seguimos um padrão colocando o nome do projeto da seguinte maneira: “NomeProjetoWAR”
Nesse projeto você irá desenvolver toda a sua parte de VISÃO com o FLEX 3, deverão conter os seus arquivos “*.as”, “*.mxml”, “*.swf” .

Criar 1 projeto EAR:
- “New Enterprise Application Project”
Seguimos um padrão colocando o nome do projeto da seguinte maneira: “NomeProjetoEAR”
Apenas um arquivo deve ser configurado nesse projeto, o arquivo “application.xml”.
Ele deverá ficar dessa maneira:



No eclipse, você deve ir na aba “Servers” e adicionar um novo servidor:
- “New Server JBoss v4.2.3”
Dentro desse servidor, deve ser adicionado os seus projeto EAR e automaticamente os outros serão adicionados, isso se deve ao fato do EAR levar as referências dos projetos JPA e WAR.
Uma observação super importante a cerca do JBoss:
Na pasta “jboss-4.2.3.GA\server\default\deploy” que, por default, representa a sua instância no servidor, será o local onde acontecerá o deploy de toda a sua aplicação. A sua fábrica de conexões vai ficar centralizada em um arquivo chamado “nomeprojeto-ds.xml” que segue abaixo:



Esse arquivo permite, ainda, a possibilidade de configurações avançadas de conexão.
Clique com o botão direito no projeto JPA (onde devem estar as suas classes de domínio (POJOS))e clique em “Add graniteDS Nature” e configure conforme a imagem abaixo:



Você deve adicionar, explicitamente, essas libs ao seu projeto NomeProjetoWAR, clicando com o botão direito sobre o projeto e setando toda essa assinatura ao seu Flex Compiler:

-locale en_US -services "../WebContent/WEB-INF/flex/services-config.xml" -include-libraries "../flex_libs/granite-essentials.swc" "../flex_libs/granite.swc" "-keep-as3-metadata=Bindable,Managed,ChangeEvent,NonCommittingChangeEvent, Transient,Version,Name,In,Out,Observer,Destroy, Event"