Nullpointer na implementação do SessionFactory após atualizar vraptor

1 resposta
R

Prezados,

Atualizei o vraptor da versão 3.1.2 para a versão 3.3.1

Meu projeto, possuia uma classe que criava o sessionFactory e convencionava que se a app estivesse subindo na porta 80, iria carregar o arquivo de conexão "produção". em outra porta, iria carregar o arquivo de desenvolvimento.

Após a atualização, estou tomando nullpointer na linha:

log.debug("LocalPort: "+requestInfo.getRequest().getLocalPort());

Pelo visto o contexto não está mais sendo carregado neste momento.
Como posso fazer pra nao tomar esse nullpointer ou qual outra maneira de convencionar isto (não estou usando Maven).

@ApplicationScoped
public class SessionFactoryCreator implements ComponentFactory<SessionFactory> {

	private final Logger log = Logger.getLogger(getClass());
	private final RequestInfo requestInfo;
	private SessionFactory factory;

	public SessionFactoryCreator(RequestInfo requestInfo) {
		this.requestInfo = requestInfo;
	}

	@PostConstruct
	public void create() {
		log.debug("LocalPort: "+requestInfo.getRequest().getLocalPort());
		String arquivoConexao = "desenvolvimento.cfg.xml";
		if (requestInfo.getRequest().getLocalPort() == 80) {
			log.debug("connecting at Real DataBase");
			arquivoConexao = "producao.cfg.xml";
		}
		factory = new AnnotationConfiguration()
		.configure(arquivoConexao)
		.configure("mapeamento.cfg.xml")
		.buildSessionFactory();

	}

	public SessionFactory getInstance() {
		return factory;
	}

	@PreDestroy
	public void destroy() {
		factory.close();
	}

}

1 Resposta

Lucas_Cavalcanti

o RequestInfo só está ativo em uma request. Não dá pra usar em um @ApplicationScoped.

o que deve estar diferente é que nas novas versões do VRaptor os componentes application scoped são inicializados junto com o servidor. Antes era só quando você pedia uma sessionFactory.

você pode usar esse plugin do VRaptor:

ou fazer alguma coisa que dependa só do ServletContext (como um context-param), daí você recebe o context no construtor e faz a sua lógica de selecionar a configuração correta.

Criado 22 de junho de 2011
Ultima resposta 22 de jun. de 2011
Respostas 1
Participantes 2