Esta é para o pessoal do kernel do vraptor3

8 respostas
J

Boa tarde gente!

Como o vraptor3 descobre quais são os controllers?

Obviamente o mecanismo deve ser este: /pessoa/listar -> PessoaController.listar();
( Além da presença da anotação @Resource )

Porém isto é descoberto na hora do “boot” do vraptor3 ou no momento que eu invoco a lógica através da URL?

A questão é, eu precisava se for possível obter do vraptor3, quais são os Controllers da aplicação, para que eu possa pegar a lógica deles via reflexão e cadastrar para controle de permissão.

Atualmente estou usando um código que peguei na JCP Forum, algo como um Package.getClasses() […], que obtém todas as classes do pacote “webapplication.controladores”, para que eu possa fazer a coisa acontecer.

Porém, se eu resolver colocar controllers em outro pacote já viu né?
Alêm deste utilitario ( getClasses ) googleado ser meio feio… sei lá… deselegante?

8 Respostas

Lucas_Cavalcanti

o vraptor faz um preprocessamento no startup da aplicação e registra todos os controllers (e demais componentes) e monta uma lista com as lógicas…

se vc quiser processar os controllers no startup, crie a seguinte classe:

@Component
@ApplicationScoped
public class SuaClasse implements StereotypeHandler {
    
     public Class<...> stereotype() {
          return Resource.class;
     }

     public void handle(...) {
           //sua lógica aqui
     }
}
P

Tbm precise disso pra levantar as logicas para o meu controle de permissão e obtive do Lucas no grupo de desenvolvimento do vRaptor a indicação para usar “DefaultRouter.allRoutes()

G

Lucas, complementando teu post, na verdade o vraptor não carrega os controllers no startup da aplicação, mas sim no primeiro acesso a alguma URI qualquer, parecido com o cloud-start do GAE/J.

pbnf, quando você faz um primeiro acesso em sua aplicação o vraptor imprime no nível de log INFO todos os mapeamentos de URI, classe e método.

Lucas_Cavalcanti

ele não instancia os controllers no startup, mas ele monta as rotas no startup (olha pra todas as classes Controller)

G

Isso mesmo, troquei as palavras na hora de escrever. O vraptor monta as rotas no primeiro acesso feito. :thumbup:

Lucas_Cavalcanti

não, ele não monta no primeiro acesso, ele monta assim que o servidor sobe

G

Há alguma diferença por eu usar JEE6? Porque quando o servidor sobe nada acontece. Aí quando eu faço um primeiro acesso ele faz a leitura dos componentes.

Lucas_Cavalcanti

talvez tenha sim… mas acho estranho de qqer forma…
em todo caso no Servlet 2.5 ele inicia junto com o servidor…
ninguém tá errado então :wink:

Criado 30 de junho de 2010
Ultima resposta 30 de jun. de 2010
Respostas 8
Participantes 4