Hibernate + JBoss
Mapeamento O-R em
aplicações corporativas
Ricardo Cavalcanti
roc3@cin.ufpe.br
Jobson Ronan
jrjs@cin.ufpe.br
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 hibernateservice.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
Mini-projeto

Implementar um Stateless Session
Bean no padrão SessionFacade com
as seguintes funcionalidades
Referências

The JBoss 4 Application Server
Guide, release 2
Download

j2ee_pcc_09_Hibernate