Cookbooks Lazy EntityManger ou Lazy Session

5 respostas
Lavieri

Conforme sugerido pelo lucascs estou colocando os códigos fontes, depois detalho como fazer, mas o javadoc ja fala por se.

Meu post:

Lavieri:
^^ … consegui fazer o LAZY com meus entityManager e session lucascs \o/ …

agora ate economizando anotação eu estou… antes eu tinha uma anotação @DontIjectDaoFactory (no VRaptor 2) … quando encontrava essa anotação em logica ou componente, eu não criava uma conexão real…

agora eu mando um EntityManger Enchaced que só conecta mesmo quando chama o primeiro método… não preciso mais me preucupar com métodos que não precisam de conexão ^^ … CGLib muito rox

Post do lucas:

lucascs:
Muito bom! =)

Se você quiser escrever uma receita de como vc fez isso, a gente publica no site do VRaptor… e agradece imensamente =)

a seção de cookbooks vai ser inaugurada hoje provavelmente, com receitas de usuários

[]'s

Observação: estou indo para trabalho, mais a noite escrevo um roteiro do que fiz.

Descrição das classes:
[list]HibernateUtils.java Classe auxiliar, para resolver problema de queda de conexão por inatividade (não é requirida, os locais onde tem invocações a ela podem ser removidos).[/list]
[list]ReflectionUtils.java Uma pequena classe utilitária, apenas com um método para encontrar métodos por reflexão sem lançar checked exceptions.[/list]
[list]JITEntityManagerCreator.java Cria EntityManagers Just in Time (ou seja LAZY) após a chamada a um método especifico da interface do manager, necessário a injeção de uma EntityManagerFactory. Implementa um ComponentFactory<EntityManager>[/list]
[list]JITSessionCreatorFromSessionFactory.java Cria Hibernate Session Just in Time (ou seja LAZY) após a chamada a um método especifico da interface da Session, necessário a injeção de uma SessionFacotry. Implementa um ComponentFactory<Session>[/list]
[list]JITSessionCreatorFromEntityManager.java Cria Hibernate Session Just in Time (ou seja LAZY) após a chamada a um método especifico da interface da Session, necessário a injeção de um EntityManager que também seja LAZY e que seja criado pelo hibernate provider. Implementa um ComponentFactory<Session>[/list]

5 Respostas

Lavieri

[size=22]Just in Time EntityManager Creator.[/size]

JITEntityManagerCreator.java
visualizar: http://pastebin.com/f425c7d25

Lavieri

[size=22]Abstract Just in Time Hibernate Session Creator[/size]

AbstractJITSessionCreator.java
visualizar: http://pastebin.com/f553247ec

Lavieri

[size=18]Just-in-Time Hibernate Session Creator from SessionFactory[/size]

JITSessionCreatorFromSessionFactory.java
visualizar: http://pastebin.com/f229db00a

Lavieri

[size=18]Just-in-Time Hibernate Session Creator from EntityManager[/size]

JITSessionCreatorFromEntityManager.java
visualizar: http://pastebin.com/f1f11b636

Lavieri

Exemplo de CustumProvider

package br.com.tomazlavieri.vraptor;

import br.com.caelum.vraptor.ComponentRegistry;
import br.com.caelum.vraptor.ioc.spring.SpringProvider;
import br.com.tomazlavieri.vraptor.component.EntityManagerFactoryCreator;
import br.com.tomazlavieri.vraptor.component.JITEntityManagerCreator;
import br.com.tomazlavieri.vraptor.component.JITSessionCreatorFromEntityManager;
import br.com.tomazlavieri.vraptor.interceptor.TransactionInterceptor;

/**
 * Registra os componentes core.<br>
 * <br>
 * Sempre que sobrescrever use <b>&lt;tt&gt;super.{@link #registerCustomComponents(ComponentRegistry)}&lt;/tt&gt;</b>
 * @author Tomaz Lavieri
 * @since 1.0
 */
public class CoreProvider extends SpringProvider {
	
	@Override
	protected void registerCustomComponents(ComponentRegistry registry) {
		registry.register(JITSessionCreatorFromEntityManager.class, JITSessionCreatorFromEntityManager.class);
		registry.register(JITEntityManagerCreator.class, JITEntityManagerCreator.class);
		registry.register(EntityManagerFactoryCreator.class, EntityManagerFactoryCreator.class);
	}
}

Adicionar ao web.xml

web.xml
&lt;context-param&gt;
		&lt;param-name&gt;br.com.caelum.vraptor.provider&lt;/param-name&gt;
		&lt;param-value&gt;br.com.tomazlavieri.vraptor.CoreProvider&lt;/param-value&gt;
	&lt;/context-param&gt;
Criado 16 de outubro de 2009
Ultima resposta 16 de out. de 2009
Respostas 5
Participantes 1