Salve pessoal, bom dia… estou usando o jboss Seam a algum tempo e gostaria de iniciar uma discussão. Refere-se a combinação de SCOPO + FLUSHMODETYPE. Tenho notado que se usar o FlushModeType.AUTO, a cada query que eu realizo acontece o flush. Pois bem segundo a documentação este comportamento é esperado. Estou pensando em mudar a abordagem e utilizar Flush Manual na conversação e NÃO aninhar (nested) conversações em casos de tela master-detail. Gostaria de saber qual a opinião de quem já usa o seam em grandes aplicações a algum tempo e conhece o cenário que estou falando.
alguém ?
Estou trabalhando com seam a poucos meses… Tenho uma situação igual…
Quando executo queries em métodos de negócio, o flush é executado, validando constraints e executando rollback com exception, prejudicando o fluxo desejado descrito no caso de uso.
Outro problema que encontrei é o meu log (feito pelo interceptor do hibernate). O Log está sendo realizado mais de uma vez indesejadamente, pois o desejado era que realizasse somente uma vez o log com o flush no final das operações de persistência.
Se alguém tiver alguma abordagem para tratar deste problema, eu também agradeço…
Utilize um EntityManager Extended, assim o entitymanager não será limpado ao término das transações CMT, e sim somente quando você desejar limpa-lo sincronizando com a base, usando Flush ou quando destruído, manualmente ou pelo container. Flush Mode Manual é uma feature do Hibernate… não me lembro, mas não irá ajuda-lo muito se o mais certo seria um Session Bean Stateful com Scopo de Conversation, tome cuidado para sempre terminar a conversa para que o Bean seja removido e suas alterações nas entidades sujas sejam commitadas, cuidado também quando executar queries em cima de entidades já gerenciadas sujas, isso pode acabar com dados inconsistentes, sincronize sempre com o banco antes.
Espero ter ajudado.
É possível executar queries fora de contextos de transação, marcando o método. Você também pode tentar settar o flushMode do objeto query, especifico para aquela ação de seleção para commit, assim nada será sincronizado com o banco
BOm, no meu caso, é exatamente isso que preciso, executar queryes fora do contexto transacional, como faço isso ?