Download - Hibernate + JBoss
![Page 1: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/1.jpg)
Hibernate + JBoss
Mapeamento O-R em aplicações corporativas
Ricardo [email protected]
Jobson [email protected]
![Page 2: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/2.jpg)
Hibernate + JBoss
Vantagens Gerenciamento dos detalhes de
configurações do Hibernate Gerenciamento de suas Sessões do
Hibernate
![Page 3: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/3.jpg)
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
![Page 4: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/4.jpg)
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
![Page 5: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/5.jpg)
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
![Page 6: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/6.jpg)
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>
![Page 7: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/7.jpg)
Hibernate archive Estrutura típica
![Page 8: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/8.jpg)
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();
![Page 9: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/9.jpg)
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
![Page 10: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/10.jpg)
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");
![Page 11: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/11.jpg)
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
![Page 12: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/12.jpg)
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.
![Page 13: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/13.jpg)
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>
![Page 14: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/14.jpg)
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..*
![Page 15: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/15.jpg)
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>>>
![Page 16: Hibernate + JBoss](https://reader035.vdocuments.com.br/reader035/viewer/2022081811/56812ba3550346895d8fd501/html5/thumbnails/16.jpg)
Referências
The JBoss 4 Application Server Guide, release 2