Olá galera,
Estou com uma dúvida de como executar um método ao iniciar a minha aplicação Vraptor.
O método faz uma inserção no banco, de algumas coisas pré configuradas no java. Queria que ao iniciar a aplicação, o vraptor executasse o meu método.
Alguém pode me explicar como faço isso?
Agradeço a ajuda.
tem a anotação @PostContruct que é chamada toda vez que a aplicação inicializa,exemplo:
package easyfair.persitencia;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
@Component
public class SessionCreator implements ComponentFactory<Session> {
private final SessionFactory factory;
private Session session;
public SessionCreator(SessionFactory factory) {
this.factory = factory;
}
@PostConstruct
public void open() {
this.session = factory.openSession();
}
@Override
public Session getInstance() {
return this.session;
}
@PreDestroy
public void close() {
this.session.close();
}
}
Esse exemplo está aqui:http://www.caelum.com.br/apostila-vraptor-hibernate/refatorando-os-daos/#9-4-escopos-definidos-pelo-vraptor , acho que no seu caso é anotar sua classe com @Component e adicionar a anotação @PostContruct no método que vc quer executar quando a aplicação continuar. Eu nunca precisei fazer,mas acho que soluciona o seu problema.
huumm, entendi. Mas quando eu anoto ele com @Component ele tem que ser construido em algum lugar, tem que ser criado em outra classe para poder executar, ou estou errado?
Pensei que seria algo como @Applicationscoped, que iniciaria com a aplicação. Se eu anotar a classe como @Applicationscoped e o método que eu quero executar com @PostConstruct, ele vai iniciar automaticamente com o sistema?
O @ApplicationScoped cria apenas uma instância dessa classe na aplicação,logo se anotar o método com @PostContruct no método que faz essa configuração,você vai ter certeza que ele vai ser chamado apenas uma vez e na inicialização da aplicação. Testa e diz se deu certo.
Não funcionou. Fiz como você disse, iniciei a aplicação e não entrou no método.
Alguma explicação?
Isso funciona quando eu anoto a classe como @ApplicationScoped.
Mas no meu caso, eu estou criando umas instancia de um DAO, que é um @RequestScoped, que gera um erro na execução da aplicação.
Como posso resolver isso??