Ir para o conteúdo

 Voltar a Jaguar - Des...
Tela cheia

Recuperação de dados diferente do gravado no banco

27 de Maio de 2013, 16:43 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 22 vezes
Boa tarde,

estou realizando uma recuperação de um objeto por um campo que é a Pk da tabela. 
Antes desta recuperação realizei um update (commit realizado com sucesso, select diretamente no banco de dados retorna o valor alterado).
Então realiza a consulta novamente, e o valor retorna o que esta no banco de dados. 
Ao atualizar a página (F5), aleatoriamente retorna o valor antes do update. 

No persistence.xml da aplicação já coloquei
<property name="openjpa.DataCache" value="false"/>
<property name="openjpa.QueryCache" value="false"/>
<property name="openjpa.jdbc.QuerySQLCache" value="false"/>

//O método que realiza a recuperação do objeto
public Object recuperaObjetoPorId(PlcBaseContextVO context, Class classe, Object id)  {
EntityManager entityManager = getEntityManager(context);
  Query query = entityManager.createQuery("from " + classe.getName() + " where id = :id");
query.setParameter("id", id);
query.setHint("org.hibernate.cacheMode", CacheMode.IGNORE);
try{
return query.setMaxResults(1).getSingleResult();
}catch (NoResultException e) {
return null;
}
}

Alguem sabe da onde o jpa esta recuperando esta informação desatualizada?

Autor: Jean carlos Schappo


66 comentários

  • Da91ac0b37d54233c31ad28c0cac2114?only path=false&size=50&d=404Adolfo Junior(usuário não autenticado)
    27 de Maio de 2013, 18:24

     

    Jean,

    O seu Facade esta anotado com @PlcTransational?

    • D420a3a0b7a203d8afe749e90c987314?only path=false&size=50&d=404Jean carlos Schappo(usuário não autenticado)
      28 de Maio de 2013, 7:41

       

      Adolfo, 

        A Facade não esta  anotado com @PlcTransational

      • Da91ac0b37d54233c31ad28c0cac2114?only path=false&size=50&d=404Adolfo Junior(usuário não autenticado)
        28 de Maio de 2013, 7:55

         

        Jean,

        Pode ser que a transacao não esteja sendo finalizada ao sair da fachada.
        Teria como colar o facade aqui para olharmos? 

        • D420a3a0b7a203d8afe749e90c987314?only path=false&size=50&d=404Jean carlos Schappo(usuário não autenticado)
          28 de Maio de 2013, 8:43

           

          Adolfo, 

          Vou fazer um teste colocando @PlcTransactional(commit=false) nos métodos de recuperação. 

           Já que estamos falando sobre esta anotação, já tinha percebido que quando vou inserir ou alterar registro é necessário adiciona-lá com commit=true. Mas não entendo porque adicionar em um método de consulta, já que não seria necessário abrir uma transação para realizar a consulta.

          • Da91ac0b37d54233c31ad28c0cac2114?only path=false&size=50&d=404Adolfo Junior(usuário não autenticado)
            28 de Maio de 2013, 8:52

             

            Jean,

            No método PlcBaseJpaManager#getEntityManager quando é criado o EntityManager uma transação é iniciada. "entityManager.getTransaction().begin();", por esta razão é necessário que o façade faça commit ou rollback, caso contrário a mesma transação será compartilhada em requisições futuras ocasionando cenários não previsíveis como o descrito acima.

            • D420a3a0b7a203d8afe749e90c987314?only path=false&size=50&d=404Jean carlos Schappo(usuário não autenticado)
              28 de Maio de 2013, 17:07

               

              Adolfo,

              realizei os testes depois de adicionar a anotação  @PlcTransactional em todos os métodos da facade e resolveu o problema. Ou seja, o problema não estava no cache do jpa e sim em uma transação que não foi finalizada.

               Obrigado pela ajuda

Lançamento do Jaguar 6.1 eminente...

6 de Maio de 2012, 8:13, por Desconhecido

O Jaguar 6.1 traz um grande leque de inovações dentre eles os exclusivos Jaguar Extensions, que possibilitam que plugins de arquitetura sejam criados com elegância através de técnicas de OCP (Open/Closed Principle). Este mecanimo possibilita que as implementações hiper-produtivas para Padrões de Caso de Uso de alto nível do Jaguar sejam expandidas através de componentes que encapsulam novos padrões, tanto para a parte OO (framework) quanto de geração de código complementar!



Evento Jaguar em Brasília, no dia19/10

3 de Outubro de 2011, 9:34, por Desconhecido

Quem estiver em Brasília no dia 19/10 não deixe de investir uma manhã neste evento, que é bem prático (mão na massa para desenvolver uma aplicação "do zero" com Java EE 6 / Jaguar) e traz insights importantes sobre tendências para a próxima década (BPMN 2.0, CMIS, Web Mobile com HTML5, etc.), implementados via Jaguar Extensions.



Ibrowse lança ferramenta de migração dos aplicativos desenvolvidos em Oracle Forms/Reports para o ambiente Jaguar

19 de Agosto de 2011, 16:37, por Desconhecido

A ferramenta lançada é o Telescope for Jaguar na modalidade SaaS, que visa a automação no processo de migração dos aplicativos desenvolvidos em Oracle Forms/Reports para o ambiente Java EE 6 na arquitetura Jaguar, que é uma das soluções do Portal do Software Publico.



Treinamento Jaguar em Brasília

27 de Julho de 2011, 14:47, por Desconhecido

Autor: Anna Carolina Duarte



A Ibrowse em parceria com a Universidade Luterana do Brasil (ULBRA) realiza o 1º curso de extensão em Jaguar

11 de Julho de 2011, 15:35, por Desconhecido

Autor: Justino Paulo