Hibernate Interceptor

32 views
Skip to first unread message

William Seiti Mizuta

unread,
May 15, 2013, 4:50:31 PM5/15/13
to caelum-...@googlegroups.com
Olá a todos,

estamos usando o vraptor 3.5.1 com vraptor-hibernate 1.0.0. Como nós temos a própria SessionFactory, retiramos o package do META-INF, conforme descrito em http://www.guj.com.br/230-erro-ao-subir-vraptor-350-com-vraptor-hibernate.

Nós também estamos criando um interceptor próprio para tratar a abertura/commit/rollback das transactions. Para isso, criarmos um novo interceptor que extende da classe HibernateTransactionInterceptor. Contudo, dessa maneira, o Vraptor está chamando o nosso Interceptor duas vezes e dando erro na hora de criar a segunda transaction. Contudo, se a gente implementa Interceptor ao invés de extender da HibernateTransactionInterceptor, esse erro não acontece mais.

Alguém tem alguma ideia do motivo?

William Seiti Mizuta
@williammizuta
Caelum | Ensino e Inovação

Chico Sokol

unread,
May 15, 2013, 5:05:19 PM5/15/13
to caelum-...@googlegroups.com
Só corrigindo, o erro acontece na hora de comitar a transação (porque ela foi comitada antes).

Pra verificar que nosso interceptor estava sendo chamado duas vezes, colocamos um breakpoint no controller e verificamos a stack.



--
Chico Sokol


2013/5/15 William Seiti Mizuta <william...@gmail.com>

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vrapto...@googlegroups.com.
To post to this group, send email to caelum-...@googlegroups.com.
Visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Lucas Cavalcanti

unread,
May 15, 2013, 5:39:45 PM5/15/13
to caelum-vraptor
ao invés de registrar a classe filha com @INtercepts, use @Component =)


2013/5/15 Chico Sokol <chico...@gmail.com>

William Seiti Mizuta

unread,
May 15, 2013, 5:49:28 PM5/15/13
to caelum-...@googlegroups.com
E por quê isso funciona?


William Seiti Mizuta
@williammizuta
Caelum | Ensino e Inovação


2013/5/15 Lucas Cavalcanti <lucasm...@gmail.com>

Lucas Cavalcanti

unread,
May 15, 2013, 5:58:54 PM5/15/13
to caelum-vraptor
pq o VRaptor registra a hierarquia de classes toda da classe...

como a filha e a mãe tem @Intercepts, ele vai registrar as duas... qdo vc coloca @Component, ele vai registrar a mãe como @Intercepts, mas não a filha... e vai funcionar pq se vc pede uma instancia da mãe, a implementação é a filha.

Rafael Ponte

unread,
May 15, 2013, 6:20:22 PM5/15/13
to caelum-...@googlegroups.com
Oi Lucas,

Deixa eu tirar uma dúvida rápida aqui com você -  tem a ver com essa thread!

Estou querendo sobrescrever o CommonsUploadMultipartInterceptor. Daí o que eu fiz foi algo abaixo:

@Intercepts(before = ResourceLookupInterceptor.class, after = {}) @RequestScoped public class CustomCommonsUploadMultipartInterceptor extends CommonsUploadMultipartInterceptor {
...
}

Isso é suficiente para sobrescrever o interceptor ou preciso do @Component? O @Request sozinho não evitaria o problema relatado nessa thread?


2013/5/15 Lucas Cavalcanti <lucasm...@gmail.com>

Chico Sokol

unread,
May 15, 2013, 6:24:15 PM5/15/13
to caelum-...@googlegroups.com
(se fosse um interceptor do vraptor mesmo não aconteceria?)



--
Chico Sokol


2013/5/15 Chico Sokol <chico...@gmail.com>
Aproveitando, esse comportamento só acontece porque a classe está no jar?



--
Chico Sokol


2013/5/15 Rafael Ponte <rpo...@gmail.com>

Chico Sokol

unread,
May 15, 2013, 6:23:11 PM5/15/13
to caelum-...@googlegroups.com
Aproveitando, esse comportamento só acontece porque a classe está no jar?



--
Chico Sokol


2013/5/15 Rafael Ponte <rpo...@gmail.com>
Oi Lucas,

Otávio Garcia

unread,
May 15, 2013, 6:54:47 PM5/15/13
to caelum-...@googlegroups.com
Os componentes do core do vraptor são registrados diferente, manualmente na classe BaseConstants.

2013/5/15 Chico Sokol <chico...@gmail.com>

Lucas Cavalcanti

unread,
May 15, 2013, 8:34:43 PM5/15/13
to caelum-vraptor
Mas nesse caso não é pq é do jar não... é o comportamento normal mesmo...

Rafael, isso vai registrar o interceptor duas vezes... tem que usar o @Component mesmo.


2013/5/15 Otávio Garcia <ota...@otavio.com.br>

Rafael Ponte

unread,
May 15, 2013, 9:09:10 PM5/15/13
to caelum-...@googlegroups.com

Apenas o @Component? Sem o @Intercepts?

Lucas Cavalcanti

unread,
May 15, 2013, 9:09:54 PM5/15/13
to caelum-vraptor
isso


2013/5/15 Rafael Ponte <rpo...@gmail.com>

Otávio Garcia

unread,
May 15, 2013, 9:09:54 PM5/15/13
to caelum-...@googlegroups.com
Isso, sem @Intercepts.

2013/5/15 Rafael Ponte <rpo...@gmail.com>

Vinicius Maia

unread,
May 15, 2013, 9:13:31 PM5/15/13
to caelum-...@googlegroups.com
Curiosidade.... como o vraptor identifica qual instancia usar ?

Acredito que são criadas 2 instâncias a pai e filho correto ?

Otávio Garcia

unread,
May 15, 2013, 9:14:56 PM5/15/13
to caelum-...@googlegroups.com
Se você sobrescreve um componente, ele carrega apenas o componente sobrescrito como "instância para usar".

2013/5/15 Vinicius Maia <vmai...@gmail.com>

Rafael Ponte

unread,
May 15, 2013, 9:16:11 PM5/15/13
to caelum-...@googlegroups.com

So para nao restar duvidas: Estender a classe/interface a ser sobrescrita e anotar com @Component diz ao VRaptor para utilizar a nossa classe onde necessario, seria isso mesmo?

Lucas Cavalcanti

unread,
May 15, 2013, 9:19:15 PM5/15/13
to caelum-vraptor
@Vinicius: é criada só uma instancia, da classe filha.

@Rafael: sim, sempre que pedir a classe mãe será usada a sua implementação.


2013/5/15 Rafael Ponte <rpo...@gmail.com>

Vinicius Maia

unread,
May 15, 2013, 9:20:57 PM5/15/13
to caelum-...@googlegroups.com
@Otávio e @Lucas , neste caso não poderia ter dois filhos do mesmo pai como componente ?

Minha curiosidade surgiu devido ao @Component mudar a característica de um Interceptor.

Lucas Cavalcanti

unread,
May 15, 2013, 9:31:01 PM5/15/13
to caelum-vraptor
Pode sim, desde que ninguém peça uma instância do pai diretamente. No caso do interceptor, é pedida a instância de cada classe de interceptor.

Se for pedida a instancia do pai e ele tiver duas implementações suas diferentes vai dar erro.


2013/5/15 Vinicius Maia <vmai...@gmail.com>

Vinicius Maia

unread,
May 15, 2013, 9:34:16 PM5/15/13
to caelum-...@googlegroups.com
@Lucas ... tendi. thx!!

Chico Sokol

unread,
May 15, 2013, 11:50:13 PM5/15/13
to caelum-...@googlegroups.com, caelum-vraptor
Achei que fosse pq o problema começou depois de atualizar pro 3.5 e colocar o plugin do hibernate...


--
Chico Sokol

Rafael Ponte

unread,
May 16, 2013, 12:28:50 AM5/16/13
to caelum-...@googlegroups.com

So para constar, removendo o @Intercepts e colocando apenas o @Component deu certo! O interceptor é executado apenas uma unica vez, e nao mais duas.

Reply all
Reply to author
Forward
0 new messages