160 likes | 283 Views
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.
E N D
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 SessionFactorye registra-lo no JNDI • O Hibernate MBean, também permite inspecionar e alterar as configurações do SessionFactoryem 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
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