Aplicação atualiza informações apenas após reiniciar o servidor GlassFish
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!!
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
Curtidas 0
Melhor post
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!
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
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
12/11/2014
Perfeito Ronaldo.
Alguma luz?
Alguma luz?
GOSTEI 0
Ronaldo Lanhellas
12/11/2014
Que frameworks você está usando ? SPring, Hibernate, JPA ?
GOSTEI 0
Bruno Santana
12/11/2014
JPA, CDI, Primefaces
GOSTEI 0
Ronaldo Lanhellas
12/11/2014
Depois de salvar o registro, chama o "refresh" do seu entityManager. ex: "em.refresh()";
GOSTEI 0
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
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
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!!!
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
12/11/2014
Checa se o seu relacionamento está com Cascade.ALL configurado.
GOSTEI 0
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?
Acabei retirando.. agora estão sem nenhum cascade mas o erro persiste... será que é algo relacionado a isso?
GOSTEI 0
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?
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
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:
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
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
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
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
Para todo o resto da aplicação está funcionando normalmente, a remoção ocorre sem problemas... nao consigo enxergar o que pode estar acontecendo
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
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!
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