Aplicação atualiza informações apenas após reiniciar o servidor GlassFish

Java

12/11/2014

Boa tarde.

Estou com um problema em minha aplicação, onde algumas informações só são atualizadas após reiniciar o servidor GlassFish.

Segue exemplo:

Possuo algumas tabelas em meu banco de dados, são elas
Tarefa, Projeto e Grupo. Junto a essas tabelas foram criadas outras duas tabelas para realizar o relacionamento ManyToMany entre as entidades, são elas: ProjetoTarefa e GrupoProjeto.

A única diferença entre as tabelas de relacionamento, é que a tabela ProjetoTarefa tem um campo próprio, e devido a este campo, foi necessário realizar o mapeamento.

Ao tentarmos vincular Grupo com Projeto pela aplicação, tudo ocorre normalmente, as páginas atualizam as informações referentes. Porém ao tentarmos vincular Projeto e Tarefa, (assim criando uma nova entidade Projetotarefa), há necessidade de reiniciar o servidor GlassFish para que as páginas apresentem as informações referentes.

Verifiquei os escopos e me parecem estar OK.

Alguém ja passou por isso? Toda ajuda é bem vinda, Obrigado!!
Bruno Santana

Bruno Santana

Curtidas 0

Melhor post

Ronaldo Lanhellas

Ronaldo Lanhellas

13/11/2014

Ronaldo creio que resolvi!!!!
no meio desse processo de remoção tambem mandei remover da lista desse projeto assim o registro foi apagado... Acho que estava entendendo de forma errada, eu pensei que por ProjetoTarefa ser uma entidade em si ao mandar remove-la tudo iria acontecer perfeitamente... mas parece que também é necessário remover de Projeto (que possui uma lista de ProjetoTarefa) esses itens :S

parece que resolveu...

Outra pergunta, estou realizando esse trabalho como meu TCC.. e voce tem sido uma grande ajuda respondendo aqui minahs dúvidas no fórum... Você permite que eu cite seu nome no meu trabalho? Valeu Ronaldo!


Correto, essa é a ideia, trabalhar com sua entidade "composta" ProjetoTarefa como itens das outras, pensando assim você consegue remover elas. Respondendo sua pergunta sobre o TCC, pode sim citar, não há nenhum problema, fico grato pelo reconhecimento.
GOSTEI 1

Mais Respostas

Ronaldo Lanhellas

Ronaldo Lanhellas

12/11/2014

Deixa eu ver se entendi seu problema. Ao criar um registro que associa "Grupo" com "Projeto" ele é mostrado normalmente na sua página (XHTML, por exemplo). Porém ao tentar criar um registro que associa Projeto com Tarefa = Entidade ProjetoTarefa, este só é mostrado se você reiniciar o glassFish ?
GOSTEI 0
Bruno Santana

Bruno Santana

12/11/2014

Perfeito Ronaldo.

Alguma luz?
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

12/11/2014

Que frameworks você está usando ? SPring, Hibernate, JPA ?
GOSTEI 0
Bruno Santana

Bruno Santana

12/11/2014

JPA, CDI, Primefaces
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

12/11/2014

Depois de salvar o registro, chama o "refresh" do seu entityManager. ex: "em.refresh()";
GOSTEI 0
Bruno Santana

Bruno Santana

12/11/2014

hmmmm estou tentando mas esta dando o erro: Entity no longer exists in the database... parece que a entity nao esta mais no estado managed.. Sabe o que posso fazer?
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

12/11/2014

hmmmm estou tentando mas esta dando o erro: Entity no longer exists in the database... parece que a entity nao esta mais no estado managed.. Sabe o que posso fazer?


Quando for salvar, utilizar o "em.merge()" em vez do persist, faz este teste.
GOSTEI 0
Bruno Santana

Bruno Santana

12/11/2014

Opa Ronaldo, muito obrigado pelas dicas, parece que consegui resolver os problemas da atualização, mas sem utilizar o refresh, fui tentando tanta solução que nem sei direito o que foi... vi pela internet para utilizar <shared-cache-mode>NONE<shared-cache-mode> no persistence.xml testei isso também...
Sobre as atualizações que não apareciam parece que tudo foi resolvido mas aí que me aparece outro problema...

Ao criar um vinculo entra Projeto e Tarefa (assim criando a entidade ProjetoTarefa por possuir um campo próprio bla bla bla...) está tudo ok, mas ao desvincular a mesma acontece o seguinte...
ao realizar uma "desvinculação" fiz a seguinte lógica seto como NULL o campo Projeto e como NULL o campo Tarefa de ProjetoTarefa e após isso uso um "servico.removeProjetoTarefa"... mas por algum motivo MALÍGNO as linhas do banco de dados não são removidas, a desvinculação acontece, para aplicação parece q tudo ocorre normal pois ele realmente seta como NULL os campos assim "desvinculando" projeto de tarefa... mas a tabela projetoTarefa no banco fica com "sujeira"... as linhas permanecem lá...

Tem alguma pista? todas as outras entidades do sistema são removidas normalmente, apenas nesse caso isso acontece... e todo "remove" passa pelo mesmo lugar, que é meu repositórioBásico(método removeEntidade)...

Obrigado!!!
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

12/11/2014

Checa se o seu relacionamento está com Cascade.ALL configurado.
GOSTEI 0
Bruno Santana

Bruno Santana

12/11/2014

opa, não está Ronaldo... antes das modificações feitas a pouco eles estavam com Cascade.REMOVE (Projeto e Tarefa) e também com o orphanRemoval=true...
Acabei retirando.. agora estão sem nenhum cascade mas o erro persiste... será que é algo relacionado a isso?
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

12/11/2014

opa, não está Ronaldo... antes das modificações feitas a pouco eles estavam com Cascade.REMOVE (Projeto e Tarefa) e também com o orphanRemoval=true...
Acabei retirando.. agora estão sem nenhum cascade mas o erro persiste... será que é algo relacionado a isso?


Em algum local tem que ter o cascade para que eles sejam removidos, caso contrário você terá que fazer isso manualmente, ou seja, remover item a item.
GOSTEI 0
Bruno Santana

Bruno Santana

12/11/2014

Entao Ronaldo, acredito que ja esteja fazendo a operação de remoção manualmente, em meu Bean la na "camada de apresentação" tenho o seguinte código:
	if(tarefasSelecionadasExcluir != null){
		for(ProjetoTarefa trf : tarefasSelecionadasExcluir){
			
			trf.setPtrTarefa(null);
			trf.setPtrProjeto(null);
			
			servicoTarefa.removeProjetoTarefa(trf);
		}


que pelo que eu planejei... para cada item selecionado em uma table que mostra as relações do projeto com as tarefas ele irá setar os campos PtrTarefa(que representa a tarefa) e PtrProjeto(que representa o projeto) como nulo assim fazendo a desvinculação, e logo abaixo chamo meu servico para realmente remover do banco essa relação...
Em teoria com isso a remoção deveria ocorrer por completo não? ou estou enganado
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

12/11/2014

Em primeiro lugar você não precisa setar "nulo" em tarefa e projeto, a simples remoção do item já deveria ser suficiente. Tente remover sem setar nulo, se ocorrer algum erro poste aqui.
GOSTEI 0
Bruno Santana

Bruno Santana

12/11/2014

Nenhum erro ocorre, o que estou percebendo é que o ID dessa relação aumenta cada vez que tento realizar esse processo... ao remover as linhas que setava NULL nada acontece, debugando a aplicação ela chega a chamar o metodo removeProjetoTarefa... mas nada acontece...
No meu repositorioBasico onde estão os métodos "padrao" o remove esta assim

    protected void removeEntidade(Object entity) {
        Object objAtualizado = getEntityManager().merge(entity);
        getEntityManager().remove(objAtualizado);
        
    }


Para todo o resto da aplicação está funcionando normalmente, a remoção ocorre sem problemas... nao consigo enxergar o que pode estar acontecendo
GOSTEI 0
Bruno Santana

Bruno Santana

12/11/2014

Ronaldo creio que resolvi!!!!
no meio desse processo de remoção tambem mandei remover da lista desse projeto assim o registro foi apagado... Acho que estava entendendo de forma errada, eu pensei que por ProjetoTarefa ser uma entidade em si ao mandar remove-la tudo iria acontecer perfeitamente... mas parece que também é necessário remover de Projeto (que possui uma lista de ProjetoTarefa) esses itens :S

parece que resolveu...

Outra pergunta, estou realizando esse trabalho como meu TCC.. e voce tem sido uma grande ajuda respondendo aqui minahs dúvidas no fórum... Você permite que eu cite seu nome no meu trabalho? Valeu Ronaldo!
GOSTEI 0
POSTAR