Lucas Cavalcanti:
vc está achando trabalhoso desenvolver em geral ou só essa parte da Session?
tem uma issue no VRaptor para implementar isso, mas a gente ainda não achou uma forma boa de fazer https://github.com/caelum/vraptor/issues/#issue/188
Não há nada de errado criar uma classe que encapsula um único valor, isso é até uma boa prática. É raro ter um int ou uma string perdida no sistema que não tenha um significado maior que possa ser colocada numa classe. É bem mais fácil dar manutenção depois se for uma classe do que se for um int espalhado pelo código, não é verdade?
E não é uma simples classe que só encapsula os valores, ela pode ter comportamento também. O seu paginator por exemplo poderia ser usado para cuidar dentro da paginação dos seus daos, com um método do tipo:
public class Paginator {
public Query pagina(Query query) {
query.setFirstResult(page*PAGE_SIZE);
.setMaxResults(PAGE_SIZE);
return query;
}
}
Ou seja, não é um trabalho a mais a toa, ele tem algumas vantagens.
Oi Lucas.
De certa forma eu concordo contigo, pois temos alguns benefícios ao implementar uma classe e utilizá-la em sessão, mas em casos muito simples é mais rápido utilizar uma anotação direto no atributo, pois acho trabalhoso no sentido de quantidade de código que terei que gerar ao implementar as classes…
Em comparação, até a versão 2.6.0 podíamos utilizar as anotações @In e @Out.
O qual não era muito elegante.
Sempre achei mais fácil de entendimento e codificação, utilizar apenas uma úncia anotação, por exemplo:
@Resource
public class UsuarioController {
...
...
@SessionScoped
private int pageSize;
@SessionScoped
private int resultSize;
...
...
@ApplicationScoped
private MinhaClasse atributoQualquer;
...
...
public UsuarioController(MinhaClasse minhaClasse, etc...) {
this.atributoQualquer = minhaClasse;
this.pageSize = 30;
this.resultSize = 0;
}
...
...
}
Com isso sei que eu posso enviar valores para a sessão e obtê-las a qualquer momento, pois a própria existências destas anotações sobre os atributos, faria com que o V|Raptor injetasse no Result automaticamente, já que o processo de Injeção de Dependência já esta implementado internamente.
“Veja que a própria leitura do código se torna mais simples.”
Outra coisa!!!
Acredito que aqui não seja o local correto, mas gostaria de sugerir a implementação, no V|Raptor, de uma anotação @NoTransaction, para que esta seja utilizada em lógicas que não demandem transações com o banco de dados; isto é claro, utilizando os componentes opcionais (Hibernate e JPA).
Com isso teremos um ganho de recursos e melhoria de performance, pois em determinados locais não há a necessidade de transações, por exemplo:
@Resource
public class UsuarioController {
...
...
@NoTransaction
@Path("/usuario/formulario")
public void formulario() {}
...
...
}
Obrigado por toda ajuda até o momento.