Intercept do utils do VRaptor

3 respostas
Vendramini87

Olá,

estou usando o provider de Session e SessionFactory dos utils do VRaptor:

<context-param>
    <param-name>br.com.caelum.vraptor.provider</param-name>
    <param-value>br.com.caelum.vraptor.util.hibernate.HibernateCustomProvider</param-value>
</context-param>

Nele, há um @Intercept:

@Override
protected void registerCustomComponents(ComponentRegistry registry) {
    registry.register(HibernateTransactionInterceptor.class,
                        HibernateTransactionInterceptor.class);
}

Gostaria que esse intercept agisse apenas em alguns métodos. Se eu criasse um intercept, faria uma Annotation e verificaria no método accepts dele se o método em questão possui essa Annotation.

Como fazer esse comportamento utilizando o intercept do VRaptor?

abs,
André Vendramini

3 Respostas

G

Esse interceptor para JPA e Hibernate processa todos os métodos.

A regra basicamente é que há um método chamado accepts(Method). Nele você implementa a sua condição, se você quer ou não interceptar tal método, classe ou o que você imaginar. No caso do interceptor de JPA e Hibernate ele sempre retorna true, ou seja, processa tudo.

Vendramini87

Então preciso fazer meu próprio provider? Pois quando for fazer uma requisição utilizando AJAX para fazer um cálculo, sem acesso a banco, ele irá interceptar e injetar a Session mesmo sem necessidade, correto?

Lucas_Cavalcanti

você pode fazer seu próprio provider, mas acho que não vai precisar… tenta fazer o seguinte, cria a classe:

@Component // pq vc  sobrescrevendo, o normal é @Intercepts
public class CustomHibernateInterceptor extends HibernateTransactionInterceptor {
   //delegate constructor
   @Override
   public boolean accepts(..) {
      //sua lógica de accepts aqui
   }
}

se isso não funcionar, troque o @Component por @Intercepts e crie uma classe parecida com o HibernateCustomProvider, só que sem o register do Interceptor, e registre ela no web.xml ao inves da do vraptor

Criado 22 de março de 2010
Ultima resposta 22 de mar. de 2010
Respostas 3
Participantes 3