Upload
vera-hanson
View
16
Download
0
Embed Size (px)
DESCRIPTION
Hibernate + JBoss. Mapeamento O-R em aplicações corporativas. Ricardo Cavalcanti [email protected]. Jobson Ronan [email protected]. Hibernate + JBoss. Vantagens Gerenciamento dos detalhes de configurações do Hibernate Gerenciamento de suas Sessões do Hibernate. Hibernate + JBoss. - PowerPoint PPT Presentation
Citation preview
Hibernate + JBoss
Mapeamento O-R em aplicações corporativas
Ricardo [email protected]
Jobson [email protected]
Hibernate + JBoss
Vantagens Gerenciamento dos detalhes de
configurações do Hibernate Gerenciamento de suas Sessões do
Hibernate
Hibernate + JBoss
Usando o Hibernate no JBoss podemos fazer o deploy de nossa aplicação como um “Hibernate Archive”, .har
Torna o uso do Hibernate ainda mais simples
Hibernate MBean
O Hibernate Archive instancia e configura o Hibernate MBean
Este será responsável por construir o SessionFactory e registra-lo no JNDI
O Hibernate MBean, também permite inspecionar e alterar as configurações do SessionFactory em tempo de execução
Hibernate MBean Exemplo
<mbean code="org.jboss.hibernate.jmx.Hibernate“name="jboss.har:service=Hibernate">
<attribute name="DatasourceName">java:/DefaultDS</attribute>
<attribute name="Dialect">net.sf.hibernate.dialect.HSQLDialect
</attribute>
<attribute name="SessionFactoryName">java:/hibernate/SessionFactory
</attribute>
<attribute name="CacheProviderClass">net.sf.hibernate.cache.HashtableCacheProvider
</attribute>
</mbean>
...muito semelhante a configuração do hibernate
Hibernate archive
Contém classes e mapeamentos mais um deployment descriptor hibernate-service.xml no diretório META-INF
hibernate-service.xml<server> <mbean code="org.jboss.hibernate.jmx.Hibernate“
name="jboss.har:service=Hibernate">
<attribute name="DatasourceName">java:/DefaultDS</attribute> <!-- .... --> </mbean></server>
Hibernate archive Estrutura típica
Usando objetos Hibernate
Quando é feito o deploy do hibernate archive, os objetos do Hibernate ficam disponíveis a outras aplicações através do SessionFactory
Uma vez este estando registrado no JNDI, pode se fazer um simples lookup e manualmente criar uma Hibernate Session
InitialContext ctx = new InitialContext();SessionFactory factory = (SessionFactory)
ctx.lookup("java:/hibernate/SessionFactory");Session hsession = factory.openSession();
Usando objetos Hibernate
Esta forma de acesso requer gerenciamento manual das sessões e transações do hibernate
Pode ser útil para migrar código já existente para o JBoss
Porém, no contexto de grandes aplicações J2EE, seria interessante que os objetos do hibernate fizessem parte de uma transaçao JTA existente
Usando objetos Hibernate
Situação comum no caso de querer acessar objetos do hibernate em um Session Bean
O JBoss possui a classe HibernateContext (pkg: org.jboss.hibernate.session) para facilitar esta integração
Método getSession retorna a Session do hibernate ligada a transação JTA corrente
Session hsession = HibernateContext.getSession("java:/hibernate/CaveatEmptorSessionFactory");
Usando objetos Hibernate
Desta forma não é necessário fechar as sessões, tampouco gerenciar as transações
Garante um gerenciamento de transações de forma declarativa
Usando objetos Hibernate
Cuidado com suas lazy collections Uma vez se seus objetos são serializado
e enviados até um cliente, lazy collections passam a não funcionar.
HAR dentro do EAR
Arquivos HAR podem ser usados como componentes de um arquivo EAR durante o deploy
Porém, como arquivo HAR não é um tipo padrão J2EE este precisa ser declarado no arquivo jboss-app.xml
<!DOCTYPE jboss-app PUBLIC "-//JBoss//DTD J2EE Application 1.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-app_4_0.dtd"><jboss-app> <module> <har>caveatemptor.har</har> </module></jboss-app>
Mini-projeto
Implementar o seguinte modelo no hibernate
Locacao
id : IntegerdataLocacao : DatedataDevolucaoPrevista : DatedataDevolucaoEfetiva : Date
Filme
Codigo : IntegerNome : String
0..*0..*
Cliente
cpf : StringNome : String
0..*0..*
Avaliação
id : Integercomentario : Stringnota : Double
0..*0..* 0..*0..*
Mini-projeto
Implementar um Stateless Session Bean no padrão SessionFacade com as seguintes funcionalidades
LocadoraFacade
cadastrarCliente(cliente : Cliente)procurarCliente(cpfCliente : String) : ClienteprocurarCliente(nome : String) : Cliente[]cadastrarFilme(filme : Filme)listarTodosFilmes() : Filme[]listarFilmesDisponíveis() : Filme[]procurarFilme(nome : String) : Filme[]procurarFilme(codigoFilme : Integer) : FilmeefetuarLocacao(cpfCliente : String, codigoFilme : Integer)efetuarDevolucao(cpfCliente : String, codigoFilme : Integer)adicionarComentario(cpfCliente : String, codigoFilme : Integer, comentario : String, nota : double)
<<<StatelessEJB>>>
Referências
The JBoss 4 Application Server Guide, release 2