Dúvida com escopo do Spring

11/06/2010

0

Pessoal, estou fazendo um aplicação web com Spring, Hibernate, JSF e Facelets;
No MB, estou usando o escopo do Spring como session:

@Controller("Controller")
@Scope("session")

só q ouvi vários relatos sobre esse tipo de escopo, e que o melhor era se fosse request, pois bem, mudei pra request, só q minha aplicação não funcionou mais direito;

Tenho uma tela de consulta, onde quando o usuário clica numa linha do datatable ele é jogado para o form com os dados, mas, só funciona com o @Scope("session") se colocar request, quando clico não acontece nada nem dá erro, é como se ficasse congelado, não importa se no faces-config.xml está session ou request, então a pergunta:

1º o escopo session do Spring, tem a mesma finalidade do escopo session do jsf, guardando tudo na sessão, inclusive a arvore de componentes, ou simplesmente guarda as dependências necessárias para que possa injetar quando preciso? se sim, tem algum problema se deixar o escopo session no spring, já q posso colocar o escopo request no faces-config e a aplicação funciona?

2º se o escopo session do Spring pesa, o que fazer para minha aplicação funcionar quando colocar request?

Obrigado.
José Filho

José Filho

Responder

Posts

11/06/2010

Dyego Carmo

Voce precisa se lembrar que o scopo de request dura apenas UMA chamda , e então os dados são perdidos...

Voce não consegue aproveitar os dados entre requisicoes ...

Normalmente para nao pesar , voce usa o escopo de CONVERSACAO , ele tem o melhor dos dois mundos,
Responder

11/06/2010

José Filho

Dyego, me explica melhor sobre escopo de conversação?
Responder

18/06/2010

Dyego Carmo

O escopo de conversation é como se fosse a uniao entre o escopo request e o escopo session...

Voce pode demarcar a "sessao"... no metodo que inicia o procedimento voce "inicia" a conversa... no metodo que finaliza ela , voce "finaliza" a conversa...

Entende ?




----------------------------------------------------------------
Dúvidas em Programação ? - http://www.forHelp.US
Controverso Eu ? - http://www.go-java.com
Responder

19/06/2010

José Filho

Dyego, entendi.

Vendo algumas matérias sobre o problema, vi q existem 3 possibilidades:

O uso do keepalive;
O uso do saveState;
e o uso do escopo de conversação;

Resolvi 1º tentar o keepalive, pois é o se aconselha quando já se usa o richfaces; no MB coloquei @keepalive(ajaxonly=true), ai então ele começou a mostrar mensagens de NoSerializableException, então implementei serializable no MB e no DaoGenericoImp, funcionou, mas a alegria de pobre dura pouco, os botões dentro do datatable estão funcionando, só q hj verifiquei um efeito colateral, não consigo mais salvar um registro, ele faz tudo como se estivesse salvando, não dá erro de nada, mas o registro não vai pra tabela, e agora? Alguma sugestão?
Estou querendo esgotar as possibilidade com o keepalive antes de tentar outra opção.

Obrigado
Responder

21/06/2010

José Filho

No post anterior falei q não dava nenhum erro, mas agora depois de algumas mudanças no xhtml, ele apresentou o erro:

javax.servlet.ServletException: #{fiscalController.adicionar}: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.org.creapi.entities.Fiscal


o método adicionar:
    public String adicionar() {
        
        fiscalDao.salvar(this.fiscal);

        this.prepareDetalhar();
        return FORMULARIO;
    }


o método salvar:
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public T salvar(T object) {
        getEntityManager().clear();
        getEntityManager().persist(object);
        return object;
    }



tb já andei pesquisando algo sobre o erro acima, vi um artigo do Paulo Silveira q fala sobre esse erro no blog da Caelum, tentando resolver o problema de acordo com o q foi repassado pelo Paulo, retirei o @GeneretadValue e passei a atribuir manualmente os códigos, o erro não aparece, mas tb, os dados não são gravados.

Obrigado



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar